mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 02:42:50 +00:00
Compare commits
76 Commits
2025-04-03
...
2025-04-09
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edfbc82048 | ||
|
|
2c36a13af1 | ||
|
|
607ab48f79 | ||
|
|
30fbcb5ba8 | ||
|
|
ef81b82d87 | ||
|
|
f1a29c1ebb | ||
|
|
404ae5dbcf | ||
|
|
84478921e7 | ||
|
|
2b8d10a4d9 | ||
|
|
fefdcbbad1 | ||
|
|
6c239ceb56 | ||
|
|
b520c0ab5f | ||
|
|
d329666a88 | ||
|
|
874b61d4d5 | ||
|
|
a536c4a5a0 | ||
|
|
e4ef18ccfc | ||
|
|
d949e836b5 | ||
|
|
ed29ba3409 | ||
|
|
495da1bf98 | ||
|
|
cc17c2618d | ||
|
|
3dffd02f08 | ||
|
|
f2f10376ac | ||
|
|
3ab2ecc3ef | ||
|
|
5413498759 | ||
|
|
44a944f4b3 | ||
|
|
bf1966f578 | ||
|
|
3504cda21c | ||
|
|
6c1b5d3144 | ||
|
|
146b0fcb3f | ||
|
|
aa3d6f4f8b | ||
|
|
542f93437a | ||
|
|
9ef7ad5d2a | ||
|
|
7ab476e034 | ||
|
|
4ce9551f60 | ||
|
|
efcd660e55 | ||
|
|
125f843b19 | ||
|
|
a5acfd25f6 | ||
|
|
895edccf28 | ||
|
|
5a74f2970b | ||
|
|
9a906d35e2 | ||
|
|
97674cfae7 | ||
|
|
89ae467364 | ||
|
|
42a7c00bca | ||
|
|
d28368b596 | ||
|
|
9786bfb55e | ||
|
|
26ea046ba2 | ||
|
|
061c7ebd2e | ||
|
|
5313bb0103 | ||
|
|
86577a0d0d | ||
|
|
4ae0352304 | ||
|
|
0c202066f5 | ||
|
|
9bac1398b2 | ||
|
|
251f3c411d | ||
|
|
5b73662d9c | ||
|
|
4ef88cd051 | ||
|
|
427ce771d7 | ||
|
|
c08ebc48e8 | ||
|
|
421248ccf3 | ||
|
|
b395a1846c | ||
|
|
c2893f3edf | ||
|
|
00f91843ec | ||
|
|
5451047f44 | ||
|
|
d8848464be | ||
|
|
019e1ac8a0 | ||
|
|
d4b67e0c7e | ||
|
|
112fa215fb | ||
|
|
f6a77ec41f | ||
|
|
71a37368b0 | ||
|
|
214d21f91e | ||
|
|
8b1cdd1f3f | ||
|
|
2a24d53b54 | ||
|
|
51692da70f | ||
|
|
481156275b | ||
|
|
23c01141db | ||
|
|
109235f720 | ||
|
|
4912f76bc5 |
120
CHANGELOG.md
120
CHANGELOG.md
@@ -14,6 +14,126 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-04-09
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Paperless-NGX: Extend Granian Service Env [@MickLesk](https://github.com/MickLesk) ([#3790](https://github.com/community-scripts/ProxmoxVE/pull/3790))
|
||||||
|
- Paperless-NGX: remove gunicorn, use python3 for webserver [@MickLesk](https://github.com/MickLesk) ([#3785](https://github.com/community-scripts/ProxmoxVE/pull/3785))
|
||||||
|
- HomeAssistantOS: allow Proxmox version 8.4 [@quentinvnk](https://github.com/quentinvnk) ([#3773](https://github.com/community-scripts/ProxmoxVE/pull/3773))
|
||||||
|
- Tandoor: Add xmlsec as dependency [@tremor021](https://github.com/tremor021) ([#3762](https://github.com/community-scripts/ProxmoxVE/pull/3762))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- harmonize pve versions check & vm vars [@MickLesk](https://github.com/MickLesk) ([#3779](https://github.com/community-scripts/ProxmoxVE/pull/3779))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- core: Removal of OS/Version Selection from Advanced Settings [@MickLesk](https://github.com/MickLesk) ([#3771](https://github.com/community-scripts/ProxmoxVE/pull/3771))
|
||||||
|
- core: move misc scripts to structured addon/pve paths | Refactor JSON Editor & Script Mapping [@MickLesk](https://github.com/MickLesk) ([#3765](https://github.com/community-scripts/ProxmoxVE/pull/3765))
|
||||||
|
|
||||||
|
## 2025-04-08
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#3751](https://github.com/community-scripts/ProxmoxVE/pull/3751))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Alpine-Wireguard: Fix for sysctl and ip_forward [@juronja](https://github.com/juronja) ([#3744](https://github.com/community-scripts/ProxmoxVE/pull/3744))
|
||||||
|
- TriliumNext: fix dump-db [@MickLesk](https://github.com/MickLesk) ([#3741](https://github.com/community-scripts/ProxmoxVE/pull/3741))
|
||||||
|
- Actual: Reduce RAM to 4GB and old space to 3072MB [@dannyellis](https://github.com/dannyellis) ([#3730](https://github.com/community-scripts/ProxmoxVE/pull/3730))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Alpine-MariaDB: better handling of adminer installation [@MickLesk](https://github.com/MickLesk) ([#3739](https://github.com/community-scripts/ProxmoxVE/pull/3739))
|
||||||
|
- Paperless-GPT: Add logging to service file [@tremor021](https://github.com/tremor021) ([#3738](https://github.com/community-scripts/ProxmoxVE/pull/3738))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Meilisearch: Fix Typo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3749](https://github.com/community-scripts/ProxmoxVE/pull/3749))
|
||||||
|
|
||||||
|
## 2025-04-07
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Breaking: Hoarder > Karakeep [@MickLesk](https://github.com/MickLesk) ([#3699](https://github.com/community-scripts/ProxmoxVE/pull/3699))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Actual: Increase RAM and add heap-space var for nodejs [@MickLesk](https://github.com/MickLesk) ([#3713](https://github.com/community-scripts/ProxmoxVE/pull/3713))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Alpine-MariaDB: Fix Install Service startup [@MickLesk](https://github.com/MickLesk) ([#3701](https://github.com/community-scripts/ProxmoxVE/pull/3701))
|
||||||
|
- Zitadel: Fix release tarball crawling [@tremor021](https://github.com/tremor021) ([#3716](https://github.com/community-scripts/ProxmoxVE/pull/3716))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Kimai: bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3724](https://github.com/community-scripts/ProxmoxVE/pull/3724))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Zabbix, get always latest version [@MickLesk](https://github.com/MickLesk) ([#3720](https://github.com/community-scripts/ProxmoxVE/pull/3720))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Changed the category of Channels DVR and NextPVR [@johnsturgeon](https://github.com/johnsturgeon) ([#3729](https://github.com/community-scripts/ProxmoxVE/pull/3729))
|
||||||
|
|
||||||
|
## 2025-04-06
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Actual: Add git dependency & change yarn commands [@MickLesk](https://github.com/MickLesk) ([#3703](https://github.com/community-scripts/ProxmoxVE/pull/3703))
|
||||||
|
- Pelican-Panel: Fix PHP 8.4 Repository [@MickLesk](https://github.com/MickLesk) ([#3700](https://github.com/community-scripts/ProxmoxVE/pull/3700))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Implement FAQ component and integrate it into the main page [@BramSuurdje](https://github.com/BramSuurdje) ([#3709](https://github.com/community-scripts/ProxmoxVE/pull/3709))
|
||||||
|
|
||||||
|
## 2025-04-05
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Bump vite from 6.2.4 to 6.2.5 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3668](https://github.com/community-scripts/ProxmoxVE/pull/3668))
|
||||||
|
|
||||||
|
## 2025-04-04
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- meilisearch [@MickLesk](https://github.com/MickLesk) ([#3638](https://github.com/community-scripts/ProxmoxVE/pull/3638))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Pelican Panel: Bump php to 8.4 [@bvdberg01](https://github.com/bvdberg01) ([#3669](https://github.com/community-scripts/ProxmoxVE/pull/3669))
|
||||||
|
- Pterodactyl: Bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3655](https://github.com/community-scripts/ProxmoxVE/pull/3655))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Caddy: add git for xcaddy [@MickLesk](https://github.com/MickLesk) ([#3657](https://github.com/community-scripts/ProxmoxVE/pull/3657))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 💾 Core
|
||||||
|
|
||||||
|
- core: fix raw path [@MickLesk](https://github.com/MickLesk) ([#3656](https://github.com/community-scripts/ProxmoxVE/pull/3656))
|
||||||
|
|
||||||
## 2025-04-03
|
## 2025-04-03
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
APP="Actual Budget"
|
APP="Actual Budget"
|
||||||
var_tags="finance"
|
var_tags="finance"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="4096"
|
||||||
var_disk="4"
|
var_disk="7"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
var_unprivileged="1"
|
var_unprivileged="1"
|
||||||
@@ -35,6 +35,13 @@ function update_script() {
|
|||||||
systemctl stop actualbudget
|
systemctl stop actualbudget
|
||||||
msg_ok "${APP} Stopped"
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
|
if ! command -v git &>/dev/null; then
|
||||||
|
msg_info "Installing git"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y git
|
||||||
|
msg_ok "Installed git"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
cd /tmp || exit
|
cd /tmp || exit
|
||||||
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
|
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
|
||||||
@@ -77,7 +84,10 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
cd /opt/actualbudget || exit
|
cd /opt/actualbudget || exit
|
||||||
$STD yarn workspaces focus @actual-app/sync-server --production
|
export NODE_OPTIONS="--max_old_space_size=3072"
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn run build:server
|
||||||
|
#$STD yarn workspaces focus @actual-app/sync-server --production
|
||||||
echo "${RELEASE}" >/opt/actualbudget_version.txt
|
echo "${RELEASE}" >/opt/actualbudget_version.txt
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
|||||||
46
ct/alpine-postgresql.sh
Normal file
46
ct/alpine-postgresql.sh
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://postgresql.org/
|
||||||
|
|
||||||
|
APP="Alpine-PostgreSQL"
|
||||||
|
var_tags="${var_tags:-alpine;database}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.21}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
msg_info "Updating Alpine Packages"
|
||||||
|
$STD apk update
|
||||||
|
$STD apk upgrade
|
||||||
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
|
msg_info "Updating PostgreSQL"
|
||||||
|
$STD apk upgrade postgresql postgresql-contrib
|
||||||
|
msg_ok "Updated PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Restarting PostgreSQL"
|
||||||
|
$STD rc-service postgresql restart
|
||||||
|
msg_ok "Restarted PostgreSQL"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
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 IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}"
|
||||||
14
ct/debian.sh
14
ct/debian.sh
@@ -6,13 +6,13 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Source: https://www.debian.org/
|
# Source: https://www.debian.org/
|
||||||
|
|
||||||
APP="Debian"
|
APP="Debian"
|
||||||
var_tags="os"
|
var_tags="${var_tags:-os}"
|
||||||
var_cpu="1"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="512"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="2"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="debian"
|
var_os="${var_os:-debian}"
|
||||||
var_version="12"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="1"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
6
ct/headers/alpine-postgresql
Normal file
6
ct/headers/alpine-postgresql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ____ __ _____ ____ __
|
||||||
|
/ | / /___ (_)___ ___ / __ \____ _____/ /_____ _________ / ___// __ \ / /
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / /
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/karakeep
Normal file
6
ct/headers/karakeep
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __
|
||||||
|
/ /______ __________ _/ /_____ ___ ____
|
||||||
|
/ //_/ __ `/ ___/ __ `/ //_/ _ \/ _ \/ __ \
|
||||||
|
/ ,< / /_/ / / / /_/ / ,< / __/ __/ /_/ /
|
||||||
|
/_/|_|\__,_/_/ \__,_/_/|_|\___/\___/ .___/
|
||||||
|
/_/
|
||||||
6
ct/headers/meilisearch
Normal file
6
ct/headers/meilisearch
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ___ _ ___ __
|
||||||
|
/ |/ /__ (_) (_)_______ ____ ___________/ /_
|
||||||
|
/ /|_/ / _ \/ / / / ___/ _ \/ __ `/ ___/ ___/ __ \
|
||||||
|
/ / / / __/ / / (__ ) __/ /_/ / / / /__/ / / /
|
||||||
|
/_/ /_/\___/_/_/_/____/\___/\__,_/_/ \___/_/ /_/
|
||||||
|
|
||||||
@@ -40,23 +40,23 @@ function update_script() {
|
|||||||
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
|
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
|
||||||
$STD apt-get install -y graphicsmagick ghostscript
|
$STD apt-get install -y graphicsmagick ghostscript
|
||||||
fi
|
fi
|
||||||
cd /opt
|
cd /opt || exit
|
||||||
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
|
||||||
mv /opt/hoarder/.env /etc/hoarder/hoarder.env
|
mv /opt/hoarder/.env /etc/hoarder/hoarder.env
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/hoarder
|
rm -rf /opt/hoarder
|
||||||
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip")
|
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
||||||
unzip -q v${RELEASE}.zip
|
unzip -q v"${RELEASE}".zip
|
||||||
mv hoarder-${RELEASE} /opt/hoarder
|
mv karakeep-"${RELEASE}" /opt/hoarder
|
||||||
cd /opt/hoarder/apps/web
|
cd /opt/hoarder/apps/web || exit
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm exec next build --experimental-build-mode compile
|
$STD pnpm exec next build --experimental-build-mode compile
|
||||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
|
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
|
||||||
cd /opt/hoarder/apps/workers
|
cd /opt/hoarder/apps/workers || exit
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
export DATA_DIR=/opt/hoarder_data
|
export DATA_DIR=/opt/hoarder_data
|
||||||
cd /opt/hoarder/packages/db
|
cd /opt/hoarder/packages/db || exit
|
||||||
$STD pnpm migrate
|
$STD pnpm migrate
|
||||||
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
|
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
@@ -65,7 +65,7 @@ function update_script() {
|
|||||||
systemctl start hoarder-browser hoarder-workers hoarder-web
|
systemctl start hoarder-browser hoarder-workers hoarder-web
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -R /opt/v${RELEASE}.zip
|
rm -R /opt/v"${RELEASE}".zip
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
|||||||
85
ct/karakeep.sh
Normal file
85
ct/karakeep.sh
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 tteck
|
||||||
|
# Author: MickLesk (Canbiz) & vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://karakeep.app/
|
||||||
|
|
||||||
|
APP="karakeep"
|
||||||
|
var_tags="bookmark"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="4096"
|
||||||
|
var_disk="10"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/karakeep ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop karakeep-web karakeep-workers karakeep-browser
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
if [[ $(corepack -v) < "0.31.0" ]]; then
|
||||||
|
$STD npm install -g corepack@0.31.0
|
||||||
|
fi
|
||||||
|
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
|
||||||
|
$STD apt-get install -y graphicsmagick ghostscript
|
||||||
|
fi
|
||||||
|
cd /opt || exit
|
||||||
|
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
||||||
|
mkdir -p /etc/karakeep
|
||||||
|
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
||||||
|
fi
|
||||||
|
rm -rf /opt/karakeep
|
||||||
|
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
||||||
|
unzip -q "v${RELEASE}.zip"
|
||||||
|
mv karakeep-"${RELEASE}" /opt/karakeep
|
||||||
|
cd /opt/karakeep/apps/web || exit
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm exec next build --experimental-build-mode compile
|
||||||
|
cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web
|
||||||
|
cd /opt/karakeep/apps/workers || exit
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
export DATA_DIR=/opt/karakeep_data
|
||||||
|
cd /opt/karakeep/packages/db || exit
|
||||||
|
$STD pnpm migrate
|
||||||
|
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start karakeep-browser karakeep-workers karakeep-web
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -R /opt/v"${RELEASE}".zip
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
23
ct/kimai.sh
23
ct/kimai.sh
@@ -27,6 +27,21 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
|
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||||
|
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
|
||||||
|
$STD apt-get install -y \
|
||||||
|
php8.4 \
|
||||||
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
|
||||||
|
libapache2-mod-php8.4
|
||||||
|
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
BACKUP_DIR="/opt/kimai_backup"
|
BACKUP_DIR="/opt/kimai_backup"
|
||||||
|
|
||||||
@@ -45,13 +60,13 @@ function update_script() {
|
|||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
rm -rf /opt/kimai
|
rm -rf /opt/kimai
|
||||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
|
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
|
||||||
unzip -q ${RELEASE}.zip
|
unzip -q "${RELEASE}".zip
|
||||||
mv kimai-${RELEASE} /opt/kimai
|
mv kimai-"${RELEASE}" /opt/kimai
|
||||||
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
|
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
|
||||||
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
|
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
|
||||||
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
||||||
rm -rf "$BACKUP_DIR"
|
rm -rf "$BACKUP_DIR"
|
||||||
cd /opt/kimai
|
cd /opt/kimai || exit
|
||||||
$STD composer install --no-dev --optimize-autoloader
|
$STD composer install --no-dev --optimize-autoloader
|
||||||
$STD bin/console kimai:update
|
$STD bin/console kimai:update
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
@@ -70,7 +85,7 @@ function update_script() {
|
|||||||
msg_ok "Setup Permissions"
|
msg_ok "Setup Permissions"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf ${RELEASE}.zip
|
rm -rf "${RELEASE}".zip
|
||||||
rm -rf "$BACKUP_DIR"
|
rm -rf "$BACKUP_DIR"
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
|||||||
95
ct/meilisearch.sh
Normal file
95
ct/meilisearch.sh
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.meilisearch.com/
|
||||||
|
|
||||||
|
APP="Meilisearch"
|
||||||
|
var_tags="${var_tags:-full-text-search}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-7}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /opt/Meilisearch_version.txt ]]; then
|
||||||
|
msg_error "No Meilisearch Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
|
||||||
|
"1" "Update Meilisearch" ON \
|
||||||
|
"2" "Update Meilisearch-UI" OFF \
|
||||||
|
3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
if [ "$UPD" == "1" ]; then
|
||||||
|
msg_info "Stopping Meilisearch"
|
||||||
|
systemctl stop meilisearch
|
||||||
|
msg_ok "Stopped Meilisearch"
|
||||||
|
|
||||||
|
msg_info "Updating Meilisearch"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
|
||||||
|
$STD dpkg -i $tmp_file
|
||||||
|
echo "$RELEASE" >/opt/meilisearch_version.txt
|
||||||
|
msg_ok "Updated Meilisearch"
|
||||||
|
|
||||||
|
msg_info "Starting Meilisearch"
|
||||||
|
systemctl start meilisearch
|
||||||
|
msg_ok "Started Meilisearch"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$UPD" == "2" ]; then
|
||||||
|
if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then
|
||||||
|
msg_error "No Meilisearch-UI Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping Meilisearch-UI"
|
||||||
|
systemctl stop meilisearch-ui
|
||||||
|
msg_ok "Stopped Meilisearch-UI"
|
||||||
|
|
||||||
|
msg_info "Updating Meilisearch-UI"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
tmp_dir=$(mktemp -d)
|
||||||
|
RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
|
||||||
|
rm -rf /opt/meilisearch-ui
|
||||||
|
mkdir -p /opt/meilisearch-ui
|
||||||
|
curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
|
||||||
|
unzip -q "$tmp_file" -d "$tmp_dir"
|
||||||
|
mv "$tmp_dir"/*/* /opt/meilisearch-ui/
|
||||||
|
cd /opt/meilisearch-ui
|
||||||
|
sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
|
||||||
|
mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
|
||||||
|
$STD pnpm install
|
||||||
|
echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
|
||||||
|
msg_ok "Updated Meilisearch-UI"
|
||||||
|
|
||||||
|
msg_info "Starting Meilisearch-UI"
|
||||||
|
systemctl start meilisearch-ui
|
||||||
|
msg_ok "Started Meilisearch-UI"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}meilisearch: http://${IP}:7700$ | meilisearch-ui: http://${IP}:24900${CL}"
|
||||||
@@ -27,10 +27,27 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
|
||||||
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
|
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||||
|
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
|
||||||
|
$STD apt-get install -y \
|
||||||
|
php8.4 \
|
||||||
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
||||||
|
libapache2-mod-php8.4
|
||||||
|
|
||||||
|
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
cd /opt/pelican-panel
|
cd /opt/pelican-panel || exit
|
||||||
$STD php artisan down
|
$STD php artisan down
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,27 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
|
|
||||||
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
|
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||||
|
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
|
||||||
|
$STD apt-get install -y \
|
||||||
|
php8.4 \
|
||||||
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
||||||
|
libapache2-mod-php8.4
|
||||||
|
|
||||||
|
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
cd /opt/pterodactyl-panel
|
cd /opt/pterodactyl-panel || exit
|
||||||
$STD php artisan down
|
$STD php artisan down
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
|||||||
@@ -27,20 +27,24 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y python3-xmlsec
|
||||||
|
fi
|
||||||
if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
|
if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
|
||||||
msg_ok "There is currently no update available."
|
msg_ok "There is currently no update available."
|
||||||
else
|
else
|
||||||
msg_info "Updating ${APP} (Patience)"
|
msg_info "Updating ${APP} (Patience)"
|
||||||
export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
|
export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
|
||||||
cd /opt/tandoor/
|
cd /opt/tandoor/ || exit
|
||||||
$STD pip3 install -r requirements.txt
|
$STD pip3 install -r requirements.txt
|
||||||
$STD /usr/bin/python3 /opt/tandoor/manage.py migrate
|
$STD /usr/bin/python3 /opt/tandoor/manage.py migrate
|
||||||
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
|
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
|
||||||
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
|
$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
|
||||||
cd /opt/tandoor/vue
|
cd /opt/tandoor/vue || exit
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
cd /opt/tandoor
|
cd /opt/tandoor || exit
|
||||||
$STD python3 version.py
|
$STD python3 version.py
|
||||||
systemctl restart gunicorn_tandoor
|
systemctl restart gunicorn_tandoor
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|||||||
@@ -37,13 +37,13 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating to ${RELEASE}"
|
msg_info "Updating to ${RELEASE}"
|
||||||
mkdir -p /opt/trilium_backup
|
mkdir -p /opt/trilium_backup
|
||||||
mv /opt/trilium/{db,dump-db} /opt/trilium_backup/
|
mv /opt/trilium/db /opt/trilium_backup/
|
||||||
rm -rf /opt/trilium
|
rm -rf /opt/trilium
|
||||||
cd /tmp
|
cd /tmp
|
||||||
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz")
|
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz")
|
||||||
tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz
|
tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz
|
||||||
mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium
|
mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium
|
||||||
cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/
|
cp -r /opt/trilium_backup/db /opt/trilium/
|
||||||
echo "v${RELEASE}" >/opt/${APP}_version.txt
|
echo "v${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated to ${RELEASE}"
|
msg_ok "Updated to ${RELEASE}"
|
||||||
|
|
||||||
|
|||||||
14
ct/ubuntu.sh
14
ct/ubuntu.sh
@@ -5,14 +5,14 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://ubuntu.com/
|
# Source: https://ubuntu.com/
|
||||||
|
|
||||||
echo -e "Loading..."
|
|
||||||
APP="Ubuntu"
|
APP="Ubuntu"
|
||||||
var_tags="os"
|
var_tags="${var_tags:-os}"
|
||||||
var_cpu="1"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="512"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="2"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="ubuntu"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="24.04"
|
var_version="${var_version:-24.04}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
11
ct/zabbix.sh
11
ct/zabbix.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: tteck (tteckster)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://www.zabbix.com/
|
# Source: https://www.zabbix.com/
|
||||||
|
|
||||||
@@ -38,8 +38,11 @@ function update_script() {
|
|||||||
cp -R /usr/share/zabbix/ /opt/zabbix-backup/
|
cp -R /usr/share/zabbix/ /opt/zabbix-backup/
|
||||||
#cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
|
#cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
|
||||||
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
||||||
cd /tmp
|
cd /tmp || exit
|
||||||
curl -fsSL "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb" -o $(basename "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")
|
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
|
||||||
|
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
|
||||||
|
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
|
||||||
|
-o /tmp/zabbix-release_latest+debian12_all.deb
|
||||||
$STD dpkg -i zabbix-release_latest+debian12_all.deb
|
$STD dpkg -i zabbix-release_latest+debian12_all.deb
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
|
$STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop zitadel
|
systemctl stop zitadel
|
||||||
@@ -35,7 +35,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /tmp || exit
|
cd /tmp || exit
|
||||||
curl -fsSL https://github.com/zitadel/zitadel/releases/download/"$RELEASE"/zitadel-linux-amd64.tar.gz | tar -xz
|
curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
|
||||||
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
|
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
|||||||
12
frontend/package-lock.json
generated
12
frontend/package-lock.json
generated
@@ -3255,7 +3255,7 @@
|
|||||||
"version": "19.0.0-rc.1",
|
"version": "19.0.0-rc.1",
|
||||||
"resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
|
"resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
|
||||||
"integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
|
"integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
@@ -3265,7 +3265,7 @@
|
|||||||
"version": "19.0.0-rc.1",
|
"version": "19.0.0-rc.1",
|
||||||
"resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
|
"resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
|
||||||
"integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
|
"integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
@@ -7851,6 +7851,7 @@
|
|||||||
"version": "3.5.3",
|
"version": "3.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
|
||||||
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin/prettier.cjs"
|
"prettier": "bin/prettier.cjs"
|
||||||
@@ -9541,6 +9542,7 @@
|
|||||||
"version": "5.8.2",
|
"version": "5.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
|
||||||
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
|
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@@ -9665,9 +9667,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.2.4",
|
"version": "6.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
|
||||||
"integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
|
"integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
"script": "ct/actualbudget.sh",
|
"script": "ct/actualbudget.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 4096,
|
||||||
"hdd": 4,
|
"hdd": 7,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC IP-Tag",
|
"name": "Proxmox VE LXC IP-Tag",
|
||||||
"slug": "add-lxc-iptag",
|
"slug": "add-lxc-iptag",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-12-16",
|
"date_created": "2024-12-16",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/add-lxc-iptag.sh",
|
"script": "tools/pve/add-lxc-iptag.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "NetBird",
|
"name": "NetBird",
|
||||||
"slug": "add-netbird-lxc",
|
"slug": "add-netbird-lxc",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-19",
|
"date_created": "2024-05-19",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/add-netbird-lxc.sh",
|
"script": "tools/addon/add-netbird-lxc.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Tailscale",
|
"name": "Tailscale",
|
||||||
"slug": "add-tailscale-lxc",
|
"slug": "add-tailscale-lxc",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/add-tailscale-lxc.sh",
|
"script": "tools/addon/add-tailscale-lxc.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "All Templates",
|
"name": "All Templates",
|
||||||
"slug": "all-templates",
|
"slug": "all-templates",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/all-templates.sh",
|
"script": "tools/addon/all-templates.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Channels DVR Server",
|
"name": "Channels DVR Server",
|
||||||
"slug": "channels",
|
"slug": "channels",
|
||||||
"categories": [
|
"categories": [
|
||||||
15
|
13
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Cleaner",
|
"name": "Proxmox VE LXC Cleaner",
|
||||||
"slug": "clean-lxcs",
|
"slug": "clean-lxcs",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/clean-lxcs.sh",
|
"script": "tools/pve/clean-lxcs.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Clean Orphaned LVM",
|
"name": "Proxmox Clean Orphaned LVM",
|
||||||
"slug": "clean-orphaned-lvm",
|
"slug": "clean-orphaned-lvm",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2025-01-29",
|
"date_created": "2025-01-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/clean-orphaned-lvm.sh",
|
"script": "tools/pve/clean-orphaned-lvm.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "VS Code Server",
|
"name": "VS Code Server",
|
||||||
"slug": "code-server",
|
"slug": "code-server",
|
||||||
"categories": [
|
"categories": [1, 20, 11],
|
||||||
1,
|
|
||||||
20,
|
|
||||||
11
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8680,
|
"interface_port": 8680,
|
||||||
@@ -18,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/code-server.sh",
|
"script": "tools/addon/code-server.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Cron LXC Updater",
|
"name": "Proxmox VE Cron LXC Updater",
|
||||||
"slug": "cron-update-lxcs",
|
"slug": "cron-update-lxcs",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/cron-update-lxcs.sh",
|
"script": "tools/pve/cron-update-lxcs.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
@@ -36,9 +34,8 @@
|
|||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
|
"text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "CrowdSec",
|
"name": "CrowdSec",
|
||||||
"slug": "crowdsec",
|
"slug": "crowdsec",
|
||||||
"categories": [
|
"categories": [6],
|
||||||
6
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/crowdsec.sh",
|
"script": "tools/addon/crowdsec.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "File Browser",
|
"name": "File Browser",
|
||||||
"slug": "filebrowser",
|
"slug": "filebrowser",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/filebrowser.sh",
|
"script": "tools/addon/filebrowser.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
@@ -27,7 +25,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "alpine",
|
"type": "alpine",
|
||||||
"script": "misc/filebrowser.sh",
|
"script": "tools/addon/filebrowser.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Filesystem Trim",
|
"name": "Proxmox VE LXC Filesystem Trim",
|
||||||
"slug": "fstrim",
|
"slug": "fstrim",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/fstrim.sh",
|
"script": "tools/pve/fstrim.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Glances",
|
"name": "Glances",
|
||||||
"slug": "glances",
|
"slug": "glances",
|
||||||
"categories": [
|
"categories": [9],
|
||||||
9
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 61208,
|
"interface_port": 61208,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/glances.sh",
|
"script": "tools/addon/glances.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Hoarder",
|
|
||||||
"slug": "hoarder",
|
|
||||||
"categories": [
|
|
||||||
12
|
|
||||||
],
|
|
||||||
"date_created": "2024-12-02",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3000,
|
|
||||||
"documentation": "https://docs.hoarder.app/",
|
|
||||||
"website": "https://hoarder.app/",
|
|
||||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/hoarder.svg",
|
|
||||||
"description": "Hoarder is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, Hoarder is the perfect tool for anyone who wants to keep track of their digital life.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/hoarder.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 4096,
|
|
||||||
"hdd": 10,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Host Backup",
|
"name": "Proxmox VE Host Backup",
|
||||||
"slug": "host-backup",
|
"slug": "host-backup",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/host-backup.sh",
|
"script": "tools/pve/host-backup.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
34
frontend/public/json/karakeep.json
Normal file
34
frontend/public/json/karakeep.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "karakeep",
|
||||||
|
"slug": "karakeep",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-04-07",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://docs.karakeep.app/",
|
||||||
|
"website": "https://karakeep.app/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/karakeep.svg",
|
||||||
|
"description": "karakeep (formerly: hoarder) is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, karakeep is the perfect tool for anyone who wants to keep track of their digital life.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/karakeep.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 10,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Kernel Clean",
|
"name": "Proxmox VE Kernel Clean",
|
||||||
"slug": "kernel-clean",
|
"slug": "kernel-clean",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/kernel-clean.sh",
|
"script": "tools/pve/kernel-clean.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Kernel Pin",
|
"name": "Proxmox VE Kernel Pin",
|
||||||
"slug": "kernel-pin",
|
"slug": "kernel-pin",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-08",
|
"date_created": "2024-05-08",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/kernel-pin.sh",
|
"script": "tools/pve/kernel-pin.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": "https://docs.linkwarden.app/",
|
"documentation": "https://docs.linkwarden.app/",
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Container LXC Deletion",
|
"name": "Container LXC Deletion",
|
||||||
"slug": "lxc-delete",
|
"slug": "lxc-delete",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2025-01-21",
|
"date_created": "2025-01-21",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/lxc-delete.sh",
|
"script": "tools/pve/lxc-delete.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
43
frontend/public/json/meilisearch.json
Normal file
43
frontend/public/json/meilisearch.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Meilisearch",
|
||||||
|
"slug": "meilisearch",
|
||||||
|
"categories": [
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"date_created": "2025-04-04",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 7700,
|
||||||
|
"documentation": "https://www.meilisearch.com/docs",
|
||||||
|
"website": "https://www.meilisearch.com/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg",
|
||||||
|
"description": "Meilisearch is a fast, open-source search engine designed for instant, full-text search with typo tolerance. It provides an API that allows developers to integrate powerful search features into applications. Meilisearch-UI is an optional web-based interface that provides a simple way to interact with Meilisearch, visualize indexed data, and test queries without needing to use the API directly.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/meilisearch.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 7,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Meilisearch-UI can optionally be installed for a web-based search interface",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Meilisearch-UI has early development status and can cause performance issues",
|
||||||
|
"type": "warn"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Processor Microcode",
|
"name": "Proxmox VE Processor Microcode",
|
||||||
"slug": "microcode",
|
"slug": "microcode",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/microcode.sh",
|
"script": "tools/pve/microcode.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Monitor-All",
|
"name": "Proxmox VE Monitor-All",
|
||||||
"slug": "monitor-all",
|
"slug": "monitor-all",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/monitor-all.sh",
|
"script": "tools/pve/monitor-all.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Netdata",
|
"name": "Proxmox VE Netdata",
|
||||||
"slug": "netdata",
|
"slug": "netdata",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/netdata.sh",
|
"script": "tools/addon/netdata.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "NextPVR",
|
"name": "NextPVR",
|
||||||
"slug": "nextpvr",
|
"slug": "nextpvr",
|
||||||
"categories": [
|
"categories": [
|
||||||
15
|
13
|
||||||
],
|
],
|
||||||
"date_created": "2024-11-20",
|
"date_created": "2024-11-20",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "OliveTin",
|
"name": "OliveTin",
|
||||||
"slug": "olivetin",
|
"slug": "olivetin",
|
||||||
"categories": [
|
"categories": [10],
|
||||||
10
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 1337,
|
"interface_port": 1337,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/olivetin.sh",
|
"script": "tools/addon/olivetin.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server Processor Microcode",
|
"name": "Proxmox Backup Server Processor Microcode",
|
||||||
"slug": "pbs-microcode",
|
"slug": "pbs-microcode",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2025-02-07",
|
"date_created": "2025-02-07",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/pbs_microcode.sh",
|
"script": "tools/pve/pbs_microcode.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server Post Install",
|
"name": "Proxmox Backup Server Post Install",
|
||||||
"slug": "post-pbs-install",
|
"slug": "post-pbs-install",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/post-pbs-install.sh",
|
"script": "tools/pve/post-pbs-install.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Mail Gateway Post Install",
|
"name": "Proxmox Mail Gateway Post Install",
|
||||||
"slug": "post-pmg-install",
|
"slug": "post-pmg-install",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2025-01-20",
|
"date_created": "2025-01-20",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/post-pmg-install.sh",
|
"script": "tools/pve/post-pmg-install.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Post Install",
|
"name": "Proxmox VE Post Install",
|
||||||
"slug": "post-pve-install",
|
"slug": "post-pve-install",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-28",
|
"date_created": "2024-04-28",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/post-pve-install.sh",
|
"script": "tools/pve/post-pve-install.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "PostgreSQL",
|
"name": "PostgreSQL",
|
||||||
"slug": "postgresql",
|
"slug": "postgresql",
|
||||||
"categories": [
|
"categories": [8],
|
||||||
8
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
@@ -24,6 +22,17 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-postgresql.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.21"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE CPU Scaling Governor",
|
"name": "Proxmox VE CPU Scaling Governor",
|
||||||
"slug": "scaling-governor",
|
"slug": "scaling-governor",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/scaling-governor.sh",
|
"script": "tools/pve/scaling-governor.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Updater",
|
"name": "Proxmox VE LXC Updater",
|
||||||
"slug": "update-lxcs",
|
"slug": "update-lxcs",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-04-29",
|
"date_created": "2024-04-29",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/update-lxcs.sh",
|
"script": "tools/pve/update-lxcs.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Update Repositories",
|
"name": "Proxmox Update Repositories",
|
||||||
"slug": "update-repo",
|
"slug": "update-repo",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-11-04",
|
"date_created": "2024-11-04",
|
||||||
"type": "misc",
|
"type": "pve",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/update-repo.sh",
|
"script": "tools/pve/update-repo.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,8 +1,48 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "dgtlmoon/changedetection.io",
|
"name": "OliveTin/OliveTin",
|
||||||
"version": "0.49.10",
|
"version": "2025.4.8",
|
||||||
"date": "2025-04-03T09:17:54Z"
|
"date": "2025-04-08T22:02:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.99.1",
|
||||||
|
"date": "2025-04-08T21:35:21Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "semaphoreui/semaphore",
|
||||||
|
"version": "v2.13.12",
|
||||||
|
"date": "2025-04-08T20:54:58Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fhem/fhem-mirror",
|
||||||
|
"version": "6.2",
|
||||||
|
"date": "2025-04-08T20:30:27Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "runtipi/runtipi",
|
||||||
|
"version": "nightly",
|
||||||
|
"date": "2025-04-06T15:58:08Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "minio/minio",
|
||||||
|
"version": "RELEASE.2025-04-08T15-41-24Z",
|
||||||
|
"date": "2025-04-08T19:51:06Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "goauthentik/authentik",
|
||||||
|
"version": "version/2025.2.4",
|
||||||
|
"date": "2025-04-08T18:39:57Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "influxdata/influxdb",
|
||||||
|
"version": "v1.12.0rc1",
|
||||||
|
"date": "2025-04-08T17:35:21Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "paperless-ngx/paperless-ngx",
|
||||||
|
"version": "v2.15.0",
|
||||||
|
"date": "2025-04-08T17:24:06Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "syncthing/syncthing",
|
"name": "syncthing/syncthing",
|
||||||
@@ -10,69 +50,349 @@
|
|||||||
"date": "2025-04-01T08:45:07Z"
|
"date": "2025-04-01T08:45:07Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "firefly-iii/firefly-iii",
|
"name": "jenkinsci/jenkins",
|
||||||
"version": "v6.2.10",
|
"version": "jenkins-2.505",
|
||||||
"date": "2025-03-22T13:02:26Z"
|
"date": "2025-04-08T15:46:42Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Graylog2/graylog2-server",
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
"version": "6.0.14",
|
"version": "v0.107.59",
|
||||||
"date": "2025-04-03T07:52:24Z"
|
"date": "2025-03-21T11:11:39Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jupyter/notebook",
|
"name": "openobserve/openobserve",
|
||||||
"version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
|
"version": "v0.14.6-rc2",
|
||||||
"date": "2025-04-03T06:49:38Z"
|
"date": "2025-04-08T14:42:54Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "element-hq/synapse",
|
||||||
|
"version": "v1.128.0",
|
||||||
|
"date": "2025-04-08T14:27:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linkwarden/linkwarden",
|
||||||
|
"version": "v2.10.0",
|
||||||
|
"date": "2025-04-08T12:33:57Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.84.3",
|
||||||
|
"date": "2025-03-27T11:54:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prometheus/prometheus",
|
||||||
|
"version": "v0.303.0-rc.1",
|
||||||
|
"date": "2025-04-07T04:39:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NLnetLabs/unbound",
|
||||||
|
"version": "release-1.23.0rc1",
|
||||||
|
"date": "2025-04-08T06:39:46Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Jackett/Jackett",
|
"name": "Jackett/Jackett",
|
||||||
"version": "v0.22.1722",
|
"version": "v0.22.1744",
|
||||||
"date": "2025-04-03T05:51:10Z"
|
"date": "2025-04-08T06:09:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mattermost/mattermost",
|
"name": "StarFleetCPTN/GoMFT",
|
||||||
"version": "server/public/v0.1.11",
|
"version": "v0.2.6",
|
||||||
"date": "2025-03-28T14:04:31Z"
|
"date": "2025-04-08T02:23:38Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
"name": "pelican-dev/panel",
|
||||||
"version": "v4.0.8",
|
"version": "v1.0.0-beta19",
|
||||||
"date": "2025-04-03T05:11:15Z"
|
"date": "2025-04-07T23:06:29Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fhem/fhem-mirror",
|
"name": "pelican-dev/wings",
|
||||||
"version": "6.2",
|
"version": "v1.0.0-beta11",
|
||||||
"date": "2025-04-03T02:01:34Z"
|
"date": "2025-04-07T23:02:00Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ollama/ollama",
|
"name": "Threadfin/Threadfin",
|
||||||
"version": "v0.6.3-rc1",
|
"version": "1.2.32",
|
||||||
"date": "2025-03-26T20:39:01Z"
|
"date": "2025-04-07T20:01:09Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "HabitRPG/habitica",
|
"name": "NodeBB/NodeBB",
|
||||||
"version": "v5.35.1",
|
"version": "v4.2.0",
|
||||||
"date": "2025-04-02T21:49:00Z"
|
"date": "2025-03-19T18:34:01Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "go-gitea/gitea",
|
||||||
|
"version": "v1.23.7",
|
||||||
|
"date": "2025-04-07T19:27:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Checkmk/checkmk",
|
||||||
|
"version": "v2.4.0b4",
|
||||||
|
"date": "2025-04-07T19:14:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wazuh/wazuh",
|
||||||
|
"version": "coverity-w15-4.12.0",
|
||||||
|
"date": "2025-04-07T17:50:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "keycloak/keycloak",
|
"name": "keycloak/keycloak",
|
||||||
"version": "26.1.4",
|
"version": "26.1.4",
|
||||||
"date": "2025-03-13T15:41:42Z"
|
"date": "2025-03-13T15:41:42Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Brandawg93/PeaNUT",
|
||||||
|
"version": "v5.7.0",
|
||||||
|
"date": "2025-04-07T16:14:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thomiceli/opengist",
|
||||||
|
"version": "v1.10.0",
|
||||||
|
"date": "2025-04-07T14:32:15Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apache/cassandra",
|
||||||
|
"version": "5.0.4-tentative",
|
||||||
|
"date": "2025-04-07T12:05:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Graylog2/graylog2-server",
|
||||||
|
"version": "6.2.0-beta.4",
|
||||||
|
"date": "2025-04-07T11:28:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
|
"version": "pmm-6401-v1.115.0",
|
||||||
|
"date": "2025-04-07T11:15:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fallenbagel/jellyseerr",
|
||||||
|
"version": "preview-back-to-axios",
|
||||||
|
"date": "2025-04-07T09:23:08Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zwave-js/zwave-js-ui",
|
||||||
|
"version": "v10.1.5",
|
||||||
|
"date": "2025-04-07T09:19:35Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "redis/redis",
|
"name": "redis/redis",
|
||||||
"version": "8.0-rc1-int2",
|
"version": "8.0-rc1-int2",
|
||||||
"date": "2025-04-02T19:05:08Z"
|
"date": "2025-04-02T19:05:08Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zitadel/zitadel",
|
"name": "zabbix/zabbix",
|
||||||
"version": "v2.63.9",
|
"version": "7.4.0beta1",
|
||||||
"date": "2025-03-31T12:47:21Z"
|
"date": "2025-04-07T08:14:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nzbgetcom/nzbget",
|
||||||
|
"version": "v24.8",
|
||||||
|
"date": "2025-03-18T07:33:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mattermost/mattermost",
|
||||||
|
"version": "server/public/v0.1.11",
|
||||||
|
"date": "2025-03-28T14:04:31Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.1",
|
||||||
|
"date": "2025-01-01T16:15:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "open-webui/open-webui",
|
||||||
|
"version": "v0.6.2",
|
||||||
|
"date": "2025-04-07T03:41:23Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.2.10",
|
||||||
|
"date": "2025-03-22T13:02:26Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Luligu/matterbridge",
|
||||||
|
"version": "2.2.7",
|
||||||
|
"date": "2025-04-06T20:00:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Dolibarr/dolibarr",
|
||||||
|
"version": "21.0.1",
|
||||||
|
"date": "2025-04-06T19:22:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stonith404/pingvin-share",
|
||||||
|
"version": "v1.11.1",
|
||||||
|
"date": "2025-04-06T18:39:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wavelog/wavelog",
|
||||||
|
"version": "2.0.3",
|
||||||
|
"date": "2025-04-06T17:35:41Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TandoorRecipes/recipes",
|
||||||
|
"version": "1.5.34",
|
||||||
|
"date": "2025-03-27T16:17:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stackblitz-labs/bolt.diy",
|
||||||
|
"version": "v0.0.7-hf1",
|
||||||
|
"date": "2025-03-10T20:49:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "msgbyte/tianji",
|
||||||
|
"version": "v1.19.7",
|
||||||
|
"date": "2025-04-06T14:22:44Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Prowlarr/Prowlarr",
|
||||||
|
"version": "v1.32.2.4987",
|
||||||
|
"date": "2025-03-16T09:41:37Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Radarr/Radarr",
|
||||||
|
"version": "v5.21.1.9799",
|
||||||
|
"date": "2025-03-24T15:52:12Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "karakeep-app/karakeep",
|
||||||
|
"version": "extension/v1.2.4",
|
||||||
|
"date": "2025-04-06T11:56:18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TechnitiumSoftware/DnsServer",
|
||||||
|
"version": "v13.5.0",
|
||||||
|
"date": "2025-04-06T11:24:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TriliumNext/Notes",
|
||||||
|
"version": "v0.92.6",
|
||||||
|
"date": "2025-04-06T10:38:54Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kimai/kimai",
|
||||||
|
"version": "2.32.0",
|
||||||
|
"date": "2025-04-06T09:43:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inventree/InvenTree",
|
||||||
|
"version": "0.17.10",
|
||||||
|
"date": "2025-04-06T05:31:49Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.6.5",
|
||||||
|
"date": "2025-04-06T00:15:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jellyfin/jellyfin",
|
||||||
|
"version": "v10.10.7",
|
||||||
|
"date": "2025-04-05T19:14:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "azukaar/Cosmos-Server",
|
||||||
|
"version": "v0.18.4",
|
||||||
|
"date": "2025-04-05T19:12:57Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wger-project/wger",
|
||||||
|
"version": "2.3",
|
||||||
|
"date": "2025-04-05T18:05:36Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Paymenter/Paymenter",
|
||||||
|
"version": "v1.0.2",
|
||||||
|
"date": "2025-04-05T17:40:25Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bastienwirtz/homer",
|
||||||
|
"version": "v25.04.1",
|
||||||
|
"date": "2025-04-05T12:39:18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "navidrome/navidrome",
|
||||||
|
"version": "v0.55.2",
|
||||||
|
"date": "2025-04-05T12:07:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kozea/Radicale",
|
||||||
|
"version": "v3.5.1",
|
||||||
|
"date": "2025-04-05T06:20:18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "actualbudget/actual",
|
||||||
|
"version": "v25.4.0",
|
||||||
|
"date": "2025-04-05T04:14:57Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "home-assistant/core",
|
"name": "home-assistant/core",
|
||||||
"version": "2025.4.0",
|
"version": "2025.4.1",
|
||||||
"date": "2025-04-02T17:01:41Z"
|
"date": "2025-04-04T20:59:57Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Koenkk/zigbee2mqtt",
|
||||||
|
"version": "2.2.1",
|
||||||
|
"date": "2025-04-04T20:15:48Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "YunoHost/yunohost",
|
||||||
|
"version": "debian/12.0.13",
|
||||||
|
"date": "2025-04-04T20:05:45Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "homarr-labs/homarr",
|
||||||
|
"version": "v1.14.0",
|
||||||
|
"date": "2025-04-04T19:15:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Athou/commafeed",
|
||||||
|
"version": "5.7.0",
|
||||||
|
"date": "2025-04-04T18:10:16Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "icereed/paperless-gpt",
|
||||||
|
"version": "v0.14.4",
|
||||||
|
"date": "2025-04-04T14:18:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apache/tomcat",
|
||||||
|
"version": "9.0.104",
|
||||||
|
"date": "2025-04-04T12:58:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sabnzbd/sabnzbd",
|
||||||
|
"version": "4.5.0",
|
||||||
|
"date": "2025-03-30T16:17:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dgtlmoon/changedetection.io",
|
||||||
|
"version": "0.49.12",
|
||||||
|
"date": "2025-04-04T07:31:08Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "OctoPrint/OctoPrint",
|
||||||
|
"version": "1.10.3",
|
||||||
|
"date": "2024-11-05T09:20:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jupyter/notebook",
|
||||||
|
"version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
|
||||||
|
"date": "2025-04-03T06:49:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
|
"version": "v4.0.8",
|
||||||
|
"date": "2025-04-03T05:11:15Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HabitRPG/habitica",
|
||||||
|
"version": "v5.35.1",
|
||||||
|
"date": "2025-04-02T21:49:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v2.63.9",
|
||||||
|
"date": "2025-03-31T12:47:21Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "BookStackApp/BookStack",
|
"name": "BookStackApp/BookStack",
|
||||||
@@ -84,101 +404,26 @@
|
|||||||
"version": "2025.4.0",
|
"version": "2025.4.0",
|
||||||
"date": "2025-04-02T15:38:53Z"
|
"date": "2025-04-02T15:38:53Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jenkinsci/jenkins",
|
|
||||||
"version": "jenkins-2.503",
|
|
||||||
"date": "2025-04-02T15:12:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Checkmk/checkmk",
|
|
||||||
"version": "v2.4.0b3",
|
|
||||||
"date": "2025-04-02T14:39:56Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hargata/lubelog",
|
"name": "hargata/lubelog",
|
||||||
"version": "v1.4.6",
|
"version": "v1.4.6",
|
||||||
"date": "2025-04-02T14:07:12Z"
|
"date": "2025-04-02T14:07:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "wazuh/wazuh",
|
|
||||||
"version": "v4.11.2",
|
|
||||||
"date": "2025-04-02T13:40:18Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "zwave-js/zwave-js-ui",
|
|
||||||
"version": "v10.1.4",
|
|
||||||
"date": "2025-04-02T09:38:52Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "runtipi/runtipi",
|
|
||||||
"version": "v3.10.0",
|
|
||||||
"date": "2025-03-15T14:38:16Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "immich-app/immich",
|
"name": "immich-app/immich",
|
||||||
"version": "v1.131.3",
|
"version": "v1.131.3",
|
||||||
"date": "2025-04-01T22:48:22Z"
|
"date": "2025-04-01T22:48:22Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "icereed/paperless-gpt",
|
|
||||||
"version": "v0.14.3",
|
|
||||||
"date": "2025-04-01T19:53:18Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fallenbagel/jellyseerr",
|
|
||||||
"version": "preview-music-support",
|
|
||||||
"date": "2025-04-01T19:04:25Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Koenkk/zigbee2mqtt",
|
|
||||||
"version": "2.2.0",
|
|
||||||
"date": "2025-04-01T18:50:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "apache/tomcat",
|
|
||||||
"version": "9.0.103",
|
|
||||||
"date": "2025-04-01T18:39:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "MagicMirrorOrg/MagicMirror",
|
"name": "MagicMirrorOrg/MagicMirror",
|
||||||
"version": "v2.31.0",
|
"version": "v2.31.0",
|
||||||
"date": "2025-04-01T18:12:45Z"
|
"date": "2025-04-01T18:12:45Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "msgbyte/tianji",
|
|
||||||
"version": "v1.19.6",
|
|
||||||
"date": "2025-04-01T17:26:31Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "influxdata/influxdb",
|
|
||||||
"version": "v3.0.0-0.beta.3",
|
|
||||||
"date": "2025-04-01T15:34:30Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "element-hq/synapse",
|
|
||||||
"version": "v1.127.1",
|
|
||||||
"date": "2025-03-26T21:44:28Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Luligu/matterbridge",
|
|
||||||
"version": "2.2.6",
|
|
||||||
"date": "2025-04-01T14:01:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "theonedev/onedev",
|
"name": "theonedev/onedev",
|
||||||
"version": "v11.8.6",
|
"version": "v11.8.6",
|
||||||
"date": "2025-04-01T13:52:03Z"
|
"date": "2025-04-01T13:52:03Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "OctoPrint/OctoPrint",
|
|
||||||
"version": "1.10.3",
|
|
||||||
"date": "2024-11-05T09:20:50Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "semaphoreui/semaphore",
|
|
||||||
"version": "v2.13.7",
|
|
||||||
"date": "2025-04-01T09:41:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "neo4j/neo4j",
|
"name": "neo4j/neo4j",
|
||||||
"version": "5.26.5",
|
"version": "5.26.5",
|
||||||
@@ -189,11 +434,6 @@
|
|||||||
"version": "v4.0.2",
|
"version": "v4.0.2",
|
||||||
"date": "2025-04-01T04:51:05Z"
|
"date": "2025-04-01T04:51:05Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "open-webui/open-webui",
|
|
||||||
"version": "v0.6.0",
|
|
||||||
"date": "2025-04-01T01:47:32Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "outline/outline",
|
"name": "outline/outline",
|
||||||
"version": "v0.82.1-18",
|
"version": "v0.82.1-18",
|
||||||
@@ -209,11 +449,6 @@
|
|||||||
"version": "v2.2.0",
|
"version": "v2.2.0",
|
||||||
"date": "2025-03-31T21:31:48Z"
|
"date": "2025-03-31T21:31:48Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "NodeBB/NodeBB",
|
|
||||||
"version": "v4.2.0",
|
|
||||||
"date": "2025-03-19T18:34:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "traefik/traefik",
|
"name": "traefik/traefik",
|
||||||
"version": "v3.3.5",
|
"version": "v3.3.5",
|
||||||
@@ -224,11 +459,6 @@
|
|||||||
"version": "15.1",
|
"version": "15.1",
|
||||||
"date": "2025-03-31T13:42:20Z"
|
"date": "2025-03-31T13:42:20Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.84.3",
|
|
||||||
"date": "2025-03-27T11:54:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "documenso/documenso",
|
"name": "documenso/documenso",
|
||||||
"version": "v1.10.0-rc.4",
|
"version": "v1.10.0-rc.4",
|
||||||
@@ -239,16 +469,6 @@
|
|||||||
"version": "4.8.11.0",
|
"version": "4.8.11.0",
|
||||||
"date": "2025-03-10T06:39:11Z"
|
"date": "2025-03-10T06:39:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "TriliumNext/Notes",
|
|
||||||
"version": "v0.92.5",
|
|
||||||
"date": "2025-03-30T12:32:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "StarFleetCPTN/GoMFT",
|
|
||||||
"version": "v0.2.4",
|
|
||||||
"date": "2025-03-30T19:46:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "louislam/dockge",
|
"name": "louislam/dockge",
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
@@ -259,11 +479,6 @@
|
|||||||
"version": "v6.0.6",
|
"version": "v6.0.6",
|
||||||
"date": "2025-03-30T16:59:06Z"
|
"date": "2025-03-30T16:59:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "sabnzbd/sabnzbd",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"date": "2025-03-30T16:17:11Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Part-DB/Part-DB-server",
|
"name": "Part-DB/Part-DB-server",
|
||||||
"version": "v1.17.0",
|
"version": "v1.17.0",
|
||||||
@@ -279,11 +494,6 @@
|
|||||||
"version": "v0.26.6",
|
"version": "v0.26.6",
|
||||||
"date": "2025-03-30T08:02:19Z"
|
"date": "2025-03-30T08:02:19Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Prowlarr/Prowlarr",
|
|
||||||
"version": "v1.32.2.4987",
|
|
||||||
"date": "2025-03-16T09:41:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Readarr/Readarr",
|
"name": "Readarr/Readarr",
|
||||||
"version": "v2.0.0.4645",
|
"version": "v2.0.0.4645",
|
||||||
@@ -294,11 +504,6 @@
|
|||||||
"version": "v2.10.3.4602",
|
"version": "v2.10.3.4602",
|
||||||
"date": "2025-03-23T11:00:37Z"
|
"date": "2025-03-23T11:00:37Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Radarr/Radarr",
|
|
||||||
"version": "v5.21.1.9799",
|
|
||||||
"date": "2025-03-24T15:52:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "aceberg/WatchYourLAN",
|
"name": "aceberg/WatchYourLAN",
|
||||||
"version": "2.1.2-alpine",
|
"version": "2.1.2-alpine",
|
||||||
@@ -329,16 +534,6 @@
|
|||||||
"version": "v1.6.1",
|
"version": "v1.6.1",
|
||||||
"date": "2025-03-15T17:29:17Z"
|
"date": "2025-03-15T17:29:17Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "OliveTin/OliveTin",
|
|
||||||
"version": "2025.3.28",
|
|
||||||
"date": "2025-03-29T00:18:56Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "homarr-labs/homarr",
|
|
||||||
"version": "v1.13.1",
|
|
||||||
"date": "2025-03-28T21:58:30Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TasmoAdmin/TasmoAdmin",
|
"name": "TasmoAdmin/TasmoAdmin",
|
||||||
"version": "v4.2.3",
|
"version": "v4.2.3",
|
||||||
@@ -354,11 +549,6 @@
|
|||||||
"version": "v4.5.0",
|
"version": "v4.5.0",
|
||||||
"date": "2025-03-28T19:02:22Z"
|
"date": "2025-03-28T19:02:22Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Brandawg93/PeaNUT",
|
|
||||||
"version": "v5.6.1",
|
|
||||||
"date": "2025-03-28T18:40:22Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "louislam/uptime-kuma",
|
"name": "louislam/uptime-kuma",
|
||||||
"version": "2.0.0-beta.2-temp",
|
"version": "2.0.0-beta.2-temp",
|
||||||
@@ -369,11 +559,6 @@
|
|||||||
"version": "e5.9.0-beta.2",
|
"version": "e5.9.0-beta.2",
|
||||||
"date": "2025-03-28T15:06:27Z"
|
"date": "2025-03-28T15:06:27Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "goauthentik/authentik",
|
|
||||||
"version": "version/2025.2.3",
|
|
||||||
"date": "2025-03-28T14:28:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hakimel/reveal.js",
|
"name": "hakimel/reveal.js",
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
@@ -384,11 +569,6 @@
|
|||||||
"version": "336.2",
|
"version": "336.2",
|
||||||
"date": "2025-03-28T10:16:47Z"
|
"date": "2025-03-28T10:16:47Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "YunoHost/yunohost",
|
|
||||||
"version": "debian/12.0.12",
|
|
||||||
"date": "2025-03-16T11:59:24Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "gethomepage/homepage",
|
"name": "gethomepage/homepage",
|
||||||
"version": "v1.1.1",
|
"version": "v1.1.1",
|
||||||
@@ -409,46 +589,21 @@
|
|||||||
"version": "2025.2",
|
"version": "2025.2",
|
||||||
"date": "2025-03-27T19:21:13Z"
|
"date": "2025-03-27T19:21:13Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "TandoorRecipes/recipes",
|
|
||||||
"version": "1.5.34",
|
|
||||||
"date": "2025-03-27T16:17:38Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tailscale/tailscale",
|
"name": "tailscale/tailscale",
|
||||||
"version": "v1.82.0",
|
"version": "v1.82.0",
|
||||||
"date": "2025-03-27T13:08:18Z"
|
"date": "2025-03-27T13:08:18Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.2.5",
|
|
||||||
"date": "2025-03-27T11:06:48Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "evcc-io/evcc",
|
"name": "evcc-io/evcc",
|
||||||
"version": "0.202.1",
|
"version": "0.202.1",
|
||||||
"date": "2025-03-27T08:24:55Z"
|
"date": "2025-03-27T08:24:55Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.1",
|
|
||||||
"date": "2025-01-01T16:15:52Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "openobserve/openobserve",
|
|
||||||
"version": "v0.14.5-rc6",
|
|
||||||
"date": "2025-03-27T05:15:49Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "duplicati/duplicati",
|
"name": "duplicati/duplicati",
|
||||||
"version": "v2.1.0.112-2.1.0.112_canary_2025-03-26",
|
"version": "v2.1.0.112-2.1.0.112_canary_2025-03-26",
|
||||||
"date": "2025-03-26T21:04:38Z"
|
"date": "2025-03-26T21:04:38Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "prometheus/prometheus",
|
|
||||||
"version": "v0.303.0-rc.0",
|
|
||||||
"date": "2025-03-26T12:48:46Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "forgejo/forgejo",
|
"name": "forgejo/forgejo",
|
||||||
"version": "v12.0.0-dev",
|
"version": "v12.0.0-dev",
|
||||||
@@ -489,11 +644,6 @@
|
|||||||
"version": "v1.6.8",
|
"version": "v1.6.8",
|
||||||
"date": "2025-03-25T13:33:10Z"
|
"date": "2025-03-25T13:33:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
|
||||||
"version": "pmm-6401-v1.114.0",
|
|
||||||
"date": "2025-03-25T07:58:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "caddyserver/caddy",
|
"name": "caddyserver/caddy",
|
||||||
"version": "v2.9.1",
|
"version": "v2.9.1",
|
||||||
@@ -504,26 +654,11 @@
|
|||||||
"version": "2025-03-24-r2",
|
"version": "2025-03-24-r2",
|
||||||
"date": "2025-03-24T20:52:35Z"
|
"date": "2025-03-24T20:52:35Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "go-gitea/gitea",
|
|
||||||
"version": "v1.23.6",
|
|
||||||
"date": "2025-03-24T20:38:45Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "docmost/docmost",
|
"name": "docmost/docmost",
|
||||||
"version": "v0.9.0",
|
"version": "v0.9.0",
|
||||||
"date": "2025-03-24T18:25:37Z"
|
"date": "2025-03-24T18:25:37Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "wavelog/wavelog",
|
|
||||||
"version": "2.0.2",
|
|
||||||
"date": "2025-03-24T12:02:08Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "nzbgetcom/nzbget",
|
|
||||||
"version": "v24.8",
|
|
||||||
"date": "2025-03-18T07:33:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "requarks/wiki",
|
"name": "requarks/wiki",
|
||||||
"version": "v2.5.307",
|
"version": "v2.5.307",
|
||||||
@@ -544,11 +679,6 @@
|
|||||||
"version": "v0.24.2",
|
"version": "v0.24.2",
|
||||||
"date": "2025-03-23T04:01:50Z"
|
"date": "2025-03-23T04:01:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "hoarder-app/hoarder",
|
|
||||||
"version": "sdk/v0.23.0",
|
|
||||||
"date": "2025-03-22T17:26:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "netbox-community/netbox",
|
"name": "netbox-community/netbox",
|
||||||
"version": "v4.2.6",
|
"version": "v4.2.6",
|
||||||
@@ -569,21 +699,11 @@
|
|||||||
"version": "250321-57590c48b",
|
"version": "250321-57590c48b",
|
||||||
"date": "2025-03-21T11:48:16Z"
|
"date": "2025-03-21T11:48:16Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "AdguardTeam/AdGuardHome",
|
|
||||||
"version": "v0.107.59",
|
|
||||||
"date": "2025-03-21T11:11:39Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jhuckaby/Cronicle",
|
"name": "jhuckaby/Cronicle",
|
||||||
"version": "v0.9.77",
|
"version": "v0.9.77",
|
||||||
"date": "2025-03-21T02:25:42Z"
|
"date": "2025-03-21T02:25:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "stonith404/pingvin-share",
|
|
||||||
"version": "v1.10.4",
|
|
||||||
"date": "2025-03-20T18:56:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "seanmorley15/AdventureLog",
|
"name": "seanmorley15/AdventureLog",
|
||||||
"version": "v0.9.0",
|
"version": "v0.9.0",
|
||||||
@@ -609,11 +729,6 @@
|
|||||||
"version": "v2.20.0",
|
"version": "v2.20.0",
|
||||||
"date": "2025-03-17T22:44:56Z"
|
"date": "2025-03-17T22:44:56Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "bastienwirtz/homer",
|
|
||||||
"version": "v25.03.3",
|
|
||||||
"date": "2025-03-17T20:55:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Kareadita/Kavita",
|
"name": "Kareadita/Kavita",
|
||||||
"version": "v0.8.5.11",
|
"version": "v0.8.5.11",
|
||||||
@@ -624,11 +739,6 @@
|
|||||||
"version": "v4.0.14.2939",
|
"version": "v4.0.14.2939",
|
||||||
"date": "2025-03-17T19:12:37Z"
|
"date": "2025-03-17T19:12:37Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "inventree/InvenTree",
|
|
||||||
"version": "0.17.9",
|
|
||||||
"date": "2025-03-17T12:13:23Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "webmin/webmin",
|
"name": "webmin/webmin",
|
||||||
"version": "2.303",
|
"version": "2.303",
|
||||||
@@ -639,46 +749,11 @@
|
|||||||
"version": "v1.60.0",
|
"version": "v1.60.0",
|
||||||
"date": "2025-03-16T18:39:49Z"
|
"date": "2025-03-16T18:39:49Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Kozea/Radicale",
|
|
||||||
"version": "v3.5.0",
|
|
||||||
"date": "2025-03-16T06:05:55Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pelican-dev/wings",
|
|
||||||
"version": "v1.0.0-beta10",
|
|
||||||
"date": "2025-03-15T20:24:34Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pelican-dev/panel",
|
|
||||||
"version": "v1.0.0-beta18",
|
|
||||||
"date": "2025-03-15T20:24:04Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "henrygd/beszel",
|
"name": "henrygd/beszel",
|
||||||
"version": "v0.10.2",
|
"version": "v0.10.2",
|
||||||
"date": "2025-03-15T07:14:54Z"
|
"date": "2025-03-15T07:14:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "navidrome/navidrome",
|
|
||||||
"version": "v0.55.1",
|
|
||||||
"date": "2025-03-15T05:36:06Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.98.2",
|
|
||||||
"date": "2025-03-15T02:11:28Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Threadfin/Threadfin",
|
|
||||||
"version": "1.2.31",
|
|
||||||
"date": "2025-03-14T22:04:10Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "paperless-ngx/paperless-ngx",
|
|
||||||
"version": "v2.15.0-beta",
|
|
||||||
"date": "2025-03-14T18:05:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "FlowiseAI/Flowise",
|
"name": "FlowiseAI/Flowise",
|
||||||
"version": "flowise@2.2.7-patch.1",
|
"version": "flowise@2.2.7-patch.1",
|
||||||
@@ -694,16 +769,6 @@
|
|||||||
"version": "1.26.1",
|
"version": "1.26.1",
|
||||||
"date": "2025-03-13T21:34:25Z"
|
"date": "2025-03-13T21:34:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "kimai/kimai",
|
|
||||||
"version": "2.31.0",
|
|
||||||
"date": "2025-03-13T17:13:47Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "minio/minio",
|
|
||||||
"version": "RELEASE.2025-03-12T18-04-18Z",
|
|
||||||
"date": "2025-03-12T18:45:21Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "transmission/transmission",
|
"name": "transmission/transmission",
|
||||||
"version": "4.0.1-beta.1",
|
"version": "4.0.1-beta.1",
|
||||||
@@ -734,11 +799,6 @@
|
|||||||
"version": "v0.8.2",
|
"version": "v0.8.2",
|
||||||
"date": "2025-03-11T05:20:22Z"
|
"date": "2025-03-11T05:20:22Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "stackblitz-labs/bolt.diy",
|
|
||||||
"version": "v0.0.7-hf1",
|
|
||||||
"date": "2025-03-10T20:49:39Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "AlexxIT/go2rtc",
|
"name": "AlexxIT/go2rtc",
|
||||||
"version": "v1.9.9",
|
"version": "v1.9.9",
|
||||||
@@ -774,11 +834,6 @@
|
|||||||
"version": "v2.0.21",
|
"version": "v2.0.21",
|
||||||
"date": "2025-03-06T16:24:56Z"
|
"date": "2025-03-06T16:24:56Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Dolibarr/dolibarr",
|
|
||||||
"version": "21.0.0",
|
|
||||||
"date": "2025-03-06T16:20:45Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "matze/wastebin",
|
"name": "matze/wastebin",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
@@ -799,11 +854,6 @@
|
|||||||
"version": "v0.18.0",
|
"version": "v0.18.0",
|
||||||
"date": "2025-03-04T15:35:27Z"
|
"date": "2025-03-04T15:35:27Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "actualbudget/actual",
|
|
||||||
"version": "v25.3.1",
|
|
||||||
"date": "2025-03-03T02:05:36Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "heiher/hev-socks5-server",
|
"name": "heiher/hev-socks5-server",
|
||||||
"version": "2.8.0",
|
"version": "2.8.0",
|
||||||
@@ -854,21 +904,6 @@
|
|||||||
"version": "v1.1.05",
|
"version": "v1.1.05",
|
||||||
"date": "2025-02-24T11:53:12Z"
|
"date": "2025-02-24T11:53:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Athou/commafeed",
|
|
||||||
"version": "5.6.1",
|
|
||||||
"date": "2025-02-23T20:39:48Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "TechnitiumSoftware/DnsServer",
|
|
||||||
"version": "v13.4.3",
|
|
||||||
"date": "2025-02-23T11:08:26Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "azukaar/Cosmos-Server",
|
|
||||||
"version": "v0.18.3",
|
|
||||||
"date": "2025-02-21T20:51:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "prometheus-pve/prometheus-pve-exporter",
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
"version": "v3.5.2",
|
"version": "v3.5.2",
|
||||||
@@ -889,11 +924,6 @@
|
|||||||
"version": "REL_13_20",
|
"version": "REL_13_20",
|
||||||
"date": "2025-02-17T21:17:13Z"
|
"date": "2025-02-17T21:17:13Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jellyfin/jellyfin",
|
|
||||||
"version": "v10.10.6",
|
|
||||||
"date": "2025-02-16T21:55:45Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "sbondCo/Watcharr",
|
"name": "sbondCo/Watcharr",
|
||||||
"version": "v2.0.2",
|
"version": "v2.0.2",
|
||||||
@@ -959,11 +989,6 @@
|
|||||||
"version": "v1.11.3",
|
"version": "v1.11.3",
|
||||||
"date": "2025-02-07T19:29:19Z"
|
"date": "2025-02-07T19:29:19Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "apache/cassandra",
|
|
||||||
"version": "cassandra-4.0.17",
|
|
||||||
"date": "2025-02-07T10:38:54Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "apache/tika",
|
"name": "apache/tika",
|
||||||
"version": "2.9.3",
|
"version": "2.9.3",
|
||||||
@@ -984,11 +1009,6 @@
|
|||||||
"version": "r8.0.5-rc1",
|
"version": "r8.0.5-rc1",
|
||||||
"date": "2025-02-04T20:35:23Z"
|
"date": "2025-02-04T20:35:23Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "thomiceli/opengist",
|
|
||||||
"version": "v1.9.1",
|
|
||||||
"date": "2025-02-04T20:24:29Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Forceu/Gokapi",
|
"name": "Forceu/Gokapi",
|
||||||
"version": "v1.9.6",
|
"version": "v1.9.6",
|
||||||
@@ -1034,11 +1054,6 @@
|
|||||||
"version": "0.17.1",
|
"version": "0.17.1",
|
||||||
"date": "2025-01-15T19:13:33Z"
|
"date": "2025-01-15T19:13:33Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "linkwarden/linkwarden",
|
|
||||||
"version": "v2.9.3",
|
|
||||||
"date": "2025-01-13T16:19:53Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Tautulli/Tautulli",
|
"name": "Tautulli/Tautulli",
|
||||||
"version": "v2.15.1",
|
"version": "v2.15.1",
|
||||||
@@ -1139,11 +1154,6 @@
|
|||||||
"version": "v2024.10.22-7ca5933",
|
"version": "v2024.10.22-7ca5933",
|
||||||
"date": "2024-10-22T09:58:03Z"
|
"date": "2024-10-22T09:58:03Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "NLnetLabs/unbound",
|
|
||||||
"version": "release-1.22.0",
|
|
||||||
"date": "2024-10-17T08:43:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Notifiarr/notifiarr",
|
"name": "Notifiarr/notifiarr",
|
||||||
"version": "v0.8.3",
|
"version": "v0.8.3",
|
||||||
@@ -1164,11 +1174,6 @@
|
|||||||
"version": "v0.8.13",
|
"version": "v0.8.13",
|
||||||
"date": "2024-07-29T12:54:27Z"
|
"date": "2024-07-29T12:54:27Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Paymenter/Paymenter",
|
|
||||||
"version": "v0.9.5",
|
|
||||||
"date": "2024-07-20T08:46:42Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hywax/mafl",
|
"name": "hywax/mafl",
|
||||||
"version": "v0.15.4",
|
"version": "v0.15.4",
|
||||||
@@ -1234,11 +1239,6 @@
|
|||||||
"version": "2.0.16",
|
"version": "2.0.16",
|
||||||
"date": "2024-01-18T16:11:07Z"
|
"date": "2024-01-18T16:11:07Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "wger-project/wger",
|
|
||||||
"version": "2.2",
|
|
||||||
"date": "2023-12-06T12:08:09Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "deepch/RTSPtoWeb",
|
"name": "deepch/RTSPtoWeb",
|
||||||
"version": "v2.4.3",
|
"version": "v2.4.3",
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Webmin System Administration",
|
"name": "Webmin System Administration",
|
||||||
"slug": "webmin",
|
"slug": "webmin",
|
||||||
"categories": [
|
"categories": [1],
|
||||||
1
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 10000,
|
"interface_port": 10000,
|
||||||
@@ -16,7 +14,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "misc/webmin.sh",
|
"script": "tools/addon/webmin.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": null,
|
"cpu": null,
|
||||||
"ram": null,
|
"ram": null,
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import React, { useEffect, useState } from "react";
|
|
||||||
import { useRouter } from "next/navigation";
|
|
||||||
import { Card, CardContent } from "@/components/ui/card";
|
|
||||||
import { Button } from "@/components/ui/button";
|
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { ChevronLeft, ChevronRight } from "lucide-react";
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import { Category } from "@/lib/types";
|
import { Category } from "@/lib/types";
|
||||||
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
|
||||||
const defaultLogo = "/default-logo.png"; // Fallback logo path
|
const defaultLogo = "/default-logo.png"; // Fallback logo path
|
||||||
const MAX_DESCRIPTION_LENGTH = 100; // Set max length for description
|
const MAX_DESCRIPTION_LENGTH = 100; // Set max length for description
|
||||||
@@ -17,11 +17,11 @@ const formattedBadge = (type: string) => {
|
|||||||
case "vm":
|
case "vm":
|
||||||
return <Badge className="text-blue-500/75 border-blue-500/75 badge">VM</Badge>;
|
return <Badge className="text-blue-500/75 border-blue-500/75 badge">VM</Badge>;
|
||||||
case "ct":
|
case "ct":
|
||||||
return (
|
return <Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>;
|
||||||
<Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>
|
case "pve":
|
||||||
);
|
return <Badge className="text-orange-500/75 border-orange-500/75 badge">PVE</Badge>;
|
||||||
case "misc":
|
case "addon":
|
||||||
return <Badge className="text-green-500/75 border-green-500/75 badge">MISC</Badge>;
|
return <Badge className="text-green-500/75 border-green-500/75 badge">ADDON</Badge>;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
@@ -100,9 +100,7 @@ const CategoryView = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const truncateDescription = (text: string) => {
|
const truncateDescription = (text: string) => {
|
||||||
return text.length > MAX_DESCRIPTION_LENGTH
|
return text.length > MAX_DESCRIPTION_LENGTH ? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...` : text;
|
||||||
? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...`
|
|
||||||
: text;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderResources = (script: any) => {
|
const renderResources = (script: any) => {
|
||||||
@@ -111,9 +109,24 @@ const CategoryView = () => {
|
|||||||
const hdd = script.install_methods[0]?.resources.hdd;
|
const hdd = script.install_methods[0]?.resources.hdd;
|
||||||
|
|
||||||
const resourceParts = [];
|
const resourceParts = [];
|
||||||
if (cpu) resourceParts.push(<span key="cpu"><b>CPU:</b> {cpu}vCPU</span>);
|
if (cpu)
|
||||||
if (ram) resourceParts.push(<span key="ram"><b>RAM:</b> {ram}MB</span>);
|
resourceParts.push(
|
||||||
if (hdd) resourceParts.push(<span key="hdd"><b>HDD:</b> {hdd}GB</span>);
|
<span key="cpu">
|
||||||
|
<b>CPU:</b> {cpu}vCPU
|
||||||
|
</span>,
|
||||||
|
);
|
||||||
|
if (ram)
|
||||||
|
resourceParts.push(
|
||||||
|
<span key="ram">
|
||||||
|
<b>RAM:</b> {ram}MB
|
||||||
|
</span>,
|
||||||
|
);
|
||||||
|
if (hdd)
|
||||||
|
resourceParts.push(
|
||||||
|
<span key="hdd">
|
||||||
|
<b>HDD:</b> {hdd}GB
|
||||||
|
</span>,
|
||||||
|
);
|
||||||
|
|
||||||
return resourceParts.length > 0 ? (
|
return resourceParts.length > 0 ? (
|
||||||
<div className="text-sm text-gray-400">
|
<div className="text-sm text-gray-400">
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import {
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
|
||||||
Select,
|
|
||||||
SelectContent,
|
|
||||||
SelectItem,
|
|
||||||
SelectTrigger,
|
|
||||||
SelectValue,
|
|
||||||
} from "@/components/ui/select";
|
|
||||||
import { OperatingSystems } from "@/config/siteConfig";
|
import { OperatingSystems } from "@/config/siteConfig";
|
||||||
import { PlusCircle, Trash2 } from "lucide-react";
|
import { PlusCircle, Trash2 } from "lucide-react";
|
||||||
import { memo, useCallback, useRef } from "react";
|
import { memo, useCallback, useRef } from "react";
|
||||||
@@ -20,21 +14,29 @@ type InstallMethodProps = {
|
|||||||
setZodErrors: (zodErrors: z.ZodError | null) => void;
|
setZodErrors: (zodErrors: z.ZodError | null) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
function InstallMethod({
|
function InstallMethod({ script, setScript, setIsValid, setZodErrors }: InstallMethodProps) {
|
||||||
script,
|
|
||||||
setScript,
|
|
||||||
setIsValid,
|
|
||||||
setZodErrors,
|
|
||||||
}: InstallMethodProps) {
|
|
||||||
const cpuRefs = useRef<(HTMLInputElement | null)[]>([]);
|
const cpuRefs = useRef<(HTMLInputElement | null)[]>([]);
|
||||||
const ramRefs = useRef<(HTMLInputElement | null)[]>([]);
|
const ramRefs = useRef<(HTMLInputElement | null)[]>([]);
|
||||||
const hddRefs = useRef<(HTMLInputElement | null)[]>([]);
|
const hddRefs = useRef<(HTMLInputElement | null)[]>([]);
|
||||||
|
|
||||||
const addInstallMethod = useCallback(() => {
|
const addInstallMethod = useCallback(() => {
|
||||||
setScript((prev) => {
|
setScript((prev) => {
|
||||||
|
const { type, slug } = prev;
|
||||||
|
const newMethodType = "default";
|
||||||
|
|
||||||
|
let scriptPath = "";
|
||||||
|
|
||||||
|
if (type === "pve") {
|
||||||
|
scriptPath = `tools/pve/${slug}.sh`;
|
||||||
|
} else if (type === "addon") {
|
||||||
|
scriptPath = `tools/addon/${slug}.sh`;
|
||||||
|
} else {
|
||||||
|
scriptPath = `${type}/${slug}.sh`;
|
||||||
|
}
|
||||||
|
|
||||||
const method = InstallMethodSchema.parse({
|
const method = InstallMethodSchema.parse({
|
||||||
type: "default",
|
type: newMethodType,
|
||||||
script: `${prev.type}/${prev.slug}.sh`,
|
script: scriptPath,
|
||||||
resources: {
|
resources: {
|
||||||
cpu: null,
|
cpu: null,
|
||||||
ram: null,
|
ram: null,
|
||||||
@@ -43,6 +45,7 @@ function InstallMethod({
|
|||||||
version: null,
|
version: null,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...prev,
|
...prev,
|
||||||
install_methods: [...prev.install_methods, method],
|
install_methods: [...prev.install_methods, method],
|
||||||
@@ -63,9 +66,7 @@ function InstallMethod({
|
|||||||
|
|
||||||
if (key === "type") {
|
if (key === "type") {
|
||||||
updatedMethod.script =
|
updatedMethod.script =
|
||||||
value === "alpine"
|
value === "alpine" ? `${prev.type}/alpine-${prev.slug}.sh` : `${prev.type}/${prev.slug}.sh`;
|
||||||
? `${prev.type}/alpine-${prev.slug}.sh`
|
|
||||||
: `${prev.type}/${prev.slug}.sh`;
|
|
||||||
|
|
||||||
// Set OS to Alpine and reset version if type is alpine
|
// Set OS to Alpine and reset version if type is alpine
|
||||||
if (value === "alpine") {
|
if (value === "alpine") {
|
||||||
@@ -112,10 +113,7 @@ function InstallMethod({
|
|||||||
<h3 className="text-xl font-semibold">Install Methods</h3>
|
<h3 className="text-xl font-semibold">Install Methods</h3>
|
||||||
{script.install_methods.map((method, index) => (
|
{script.install_methods.map((method, index) => (
|
||||||
<div key={index} className="space-y-2 border p-4 rounded">
|
<div key={index} className="space-y-2 border p-4 rounded">
|
||||||
<Select
|
<Select value={method.type} onValueChange={(value) => updateInstallMethod(index, "type", value)}>
|
||||||
value={method.type}
|
|
||||||
onValueChange={(value) => updateInstallMethod(index, "type", value)}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="Type" />
|
<SelectValue placeholder="Type" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
@@ -205,9 +203,7 @@ function InstallMethod({
|
|||||||
<SelectValue placeholder="Version" />
|
<SelectValue placeholder="Version" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{OperatingSystems.find(
|
{OperatingSystems.find((os) => os.name === method.resources.os)?.versions.map((version) => (
|
||||||
(os) => os.name === method.resources.os,
|
|
||||||
)?.versions.map((version) => (
|
|
||||||
<SelectItem key={version.slug} value={version.name}>
|
<SelectItem key={version.slug} value={version.name}>
|
||||||
{version.name}
|
{version.name}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
@@ -215,22 +211,12 @@ function InstallMethod({
|
|||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button variant="destructive" size="sm" type="button" onClick={() => removeInstallMethod(index)}>
|
||||||
variant="destructive"
|
|
||||||
size="sm"
|
|
||||||
type="button"
|
|
||||||
onClick={() => removeInstallMethod(index)}
|
|
||||||
>
|
|
||||||
<Trash2 className="mr-2 h-4 w-4" /> Remove Install Method
|
<Trash2 className="mr-2 h-4 w-4" /> Remove Install Method
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
<Button
|
<Button type="button" size="sm" disabled={script.install_methods.length >= 2} onClick={addInstallMethod}>
|
||||||
type="button"
|
|
||||||
size="sm"
|
|
||||||
disabled={script.install_methods.length >= 2}
|
|
||||||
onClick={addInstallMethod}
|
|
||||||
>
|
|
||||||
<PlusCircle className="mr-2 h-4 w-4" /> Add Install Method
|
<PlusCircle className="mr-2 h-4 w-4" /> Add Install Method
|
||||||
</Button>
|
</Button>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ export const ScriptSchema = z.object({
|
|||||||
slug: z.string().min(1, "Slug is required"),
|
slug: z.string().min(1, "Slug is required"),
|
||||||
categories: z.array(z.number()),
|
categories: z.array(z.number()),
|
||||||
date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"),
|
date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"),
|
||||||
type: z.enum(["vm", "ct", "misc", "turnkey"], {
|
type: z.enum(["vm", "ct", "pve", "addon", "turnkey"], {
|
||||||
errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'misc' or 'turnkey'" })
|
errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'pve', 'addon' or 'turnkey'" })
|
||||||
}),
|
}),
|
||||||
updateable: z.boolean(),
|
updateable: z.boolean(),
|
||||||
privileged: z.boolean(),
|
privileged: z.boolean(),
|
||||||
|
|||||||
@@ -5,18 +5,8 @@ import { Button } from "@/components/ui/button";
|
|||||||
import { Calendar } from "@/components/ui/calendar";
|
import { Calendar } from "@/components/ui/calendar";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import {
|
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
||||||
Popover,
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
|
||||||
PopoverContent,
|
|
||||||
PopoverTrigger,
|
|
||||||
} from "@/components/ui/popover";
|
|
||||||
import {
|
|
||||||
Select,
|
|
||||||
SelectContent,
|
|
||||||
SelectItem,
|
|
||||||
SelectTrigger,
|
|
||||||
SelectValue,
|
|
||||||
} from "@/components/ui/select";
|
|
||||||
import { Switch } from "@/components/ui/switch";
|
import { Switch } from "@/components/ui/switch";
|
||||||
import { Textarea } from "@/components/ui/textarea";
|
import { Textarea } from "@/components/ui/textarea";
|
||||||
import { fetchCategories } from "@/lib/data";
|
import { fetchCategories } from "@/lib/data";
|
||||||
@@ -66,19 +56,29 @@ export default function JSONGenerator() {
|
|||||||
.catch((error) => console.error("Error fetching categories:", error));
|
.catch((error) => console.error("Error fetching categories:", error));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const updateScript = useCallback(
|
const updateScript = useCallback((key: keyof Script, value: Script[keyof Script]) => {
|
||||||
(key: keyof Script, value: Script[keyof Script]) => {
|
|
||||||
setScript((prev) => {
|
setScript((prev) => {
|
||||||
const updated = { ...prev, [key]: value };
|
const updated = { ...prev, [key]: value };
|
||||||
|
|
||||||
if (key === "type" || key === "slug") {
|
if (updated.slug && updated.type) {
|
||||||
updated.install_methods = updated.install_methods.map((method) => ({
|
updated.install_methods = updated.install_methods.map((method) => {
|
||||||
|
let scriptPath = "";
|
||||||
|
|
||||||
|
if (updated.type === "pve") {
|
||||||
|
scriptPath = `tools/pve/${updated.slug}.sh`;
|
||||||
|
} else if (updated.type === "addon") {
|
||||||
|
scriptPath = `tools/addon/${updated.slug}.sh`;
|
||||||
|
} else if (method.type === "alpine") {
|
||||||
|
scriptPath = `${updated.type}/alpine-${updated.slug}.sh`;
|
||||||
|
} else {
|
||||||
|
scriptPath = `${updated.type}/${updated.slug}.sh`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
...method,
|
...method,
|
||||||
script:
|
script: scriptPath,
|
||||||
method.type === "alpine"
|
};
|
||||||
? `${updated.type}/alpine-${updated.slug}.sh`
|
});
|
||||||
: `${updated.type}/${updated.slug}.sh`,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = ScriptSchema.safeParse(updated);
|
const result = ScriptSchema.safeParse(updated);
|
||||||
@@ -86,9 +86,7 @@ export default function JSONGenerator() {
|
|||||||
setZodErrors(result.success ? null : result.error);
|
setZodErrors(result.success ? null : result.error);
|
||||||
return updated;
|
return updated;
|
||||||
});
|
});
|
||||||
},
|
}, []);
|
||||||
[],
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleCopy = useCallback(() => {
|
const handleCopy = useCallback(() => {
|
||||||
navigator.clipboard.writeText(JSON.stringify(script, null, 2));
|
navigator.clipboard.writeText(JSON.stringify(script, null, 2));
|
||||||
@@ -120,16 +118,13 @@ export default function JSONGenerator() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const formattedDate = useMemo(
|
const formattedDate = useMemo(
|
||||||
() =>
|
() => (script.date_created ? format(script.date_created, "PPP") : undefined),
|
||||||
script.date_created ? format(script.date_created, "PPP") : undefined,
|
|
||||||
[script.date_created],
|
[script.date_created],
|
||||||
);
|
);
|
||||||
|
|
||||||
const validationAlert = useMemo(
|
const validationAlert = useMemo(
|
||||||
() => (
|
() => (
|
||||||
<Alert
|
<Alert className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}>
|
||||||
className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}
|
|
||||||
>
|
|
||||||
<AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
|
<AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
|
||||||
<AlertDescription>
|
<AlertDescription>
|
||||||
{isValid
|
{isValid
|
||||||
@@ -160,21 +155,13 @@ export default function JSONGenerator() {
|
|||||||
<Label>
|
<Label>
|
||||||
Name <span className="text-red-500">*</span>
|
Name <span className="text-red-500">*</span>
|
||||||
</Label>
|
</Label>
|
||||||
<Input
|
<Input placeholder="Example" value={script.name} onChange={(e) => updateScript("name", e.target.value)} />
|
||||||
placeholder="Example"
|
|
||||||
value={script.name}
|
|
||||||
onChange={(e) => updateScript("name", e.target.value)}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Label>
|
<Label>
|
||||||
Slug <span className="text-red-500">*</span>
|
Slug <span className="text-red-500">*</span>
|
||||||
</Label>
|
</Label>
|
||||||
<Input
|
<Input placeholder="example" value={script.slug} onChange={(e) => updateScript("slug", e.target.value)} />
|
||||||
placeholder="example"
|
|
||||||
value={script.slug}
|
|
||||||
onChange={(e) => updateScript("slug", e.target.value)}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@@ -197,11 +184,7 @@ export default function JSONGenerator() {
|
|||||||
onChange={(e) => updateScript("description", e.target.value)}
|
onChange={(e) => updateScript("description", e.target.value)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Categories
|
<Categories script={script} setScript={setScript} categories={categories} />
|
||||||
script={script}
|
|
||||||
setScript={setScript}
|
|
||||||
categories={categories}
|
|
||||||
/>
|
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
<div className="flex flex-col gap-2 w-full">
|
<div className="flex flex-col gap-2 w-full">
|
||||||
<Label>Date Created</Label>
|
<Label>Date Created</Label>
|
||||||
@@ -209,10 +192,7 @@ export default function JSONGenerator() {
|
|||||||
<PopoverTrigger asChild className="flex-1">
|
<PopoverTrigger asChild className="flex-1">
|
||||||
<Button
|
<Button
|
||||||
variant={"outline"}
|
variant={"outline"}
|
||||||
className={cn(
|
className={cn("pl-3 text-left font-normal w-full", !script.date_created && "text-muted-foreground")}
|
||||||
"pl-3 text-left font-normal w-full",
|
|
||||||
!script.date_created && "text-muted-foreground",
|
|
||||||
)}
|
|
||||||
>
|
>
|
||||||
{formattedDate || <span>Pick a date</span>}
|
{formattedDate || <span>Pick a date</span>}
|
||||||
<CalendarIcon className="ml-auto h-4 w-4 opacity-50" />
|
<CalendarIcon className="ml-auto h-4 w-4 opacity-50" />
|
||||||
@@ -230,38 +210,26 @@ export default function JSONGenerator() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-2 w-full">
|
<div className="flex flex-col gap-2 w-full">
|
||||||
<Label>Type</Label>
|
<Label>Type</Label>
|
||||||
<Select
|
<Select value={script.type} onValueChange={(value) => updateScript("type", value)}>
|
||||||
value={script.type}
|
|
||||||
onValueChange={(value) => updateScript("type", value)}
|
|
||||||
>
|
|
||||||
<SelectTrigger className="flex-1">
|
<SelectTrigger className="flex-1">
|
||||||
<SelectValue placeholder="Type" />
|
<SelectValue placeholder="Type" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="ct">LXC Container</SelectItem>
|
<SelectItem value="ct">LXC Container</SelectItem>
|
||||||
<SelectItem value="vm">Virtual Machine</SelectItem>
|
<SelectItem value="vm">Virtual Machine</SelectItem>
|
||||||
<SelectItem value="misc">Miscellaneous</SelectItem>
|
<SelectItem value="pve">PVE-Tool</SelectItem>
|
||||||
|
<SelectItem value="addon">Add-On</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-full flex gap-5">
|
<div className="w-full flex gap-5">
|
||||||
<div className="flex items-center space-x-2">
|
<div className="flex items-center space-x-2">
|
||||||
<Switch
|
<Switch checked={script.updateable} onCheckedChange={(checked) => updateScript("updateable", checked)} />
|
||||||
checked={script.updateable}
|
|
||||||
onCheckedChange={(checked) =>
|
|
||||||
updateScript("updateable", checked)
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<label>Updateable</label>
|
<label>Updateable</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center space-x-2">
|
<div className="flex items-center space-x-2">
|
||||||
<Switch
|
<Switch checked={script.privileged} onCheckedChange={(checked) => updateScript("privileged", checked)} />
|
||||||
checked={script.privileged}
|
|
||||||
onCheckedChange={(checked) =>
|
|
||||||
updateScript("privileged", checked)
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<label>Privileged</label>
|
<label>Privileged</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -269,12 +237,7 @@ export default function JSONGenerator() {
|
|||||||
placeholder="Interface Port"
|
placeholder="Interface Port"
|
||||||
type="number"
|
type="number"
|
||||||
value={script.interface_port || ""}
|
value={script.interface_port || ""}
|
||||||
onChange={(e) =>
|
onChange={(e) => updateScript("interface_port", e.target.value ? Number(e.target.value) : null)}
|
||||||
updateScript(
|
|
||||||
"interface_port",
|
|
||||||
e.target.value ? Number(e.target.value) : null,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
<Input
|
<Input
|
||||||
@@ -285,17 +248,10 @@ export default function JSONGenerator() {
|
|||||||
<Input
|
<Input
|
||||||
placeholder="Documentation URL"
|
placeholder="Documentation URL"
|
||||||
value={script.documentation || ""}
|
value={script.documentation || ""}
|
||||||
onChange={(e) =>
|
onChange={(e) => updateScript("documentation", e.target.value || null)}
|
||||||
updateScript("documentation", e.target.value || null)
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<InstallMethod
|
<InstallMethod script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
|
||||||
script={script}
|
|
||||||
setScript={setScript}
|
|
||||||
setIsValid={setIsValid}
|
|
||||||
setZodErrors={setZodErrors}
|
|
||||||
/>
|
|
||||||
<h3 className="text-xl font-semibold">Default Credentials</h3>
|
<h3 className="text-xl font-semibold">Default Credentials</h3>
|
||||||
<Input
|
<Input
|
||||||
placeholder="Username"
|
placeholder="Username"
|
||||||
@@ -317,30 +273,17 @@ export default function JSONGenerator() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Note
|
<Note script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
|
||||||
script={script}
|
|
||||||
setScript={setScript}
|
|
||||||
setIsValid={setIsValid}
|
|
||||||
setZodErrors={setZodErrors}
|
|
||||||
/>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-1/2 p-4 bg-background overflow-y-auto">
|
<div className="w-1/2 p-4 bg-background overflow-y-auto">
|
||||||
{validationAlert}
|
{validationAlert}
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className="absolute right-2 top-2 flex gap-1">
|
<div className="absolute right-2 top-2 flex gap-1">
|
||||||
<Button
|
<Button size="icon" variant="outline" onClick={handleCopy}>
|
||||||
size="icon"
|
|
||||||
variant="outline"
|
|
||||||
onClick={handleCopy}
|
|
||||||
>
|
|
||||||
{isCopied ? <Check className="h-4 w-4" /> : <Clipboard className="h-4 w-4" />}
|
{isCopied ? <Check className="h-4 w-4" /> : <Clipboard className="h-4 w-4" />}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button size="icon" variant="outline" onClick={handleDownload}>
|
||||||
size="icon"
|
|
||||||
variant="outline"
|
|
||||||
onClick={handleDownload}
|
|
||||||
>
|
|
||||||
<Download className="h-4 w-4" />
|
<Download className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
import FAQ from "@/components/FAQ";
|
||||||
import AnimatedGradientText from "@/components/ui/animated-gradient-text";
|
import AnimatedGradientText from "@/components/ui/animated-gradient-text";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { CardFooter } from "@/components/ui/card";
|
import { CardFooter } from "@/components/ui/card";
|
||||||
@@ -34,14 +35,9 @@ export default function Page() {
|
|||||||
}, [theme]);
|
}, [theme]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<div className="w-full mt-16">
|
<div className="w-full mt-16">
|
||||||
<Particles
|
<Particles className="absolute inset-0 -z-40" quantity={100} ease={80} color={color} refresh />
|
||||||
className="absolute inset-0 -z-40"
|
|
||||||
quantity={100}
|
|
||||||
ease={80}
|
|
||||||
color={color}
|
|
||||||
refresh
|
|
||||||
/>
|
|
||||||
<div className="container mx-auto">
|
<div className="container mx-auto">
|
||||||
<div className="flex h-[80vh] flex-col items-center justify-center gap-4 py-20 lg:py-40">
|
<div className="flex h-[80vh] flex-col items-center justify-center gap-4 py-20 lg:py-40">
|
||||||
<Dialog>
|
<Dialog>
|
||||||
@@ -70,9 +66,8 @@ export default function Page() {
|
|||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>Thank You!</DialogTitle>
|
<DialogTitle>Thank You!</DialogTitle>
|
||||||
<DialogDescription>
|
<DialogDescription>
|
||||||
A big thank you to tteck and the many contributors who have
|
A big thank you to tteck and the many contributors who have made this project possible. Your hard
|
||||||
made this project possible. Your hard work is truly
|
work is truly appreciated by the entire Proxmox community!
|
||||||
appreciated by the entire Proxmox community!
|
|
||||||
</DialogDescription>
|
</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
<CardFooter className="flex flex-col gap-2">
|
<CardFooter className="flex flex-col gap-2">
|
||||||
@@ -93,8 +88,7 @@ export default function Page() {
|
|||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="flex items-center justify-center"
|
className="flex items-center justify-center"
|
||||||
>
|
>
|
||||||
<ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper
|
<ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper Scripts
|
||||||
Scripts
|
|
||||||
</a>
|
</a>
|
||||||
</Button>
|
</Button>
|
||||||
</CardFooter>
|
</CardFooter>
|
||||||
@@ -107,12 +101,10 @@ export default function Page() {
|
|||||||
</h1>
|
</h1>
|
||||||
<div className="max-w-2xl gap-2 flex flex-col text-center sm:text-lg text-sm leading-relaxed tracking-tight text-muted-foreground md:text-xl">
|
<div className="max-w-2xl gap-2 flex flex-col text-center sm:text-lg text-sm leading-relaxed tracking-tight text-muted-foreground md:text-xl">
|
||||||
<p>
|
<p>
|
||||||
We are a community-driven initiative that simplifies the setup
|
We are a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE).
|
||||||
of Proxmox Virtual Environment (VE).
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
With 300+ scripts to help you manage your{" "}
|
With 300+ scripts to help you manage your <b>Proxmox VE environment</b>. Whether you're a seasoned
|
||||||
<b>Proxmox VE environment</b>. Whether you're a seasoned
|
|
||||||
user or a newcomer, we've got you covered.
|
user or a newcomer, we've got you covered.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -131,7 +123,21 @@ export default function Page() {
|
|||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* FAQ Section */}
|
||||||
|
<div className="py-20" id="faq">
|
||||||
|
<div className="max-w-4xl mx-auto px-4">
|
||||||
|
<div className="text-center mb-12">
|
||||||
|
<h2 className="text-3xl font-bold tracking-tighter md:text-5xl mb-4">Frequently Asked Questions</h2>
|
||||||
|
<p className="text-muted-foreground text-lg">
|
||||||
|
Find answers to common questions about our Proxmox VE scripts
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<FAQ />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export default function ScriptAccordion({
|
|||||||
value={expandedItem}
|
value={expandedItem}
|
||||||
onValueChange={handleAccordionChange}
|
onValueChange={handleAccordionChange}
|
||||||
collapsible
|
collapsible
|
||||||
className="overflow-y-scroll max-h-[calc(100vh-220px)] overflow-x-hidden mt-3 p-2"
|
className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden mt-3 p-2"
|
||||||
>
|
>
|
||||||
{items.map((category) => (
|
{items.map((category) => (
|
||||||
<AccordionItem
|
<AccordionItem
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
Card,
|
|
||||||
CardContent,
|
|
||||||
CardDescription,
|
|
||||||
CardFooter,
|
|
||||||
CardHeader,
|
|
||||||
CardTitle,
|
|
||||||
} from "@/components/ui/card";
|
|
||||||
import { basePath, mostPopularScripts } from "@/config/siteConfig";
|
import { basePath, mostPopularScripts } from "@/config/siteConfig";
|
||||||
import { extractDate } from "@/lib/time";
|
import { extractDate } from "@/lib/time";
|
||||||
import { Category, Script } from "@/lib/types";
|
import { Category, Script } from "@/lib/types";
|
||||||
@@ -23,7 +16,8 @@ export const getDisplayValueFromType = (type: string) => {
|
|||||||
return "LXC";
|
return "LXC";
|
||||||
case "vm":
|
case "vm":
|
||||||
return "VM";
|
return "VM";
|
||||||
case "misc":
|
case "pve":
|
||||||
|
case "addon":
|
||||||
return "";
|
return "";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
@@ -47,8 +41,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return Array.from(uniqueScriptsMap.values()).sort(
|
return Array.from(uniqueScriptsMap.values()).sort(
|
||||||
(a, b) =>
|
(a, b) => new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
|
||||||
new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
|
|
||||||
);
|
);
|
||||||
}, [items]);
|
}, [items]);
|
||||||
|
|
||||||
@@ -74,18 +67,12 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
<h2 className="text-lg font-semibold">Newest Scripts</h2>
|
<h2 className="text-lg font-semibold">Newest Scripts</h2>
|
||||||
<div className="flex items-center justify-end gap-1">
|
<div className="flex items-center justify-end gap-1">
|
||||||
{page > 1 && (
|
{page > 1 && (
|
||||||
<div
|
<div className="cursor-pointer select-none p-2 text-sm font-semibold" onClick={goToPreviousPage}>
|
||||||
className="cursor-pointer select-none p-2 text-sm font-semibold"
|
|
||||||
onClick={goToPreviousPage}
|
|
||||||
>
|
|
||||||
Previous
|
Previous
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{endIndex < latestScripts.length && (
|
{endIndex < latestScripts.length && (
|
||||||
<div
|
<div onClick={goToNextPage} className="cursor-pointer select-none p-2 text-sm font-semibold">
|
||||||
onClick={goToNextPage}
|
|
||||||
className="cursor-pointer select-none p-2 text-sm font-semibold"
|
|
||||||
>
|
|
||||||
{page === 1 ? "More.." : "Next"}
|
{page === 1 ? "More.." : "Next"}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -94,10 +81,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
)}
|
)}
|
||||||
<div className="min-w flex w-full flex-row flex-wrap gap-4">
|
<div className="min-w flex w-full flex-row flex-wrap gap-4">
|
||||||
{latestScripts.slice(startIndex, endIndex).map((script) => (
|
{latestScripts.slice(startIndex, endIndex).map((script) => (
|
||||||
<Card
|
<Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
|
||||||
key={script.slug}
|
|
||||||
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
|
|
||||||
>
|
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
<CardTitle className="flex items-center gap-3">
|
<CardTitle className="flex items-center gap-3">
|
||||||
<div className="flex h-16 w-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
|
<div className="flex h-16 w-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
|
||||||
@@ -107,10 +91,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
height={64}
|
height={64}
|
||||||
width={64}
|
width={64}
|
||||||
alt=""
|
alt=""
|
||||||
onError={(e) =>
|
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
|
||||||
((e.currentTarget as HTMLImageElement).src =
|
|
||||||
`/${basePath}/logo.png`)
|
|
||||||
}
|
|
||||||
className="h-11 w-11 object-contain"
|
className="h-11 w-11 object-contain"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -126,9 +107,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
</CardTitle>
|
</CardTitle>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<CardDescription className="line-clamp-3 text-card-foreground">
|
<CardDescription className="line-clamp-3 text-card-foreground">{script.description}</CardDescription>
|
||||||
{script.description}
|
|
||||||
</CardDescription>
|
|
||||||
</CardContent>
|
</CardContent>
|
||||||
<CardFooter className="">
|
<CardFooter className="">
|
||||||
<Button asChild variant="outline">
|
<Button asChild variant="outline">
|
||||||
@@ -151,9 +130,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
|||||||
|
|
||||||
export function MostViewedScripts({ items }: { items: Category[] }) {
|
export function MostViewedScripts({ items }: { items: Category[] }) {
|
||||||
const mostViewedScripts = items.reduce((acc: Script[], category) => {
|
const mostViewedScripts = items.reduce((acc: Script[], category) => {
|
||||||
const foundScripts = category.scripts.filter((script) =>
|
const foundScripts = category.scripts.filter((script) => mostPopularScripts.includes(script.slug));
|
||||||
mostPopularScripts.includes(script.slug),
|
|
||||||
);
|
|
||||||
return acc.concat(foundScripts);
|
return acc.concat(foundScripts);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -166,10 +143,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
|
|||||||
)}
|
)}
|
||||||
<div className="min-w flex w-full flex-row flex-wrap gap-4">
|
<div className="min-w flex w-full flex-row flex-wrap gap-4">
|
||||||
{mostViewedScripts.map((script) => (
|
{mostViewedScripts.map((script) => (
|
||||||
<Card
|
<Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
|
||||||
key={script.slug}
|
|
||||||
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
|
|
||||||
>
|
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
<CardTitle className="flex items-center gap-3">
|
<CardTitle className="flex items-center gap-3">
|
||||||
<div className="flex size-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
|
<div className="flex size-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
|
||||||
@@ -179,10 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
|
|||||||
height={64}
|
height={64}
|
||||||
width={64}
|
width={64}
|
||||||
alt=""
|
alt=""
|
||||||
onError={(e) =>
|
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
|
||||||
((e.currentTarget as HTMLImageElement).src =
|
|
||||||
`/${basePath}/logo.png`)
|
|
||||||
}
|
|
||||||
className="h-11 w-11 object-contain"
|
className="h-11 w-11 object-contain"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ import { Suspense } from "react";
|
|||||||
import { ResourceDisplay } from "./ResourceDisplay";
|
import { ResourceDisplay } from "./ResourceDisplay";
|
||||||
import { getDisplayValueFromType } from "./ScriptInfoBlocks";
|
import { getDisplayValueFromType } from "./ScriptInfoBlocks";
|
||||||
import Alerts from "./ScriptItems/Alerts";
|
import Alerts from "./ScriptItems/Alerts";
|
||||||
|
import Buttons from "./ScriptItems/Buttons";
|
||||||
import DefaultPassword from "./ScriptItems/DefaultPassword";
|
import DefaultPassword from "./ScriptItems/DefaultPassword";
|
||||||
import Description from "./ScriptItems/Description";
|
import Description from "./ScriptItems/Description";
|
||||||
import InstallCommand from "./ScriptItems/InstallCommand";
|
import InstallCommand from "./ScriptItems/InstallCommand";
|
||||||
import Tooltips from "./ScriptItems/Tooltips";
|
|
||||||
import InterFaces from "./ScriptItems/InterFaces";
|
import InterFaces from "./ScriptItems/InterFaces";
|
||||||
import Buttons from "./ScriptItems/Buttons";
|
import Tooltips from "./ScriptItems/Tooltips";
|
||||||
|
|
||||||
interface ScriptItemProps {
|
interface ScriptItemProps {
|
||||||
item: Script;
|
item: Script;
|
||||||
@@ -142,7 +142,9 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
|
|||||||
|
|
||||||
<div className="mt-4 rounded-lg border shadow-sm">
|
<div className="mt-4 rounded-lg border shadow-sm">
|
||||||
<div className="flex gap-3 px-4 py-2 bg-accent/25">
|
<div className="flex gap-3 px-4 py-2 bg-accent/25">
|
||||||
<h2 className="text-lg font-semibold">How to {item.type === "misc" ? "use" : "install"}</h2>
|
<h2 className="text-lg font-semibold">
|
||||||
|
How to {item.type === "pve" ? "use" : item.type === "addon" ? "apply" : "install"}
|
||||||
|
</h2>
|
||||||
<Tooltips item={item} />
|
<Tooltips item={item} />
|
||||||
</div>
|
</div>
|
||||||
<Separator />
|
<Separator />
|
||||||
|
|||||||
@@ -16,7 +16,17 @@ const generateInstallSourceUrl = (slug: string) => {
|
|||||||
|
|
||||||
const generateSourceUrl = (slug: string, type: string) => {
|
const generateSourceUrl = (slug: string, type: string) => {
|
||||||
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
|
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
|
||||||
return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`;
|
|
||||||
|
switch (type) {
|
||||||
|
case "vm":
|
||||||
|
return `${baseUrl}/vm/${slug}.sh`;
|
||||||
|
case "pve":
|
||||||
|
return `${baseUrl}/tools/pve/${slug}.sh`;
|
||||||
|
case "addon":
|
||||||
|
return `${baseUrl}/tools/addon/${slug}.sh`;
|
||||||
|
default:
|
||||||
|
return `${baseUrl}/ct/${slug}.sh`; // fallback for "ct"
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateUpdateUrl = (slug: string) => {
|
const generateUpdateUrl = (slug: string) => {
|
||||||
|
|||||||
@@ -6,50 +6,44 @@ import { getDisplayValueFromType } from "../ScriptInfoBlocks";
|
|||||||
|
|
||||||
const getInstallCommand = (scriptPath = "", isAlpine = false) => {
|
const getInstallCommand = (scriptPath = "", isAlpine = false) => {
|
||||||
const url = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
|
const url = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
|
||||||
return isAlpine
|
return isAlpine ? `bash -c "$(curl -fsSL ${url})"` : `bash -c "$(curl -fsSL ${url})"`;
|
||||||
? `bash -c "$(curl -fsSL ${url})"`
|
|
||||||
: `bash -c "$(curl -fsSL ${url})"`;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export default function InstallCommand({ item }: { item: Script }) {
|
export default function InstallCommand({ item }: { item: Script }) {
|
||||||
const alpineScript = item.install_methods.find(
|
const alpineScript = item.install_methods.find((method) => method.type === "alpine");
|
||||||
(method) => method.type === "alpine",
|
|
||||||
);
|
|
||||||
|
|
||||||
const defaultScript = item.install_methods.find(
|
const defaultScript = item.install_methods.find((method) => method.type === "default");
|
||||||
(method) => method.type === "default",
|
|
||||||
);
|
|
||||||
|
|
||||||
const renderInstructions = (isAlpine = false) => (
|
const renderInstructions = (isAlpine = false) => (
|
||||||
<>
|
<>
|
||||||
<p className="text-sm mt-2">
|
<p className="text-sm mt-2">
|
||||||
{isAlpine ? (
|
{isAlpine ? (
|
||||||
<>
|
<>
|
||||||
As an alternative option, you can use Alpine Linux and the{" "}
|
As an alternative option, you can use Alpine Linux and the {item.name} package to create a {item.name}{" "}
|
||||||
{item.name} package to create a {item.name}{" "}
|
{getDisplayValueFromType(item.type)} container with faster creation time and minimal system resource usage.
|
||||||
{getDisplayValueFromType(item.type)} container with faster creation
|
You are also obliged to adhere to updates provided by the package maintainer.
|
||||||
time and minimal system resource usage. You are also obliged to
|
|
||||||
adhere to updates provided by the package maintainer.
|
|
||||||
</>
|
</>
|
||||||
) : item.type == "misc" ? (
|
) : item.type === "pve" ? (
|
||||||
<>
|
<>
|
||||||
To use the {item.name} script, run the command below in the shell.
|
To use the {item.name} script, run the command below **only** in the Proxmox VE Shell. This script is
|
||||||
|
intended for managing or enhancing the host system directly.
|
||||||
|
</>
|
||||||
|
) : item.type === "addon" ? (
|
||||||
|
<>
|
||||||
|
This script enhances an existing setup. You can use it inside a running LXC container or directly on the
|
||||||
|
Proxmox VE host to extend functionality with {item.name}.
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
{" "}
|
To create a new Proxmox VE {item.name} {getDisplayValueFromType(item.type)}, run the command below in the
|
||||||
To create a new Proxmox VE {item.name}{" "}
|
|
||||||
{getDisplayValueFromType(item.type)}, run the command below in the
|
|
||||||
Proxmox VE Shell.
|
Proxmox VE Shell.
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
{isAlpine && (
|
{isAlpine && (
|
||||||
<p className="mt-2 text-sm">
|
<p className="mt-2 text-sm">
|
||||||
To create a new Proxmox VE Alpine-{item.name}{" "}
|
To create a new Proxmox VE Alpine-{item.name} {getDisplayValueFromType(item.type)}, run the command below in
|
||||||
{getDisplayValueFromType(item.type)}, run the command below in the
|
the Proxmox VE Shell.
|
||||||
Proxmox VE Shell
|
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
@@ -65,23 +59,17 @@ export default function InstallCommand({ item }: { item: Script }) {
|
|||||||
</TabsList>
|
</TabsList>
|
||||||
<TabsContent value="default">
|
<TabsContent value="default">
|
||||||
{renderInstructions()}
|
{renderInstructions()}
|
||||||
<CodeCopyButton>
|
<CodeCopyButton>{getInstallCommand(defaultScript?.script)}</CodeCopyButton>
|
||||||
{getInstallCommand(defaultScript?.script)}
|
|
||||||
</CodeCopyButton>
|
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
<TabsContent value="alpine">
|
<TabsContent value="alpine">
|
||||||
{renderInstructions(true)}
|
{renderInstructions(true)}
|
||||||
<CodeCopyButton>
|
<CodeCopyButton>{getInstallCommand(alpineScript.script, true)}</CodeCopyButton>
|
||||||
{getInstallCommand(alpineScript.script, true)}
|
|
||||||
</CodeCopyButton>
|
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
) : defaultScript?.script ? (
|
) : defaultScript?.script ? (
|
||||||
<>
|
<>
|
||||||
{renderInstructions()}
|
{renderInstructions()}
|
||||||
<CodeCopyButton>
|
<CodeCopyButton>{getInstallCommand(defaultScript.script)}</CodeCopyButton>
|
||||||
{getInstallCommand(defaultScript.script)}
|
|
||||||
</CodeCopyButton>
|
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
CommandItem,
|
CommandItem,
|
||||||
CommandList,
|
CommandList,
|
||||||
} from "@/components/ui/command";
|
} from "@/components/ui/command";
|
||||||
|
import { basePath } from "@/config/siteConfig";
|
||||||
import { fetchCategories } from "@/lib/data";
|
import { fetchCategories } from "@/lib/data";
|
||||||
import { Category } from "@/lib/types";
|
import { Category } from "@/lib/types";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
@@ -15,18 +16,17 @@ import React from "react";
|
|||||||
import { Badge } from "./ui/badge";
|
import { Badge } from "./ui/badge";
|
||||||
import { Button } from "./ui/button";
|
import { Button } from "./ui/button";
|
||||||
import { DialogTitle } from "./ui/dialog";
|
import { DialogTitle } from "./ui/dialog";
|
||||||
import { basePath } from "@/config/siteConfig";
|
|
||||||
|
|
||||||
export const formattedBadge = (type: string) => {
|
export const formattedBadge = (type: string) => {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "vm":
|
case "vm":
|
||||||
return <Badge className="text-blue-500/75 border-blue-500/75">VM</Badge>;
|
return <Badge className="text-blue-500/75 border-blue-500/75">VM</Badge>;
|
||||||
case "ct":
|
case "ct":
|
||||||
return (
|
return <Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>;
|
||||||
<Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>
|
case "pve":
|
||||||
);
|
return <Badge className="text-orange-500/75 border-orange-500/75">PVE</Badge>;
|
||||||
case "misc":
|
case "addon":
|
||||||
return <Badge className="text-green-500/75 border-green-500/75">MISC</Badge>;
|
return <Badge className="text-green-500/75 border-green-500/75">ADDON</Badge>;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
@@ -84,14 +84,9 @@ export default function CommandMenu() {
|
|||||||
<DialogTitle className="sr-only">Search scripts</DialogTitle>
|
<DialogTitle className="sr-only">Search scripts</DialogTitle>
|
||||||
<CommandInput placeholder="Search for a script..." />
|
<CommandInput placeholder="Search for a script..." />
|
||||||
<CommandList>
|
<CommandList>
|
||||||
<CommandEmpty>
|
<CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
|
||||||
{isLoading ? "Loading..." : "No scripts found."}
|
|
||||||
</CommandEmpty>
|
|
||||||
{links.map((category) => (
|
{links.map((category) => (
|
||||||
<CommandGroup
|
<CommandGroup key={`category:${category.name}`} heading={category.name}>
|
||||||
key={`category:${category.name}`}
|
|
||||||
heading={category.name}
|
|
||||||
>
|
|
||||||
{category.scripts.map((script) => (
|
{category.scripts.map((script) => (
|
||||||
<CommandItem
|
<CommandItem
|
||||||
key={`script:${script.slug}`}
|
key={`script:${script.slug}`}
|
||||||
@@ -104,10 +99,7 @@ export default function CommandMenu() {
|
|||||||
<div className="flex gap-2" onClick={() => setOpen(false)}>
|
<div className="flex gap-2" onClick={() => setOpen(false)}>
|
||||||
<Image
|
<Image
|
||||||
src={script.logo || `/${basePath}/logo.png`}
|
src={script.logo || `/${basePath}/logo.png`}
|
||||||
onError={(e) =>
|
onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
|
||||||
((e.currentTarget as HTMLImageElement).src =
|
|
||||||
`/${basePath}/logo.png`)
|
|
||||||
}
|
|
||||||
unoptimized
|
unoptimized
|
||||||
width={16}
|
width={16}
|
||||||
height={16}
|
height={16}
|
||||||
|
|||||||
29
frontend/src/components/FAQ.tsx
Normal file
29
frontend/src/components/FAQ.tsx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
||||||
|
import { Plus } from "lucide-react";
|
||||||
|
import { FAQ_Items } from "../config/faqConfig";
|
||||||
|
import { Accordion, AccordionContent, AccordionItem } from "./ui/accordion";
|
||||||
|
|
||||||
|
export default function FAQ() {
|
||||||
|
return (
|
||||||
|
<div className="space-y-4">
|
||||||
|
<Accordion type="single" collapsible className="w-full">
|
||||||
|
{FAQ_Items.map((item, index) => (
|
||||||
|
<AccordionItem value={index.toString()} key={index} className="py-2">
|
||||||
|
<AccordionPrimitive.Header className="flex">
|
||||||
|
<AccordionPrimitive.Trigger className="flex flex-1 items-center gap-3 py-2 text-left text-[15px] font-semibold leading-6 transition-all [&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&>svg]:-order-1 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0 [&[data-state=open]>svg]:rotate-180">
|
||||||
|
{item.title}
|
||||||
|
<Plus
|
||||||
|
size={16}
|
||||||
|
strokeWidth={2}
|
||||||
|
className="shrink-0 opacity-60 transition-transform duration-200"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</AccordionPrimitive.Trigger>
|
||||||
|
</AccordionPrimitive.Header>
|
||||||
|
<AccordionContent className="pb-2 ps-7 text-muted-foreground">{item.content}</AccordionContent>
|
||||||
|
</AccordionItem>
|
||||||
|
))}
|
||||||
|
</Accordion>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ import { cn } from "@/lib/utils";
|
|||||||
|
|
||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
return (
|
return (
|
||||||
<div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-6 backdrop-blur-lg">
|
<div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-4 backdrop-blur-lg">
|
||||||
<div className="mx-6 w-full flex justify-between text-xs sm:text-sm text-muted-foreground">
|
<div className="mx-6 w-full flex justify-between text-xs sm:text-sm text-muted-foreground">
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
37
frontend/src/config/faqConfig.tsx
Normal file
37
frontend/src/config/faqConfig.tsx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
export const FAQ_Items = [
|
||||||
|
{
|
||||||
|
title: "Why do you use tarballs instead of git pull for installation?",
|
||||||
|
content:
|
||||||
|
"Our LXC scripts install applications using release tarballs. Tarballs contain stable code versions tested for release. Using `git pull` directly fetches the latest development code, which might be unstable or contain bugs. Tarballs offer a more reliable installation.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Why do the scripts install applications using HTTP by default?",
|
||||||
|
content:
|
||||||
|
"Our LXC scripts install applications using HTTP by default. Setting up HTTPS often requires manual configuration specific to your setup, which our automated scripts cannot handle reliably. If an application requires HTTPS, the script will configure it. For others, you need to enable HTTPS yourself, often following the application's official documentation.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Where can I find documentation for the installed application?",
|
||||||
|
content:
|
||||||
|
"We link to the official documentation for each application whenever possible. You can usually find this link on the script's information page for the specific LXC script. If you notice a missing link for an application that has official docs, please report it so we can add it.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "What should I do if I find a bug in an LXC script?",
|
||||||
|
content:
|
||||||
|
"Our LXC scripts are maintained by volunteers in their free time. Bugs can occur due to our errors or changes in the applications themselves. If you find a bug in one of our LXC scripts, please report it on our GitHub issues page. Your feedback helps us improve the scripts.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Why isn't the application updating to the very latest version?",
|
||||||
|
content:
|
||||||
|
"Updates via our LXC scripts might not pull the absolute latest version for a few reasons:\n- A bug in the application's release naming on GitHub.\n- A bug in our update script.\n- We intentionally pinned the version. This happens if a newer version has breaking changes or serious bugs that could affect your data or LXC stability. We wait for fixes before allowing the update.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Why am I getting a "502 Bad Gateway" error?',
|
||||||
|
content:
|
||||||
|
'A "502 Bad Gateway" error usually means the application inside the LXC is not running or responding correctly. Check the application\'s logs first. If you use a reverse proxy, check its logs too. If you still have problems after checking the logs, report the issue, providing details from the logs.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "What should I do if a script fails during execution?",
|
||||||
|
content:
|
||||||
|
"If an LXC script fails, run it again using Verbose mode. Standard mode hides detailed output for neatness, showing only progress. Verbose mode displays all messages, which helps you (and us) diagnose the error. Include this verbose output if you report the issue.",
|
||||||
|
},
|
||||||
|
];
|
||||||
@@ -5,7 +5,7 @@ export type Script = {
|
|||||||
slug: string;
|
slug: string;
|
||||||
categories: number[];
|
categories: number[];
|
||||||
date_created: string;
|
date_created: string;
|
||||||
type: "vm" | "ct" | "misc";
|
type: "vm" | "ct" | "pve" | "addon";
|
||||||
updateable: boolean;
|
updateable: boolean;
|
||||||
privileged: boolean;
|
privileged: boolean;
|
||||||
interface_port: number | null;
|
interface_port: number | null;
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
tini \
|
tini \
|
||||||
gpg \
|
gpg \
|
||||||
build-essential
|
build-essential \
|
||||||
|
git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
@@ -33,11 +34,11 @@ $STD npm install --global yarn
|
|||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
msg_info "Installing Actual Budget"
|
msg_info "Installing Actual Budget"
|
||||||
cd /opt
|
cd /opt || exit
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz")
|
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz")
|
||||||
tar -xzf v${RELEASE}.tar.gz
|
tar -xzf v"${RELEASE}".tar.gz
|
||||||
mv actual-${RELEASE} /opt/actualbudget
|
mv actual-"${RELEASE}" /opt/actualbudget
|
||||||
|
|
||||||
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
|
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
|
||||||
chown -R root:root /opt/actualbudget-data
|
chown -R root:root /opt/actualbudget-data
|
||||||
@@ -53,8 +54,10 @@ ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1
|
|||||||
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
|
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
|
||||||
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
|
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
|
||||||
EOF
|
EOF
|
||||||
cd /opt/actualbudget
|
cd /opt/actualbudget || exit
|
||||||
$STD yarn workspaces focus @actual-app/sync-server --production
|
export NODE_OPTIONS="--max_old_space_size=3072"
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn run build:server
|
||||||
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
|
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
|
||||||
US
|
US
|
||||||
California
|
California
|
||||||
@@ -93,7 +96,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/v${RELEASE}.tar.gz
|
rm -rf /opt/v"${RELEASE}".tar.gz
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -22,34 +22,44 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Installing MariaDB"
|
msg_info "Installing MariaDB"
|
||||||
$STD apk add --no-cache mariadb mariadb-client
|
$STD apk add --no-cache mariadb mariadb-client
|
||||||
$STD rc-update add mariadb default
|
$STD rc-update add mariadb default
|
||||||
$STD rc-service mariadb start
|
|
||||||
msg_ok "Installed MariaDB"
|
msg_ok "Installed MariaDB"
|
||||||
|
|
||||||
msg_info "Configuring MariaDB"
|
msg_info "Configuring MariaDB"
|
||||||
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1
|
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1
|
||||||
$STD rc-service mariadb restart
|
$STD rc-service mariadb start
|
||||||
msg_ok "MariaDB Configured"
|
msg_ok "MariaDB Configured"
|
||||||
|
|
||||||
read -r -p "Would you like to install Adminer with lighthttpd? <y/N>: " prompt
|
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Adminer"
|
msg_info "Installing Adminer and dependencies"
|
||||||
$STD apk add --no-cache lighttpd php php-cgi php-mysqli php-mbstring php-zip php-gd php-json php-curl jq
|
$STD apk add --no-cache \
|
||||||
sed -i 's|server.modules += ( "mod_cgi" )|server.modules += ( "mod_cgi", "mod_fastcgi" )|' /etc/lighttpd/lighttpd.conf
|
lighttpd \
|
||||||
echo 'fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/var/run/php-cgi.sock" )))' >>/etc/lighttpd/lighttpd.conf
|
lighttpd-openrc \
|
||||||
ADMINER_VERSION=$(curl -s https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/v//')
|
php83 \
|
||||||
wget -q -O /var/www/adminer.php "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php"
|
php83-cgi \
|
||||||
chown lighttpd:lighttpd /var/www/adminer.php
|
php83-common \
|
||||||
chmod 755 /var/www/adminer.php
|
php83-curl \
|
||||||
|
php83-gd \
|
||||||
|
php83-mbstring \
|
||||||
|
php83-mysqli \
|
||||||
|
php83-mysqlnd \
|
||||||
|
php83-openssl \
|
||||||
|
php83-zip \
|
||||||
|
php83-session \
|
||||||
|
jq
|
||||||
|
|
||||||
|
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
|
||||||
|
mkdir -p /var/www/localhost/htdocs
|
||||||
|
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
|
||||||
|
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
|
||||||
|
chmod 755 /var/www/localhost/htdocs/adminer.php
|
||||||
msg_ok "Adminer Installed"
|
msg_ok "Adminer Installed"
|
||||||
|
|
||||||
msg_info "Starting Lighttpd"
|
msg_info "Starting Lighttpd"
|
||||||
$STD rc-update add lighttpd default
|
$STD rc-update add lighttpd default
|
||||||
$STD rc-service lighttpd restart
|
$STD rc-service lighttpd restart
|
||||||
msg_ok "Lighttpd Started"
|
msg_ok "Lighttpd Started"
|
||||||
|
|
||||||
echo -e "Adminer is available at: ${BL}http://$(hostname -I | awk '{print $1}')/adminer${CL}"
|
|
||||||
else
|
|
||||||
echo -e "Skipped Adminer Installation..."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
70
install/alpine-postgresql-install.sh
Normal file
70
install/alpine-postgresql-install.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.postgresql.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing PostgreSQL"
|
||||||
|
$STD apk add --no-cache postgresql16 postgresql16-contrib postgresql16-openrc sudo
|
||||||
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Enabling PostgreSQL Service"
|
||||||
|
$STD rc-update add postgresql default
|
||||||
|
msg_ok "Enabled PostgreSQL Service"
|
||||||
|
|
||||||
|
msg_info "Starting PostgreSQL"
|
||||||
|
$STD rc-service postgresql start
|
||||||
|
msg_ok "Started PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Configuring PostgreSQL for External Access"
|
||||||
|
conf_file="/etc/postgresql16/postgresql.conf"
|
||||||
|
hba_file="/etc/postgresql16/pg_hba.conf"
|
||||||
|
sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file"
|
||||||
|
sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file"
|
||||||
|
$STD rc-service postgresql restart
|
||||||
|
msg_ok "Configured and Restarted PostgreSQL"
|
||||||
|
|
||||||
|
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
||||||
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Installing Adminer and dependencies"
|
||||||
|
$STD apk add --no-cache \
|
||||||
|
lighttpd \
|
||||||
|
lighttpd-openrc \
|
||||||
|
php83 \
|
||||||
|
php83-cgi \
|
||||||
|
php83-common \
|
||||||
|
php83-curl \
|
||||||
|
php83-gd \
|
||||||
|
php83-mbstring \
|
||||||
|
php83-pdo \
|
||||||
|
php83-pgsql \
|
||||||
|
php83-openssl \
|
||||||
|
php83-zip \
|
||||||
|
php83-session \
|
||||||
|
jq
|
||||||
|
|
||||||
|
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
|
||||||
|
mkdir -p /var/www/localhost/htdocs
|
||||||
|
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
|
||||||
|
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
|
||||||
|
chmod 755 /var/www/localhost/htdocs/adminer.php
|
||||||
|
msg_ok "Adminer Installed"
|
||||||
|
|
||||||
|
msg_info "Starting Lighttpd"
|
||||||
|
$STD rc-update add lighttpd default
|
||||||
|
$STD rc-service lighttpd restart
|
||||||
|
msg_ok "Lighttpd Started"
|
||||||
|
fi
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -41,6 +41,9 @@ PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACC
|
|||||||
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
|
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
|
||||||
ListenPort = 51820
|
ListenPort = 51820
|
||||||
EOF
|
EOF
|
||||||
|
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
|
||||||
|
$STD rc-update add sysctl
|
||||||
|
$STD sysctl -p /etc/sysctl.conf
|
||||||
msg_ok "Installed WireGuard"
|
msg_ok "Installed WireGuard"
|
||||||
|
|
||||||
read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD
|
read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD
|
||||||
@@ -61,8 +64,6 @@ if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
|
|||||||
cd /etc/wgdashboard/src || exit
|
cd /etc/wgdashboard/src || exit
|
||||||
chmod u+x wgd.sh
|
chmod u+x wgd.sh
|
||||||
$STD ./wgd.sh install
|
$STD ./wgd.sh install
|
||||||
$STD echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
|
|
||||||
sysctl -p /etc/sysctl.conf
|
|
||||||
msg_ok "Installed WGDashboard"
|
msg_ok "Installed WGDashboard"
|
||||||
|
|
||||||
msg_info "Creating Service for WGDashboard"
|
msg_info "Creating Service for WGDashboard"
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
|||||||
msg_ok "Installed Golang"
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
msg_info "Setup xCaddy"
|
msg_info "Setup xCaddy"
|
||||||
|
$STD apt-get install -y git
|
||||||
cd /opt
|
cd /opt
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb" -o $(basename "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb")
|
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb" -o $(basename "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ $STD apt-get install -y g++-multilib
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Daemon Sync Server"
|
msg_info "Installing Daemon Sync Server"
|
||||||
curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb"
|
curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb"
|
||||||
$STD dpkg -i daemonsync_2.2.0.0059_amd64.deb
|
$STD dpkg -i daemonsync_2.2.0.0059_amd64.deb
|
||||||
msg_ok "Installed Daemon Sync Server"
|
msg_ok "Installed Daemon Sync Server"
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: MickLesk (Canbiz) & vhsdream
|
# Author: MickLesk (Canbiz) & vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://hoarder.app/
|
# Source: https://karakeep.app/
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -34,8 +34,8 @@ chmod +x /usr/bin/yt-dlp
|
|||||||
msg_ok "Installed Additional Tools"
|
msg_ok "Installed Additional Tools"
|
||||||
|
|
||||||
msg_info "Installing Meilisearch"
|
msg_info "Installing Meilisearch"
|
||||||
cd /tmp
|
cd /tmp || exit
|
||||||
curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o $(basename "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb")
|
curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o "meilisearch.deb"
|
||||||
$STD dpkg -i meilisearch.deb
|
$STD dpkg -i meilisearch.deb
|
||||||
curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml"
|
curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml"
|
||||||
MASTER_KEY=$(openssl rand -base64 12)
|
MASTER_KEY=$(openssl rand -base64 12)
|
||||||
@@ -58,30 +58,30 @@ $STD apt-get install -y nodejs
|
|||||||
$STD npm install -g corepack@0.31.0
|
$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 karakeep"
|
||||||
cd /opt
|
cd /opt || exit
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip")
|
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
||||||
unzip -q v${RELEASE}.zip
|
unzip -q "v${RELEASE}.zip"
|
||||||
mv hoarder-${RELEASE} /opt/hoarder
|
mv karakeep-"${RELEASE}" /opt/karakeep
|
||||||
cd /opt/hoarder
|
cd /opt/karakeep || exit
|
||||||
corepack enable
|
corepack enable
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export CI="true"
|
export CI="true"
|
||||||
cd /opt/hoarder/apps/web
|
cd /opt/karakeep/apps/web || exit
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm exec next build --experimental-build-mode compile
|
$STD pnpm exec next build --experimental-build-mode compile
|
||||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
|
cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web
|
||||||
cd /opt/hoarder/apps/workers
|
cd /opt/karakeep/apps/workers || exit
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
|
|
||||||
export DATA_DIR=/opt/hoarder_data
|
export DATA_DIR=/opt/karakeep_data
|
||||||
HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24)
|
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
|
||||||
mkdir -p /etc/hoarder
|
mkdir -p /etc/karakeep
|
||||||
cat <<EOF >/etc/hoarder/hoarder.env
|
cat <<EOF >/etc/karakeep/karakeep.env
|
||||||
SERVER_VERSION=$RELEASE
|
SERVER_VERSION=$RELEASE
|
||||||
NEXTAUTH_SECRET="$HOARDER_SECRET"
|
NEXTAUTH_SECRET="$karakeep_SECRET"
|
||||||
NEXTAUTH_URL="http://localhost:3000"
|
NEXTAUTH_URL="http://localhost:3000"
|
||||||
DATA_DIR="$DATA_DIR"
|
DATA_DIR="$DATA_DIR"
|
||||||
MEILI_ADDR="http://127.0.0.1:7700"
|
MEILI_ADDR="http://127.0.0.1:7700"
|
||||||
@@ -99,11 +99,11 @@ BROWSER_WEB_URL="http://127.0.0.1:9222"
|
|||||||
# INFERENCE_IMAGE_MODEL="gpt-4o-mini"
|
# INFERENCE_IMAGE_MODEL="gpt-4o-mini"
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||||
msg_ok "Installed Hoarder"
|
msg_ok "Installed karakeep"
|
||||||
|
|
||||||
msg_info "Running Database Migration"
|
msg_info "Running Database Migration"
|
||||||
mkdir -p ${DATA_DIR}
|
mkdir -p ${DATA_DIR}
|
||||||
cd /opt/hoarder/packages/db
|
cd /opt/karakeep/packages/db || exit
|
||||||
$STD pnpm migrate
|
$STD pnpm migrate
|
||||||
msg_ok "Database Migration Completed"
|
msg_ok "Database Migration Completed"
|
||||||
|
|
||||||
@@ -121,25 +121,25 @@ Restart=always
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/hoarder-web.service
|
cat <<EOF >/etc/systemd/system/karakeep-web.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Hoarder Web
|
Description=karakeep Web
|
||||||
Wants=network.target hoarder-workers.service
|
Wants=network.target karakeep-workers.service
|
||||||
After=network.target hoarder-workers.service
|
After=network.target karakeep-workers.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=pnpm start
|
ExecStart=pnpm start
|
||||||
WorkingDirectory=/opt/hoarder/apps/web
|
WorkingDirectory=/opt/karakeep/apps/web
|
||||||
EnvironmentFile=/etc/hoarder/hoarder.env
|
EnvironmentFile=/etc/karakeep/karakeep.env
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/hoarder-browser.service
|
cat <<EOF >/etc/systemd/system/karakeep-browser.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Hoarder Headless Browser
|
Description=karakeep Headless Browser
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
@@ -151,16 +151,16 @@ Restart=always
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/hoarder-workers.service
|
cat <<EOF >/etc/systemd/system/karakeep-workers.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Hoarder Workers
|
Description=karakeep Workers
|
||||||
Wants=network.target hoarder-browser.service meilisearch.service
|
Wants=network.target karakeep-browser.service meilisearch.service
|
||||||
After=network.target hoarder-browser.service meilisearch.service
|
After=network.target karakeep-browser.service meilisearch.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=pnpm start:prod
|
ExecStart=pnpm start:prod
|
||||||
WorkingDirectory=/opt/hoarder/apps/workers
|
WorkingDirectory=/opt/karakeep/apps/workers
|
||||||
EnvironmentFile=/etc/hoarder/hoarder.env
|
EnvironmentFile=/etc/karakeep/karakeep.env
|
||||||
Restart=always
|
Restart=always
|
||||||
TimeoutStopSec=5
|
TimeoutStopSec=5
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ TimeoutStopSec=5
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl enable -q --now meilisearch hoarder-browser hoarder-workers hoarder-web
|
systemctl enable -q --now meilisearch karakeep-browser karakeep-workers karakeep-web
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
@@ -176,7 +176,7 @@ customize
|
|||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /tmp/meilisearch.deb
|
rm -rf /tmp/meilisearch.deb
|
||||||
rm -f /opt/v${RELEASE}.zip
|
rm -f /opt/v"${RELEASE}".zip
|
||||||
$STD apt-get autoremove -y
|
$STD apt-get autoremove -y
|
||||||
$STD apt-get autoclean -y
|
$STD apt-get autoclean -y
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
@@ -24,21 +24,20 @@ $STD apt-get install -y \
|
|||||||
lsb-release
|
lsb-release
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup PHP8.4 Repository"
|
msg_info "Adding PHP8.4 Repository"
|
||||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
msg_ok "Setup PHP8.4 Repository"
|
msg_ok "Added PHP8.4 Repository"
|
||||||
|
|
||||||
msg_info "Setup PHP"
|
msg_info "Installing PHP"
|
||||||
$STD apt-get remove -y php8.2*
|
$STD apt-get remove -y php8.2*
|
||||||
#$STD apt-get remove -y php8.3*
|
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
php8.3 \
|
php8.4 \
|
||||||
php8.3-{mbstring,gd,intl,common,mysql,zip,xml} \
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
|
||||||
libapache2-mod-php8.3
|
libapache2-mod-php8.4
|
||||||
msg_info "Setup PHP"
|
msg_ok "Installed PHP"
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
DB_NAME=kimai_db
|
DB_NAME=kimai_db
|
||||||
@@ -59,9 +58,9 @@ msg_ok "Set up database"
|
|||||||
msg_info "Installing Kimai (Patience)"
|
msg_info "Installing Kimai (Patience)"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
|
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
|
||||||
unzip -q ${RELEASE}.zip
|
unzip -q "${RELEASE}".zip
|
||||||
mv kimai-${RELEASE} /opt/kimai
|
mv kimai-"${RELEASE}" /opt/kimai
|
||||||
cd /opt/kimai
|
cd /opt/kimai || exit
|
||||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
@@ -130,7 +129,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf ${RELEASE}.zip
|
rm -rf "${RELEASE}".zip
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
122
install/meilisearch-install.sh
Normal file
122
install/meilisearch-install.sh
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.meilisearch.com/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
gnupg
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
|
||||||
|
$STD dpkg -i $tmp_file
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||||
|
MASTER_KEY=$(openssl rand -base64 12)
|
||||||
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
|
sed -i \
|
||||||
|
-e 's|^env =.*|env = "production"|' \
|
||||||
|
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||||
|
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||||
|
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||||
|
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||||
|
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||||
|
-e 's|^http_addr =.*|http_addr = "0.0.0.0:7700"|' \
|
||||||
|
/etc/meilisearch.toml
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
|
read -r -p "Do you want add meilisearch-ui? [y/n]: " prompt
|
||||||
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Setting up Node.js Repository"
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
msg_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Installing Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm install -g pnpm
|
||||||
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}-ui"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
tmp_dir=$(mktemp -d)
|
||||||
|
mkdir -p /opt/meilisearch-ui
|
||||||
|
RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
|
||||||
|
unzip -q "$tmp_file" -d "$tmp_dir"
|
||||||
|
mv "$tmp_dir"/*/* /opt/meilisearch-ui/
|
||||||
|
cd /opt/meilisearch-ui
|
||||||
|
sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
|
||||||
|
$STD pnpm install
|
||||||
|
cat <<EOF > /opt/meilisearch-ui/.env.local
|
||||||
|
VITE_SINGLETON_MODE=true
|
||||||
|
VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700
|
||||||
|
VITE_SINGLETON_API_KEY=${MASTER_KEY}
|
||||||
|
EOF
|
||||||
|
echo "${RELEASE_UI}" >/opt/${APPLICATION}-ui_version.txt
|
||||||
|
msg_ok "Setup ${APPLICATION}-ui"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Setting up Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/meilisearch.service
|
||||||
|
[Unit]
|
||||||
|
Description=Meilisearch
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now meilisearch
|
||||||
|
|
||||||
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
cat <<EOF > /etc/systemd/system/meilisearch-ui.service
|
||||||
|
[Unit]
|
||||||
|
Description=Meilisearch UI Service
|
||||||
|
After=network.target meilisearch.service
|
||||||
|
Requires=meilisearch.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/meilisearch-ui
|
||||||
|
ExecStart=/usr/bin/pnpm start
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=meilisearch-ui
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now meilisearch-ui
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_ok "Set up Services"
|
||||||
|
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -116,6 +116,8 @@ ExecStart=/opt/paperless-gpt/paperless-gpt
|
|||||||
Restart=always
|
Restart=always
|
||||||
User=root
|
User=root
|
||||||
EnvironmentFile=/opt/paperless-gpt-data/.env
|
EnvironmentFile=/opt/paperless-gpt-data/.env
|
||||||
|
StandardOutput=append:/var/log/paperless-gpt.log
|
||||||
|
StandardError=append:/var/log/paperless-gpt.log
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
@@ -209,7 +209,10 @@ Requires=redis.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
ExecStart=/usr/local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application
|
ExecStart=granian --interface asginl --ws "paperless.asgi:application"
|
||||||
|
Environment=GRANIAN_HOST=::
|
||||||
|
Environment=GRANIAN_PORT=8000
|
||||||
|
Environment=GRANIAN_WORKERS=1
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
@@ -22,19 +22,19 @@ $STD apt-get install -y \
|
|||||||
composer
|
composer
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Adding PHP8.3 Repository"
|
msg_info "Adding PHP8.4 Repository"
|
||||||
$STD curl -fsSL "https://packages.sury.org/debsuryorg-archive-keyring.deb" -o /tmp/debsuryorg-archive-keyring.deb
|
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
msg_ok "Added PHP8.3 Repository"
|
msg_ok "Added PHP8.4 Repository"
|
||||||
|
|
||||||
msg_info "Installing PHP"
|
msg_info "Installing PHP"
|
||||||
$STD apt-get remove -y php8.2*
|
$STD apt-get remove -y php8.2*
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
php8.3 \
|
php8.4 \
|
||||||
php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \
|
||||||
libapache2-mod-php8.3
|
libapache2-mod-php8.4
|
||||||
msg_info "Installed PHP"
|
msg_info "Installed PHP"
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
@@ -55,7 +55,7 @@ msg_ok "Set up MariaDB"
|
|||||||
msg_info "Installing Pelican Panel"
|
msg_info "Installing Pelican Panel"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
mkdir /opt/pelican-panel
|
mkdir /opt/pelican-panel
|
||||||
cd /opt/pelican-panel
|
cd /opt/pelican-panel || exit
|
||||||
curl -fsSL "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz")
|
curl -fsSL "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz")
|
||||||
tar -xzf "panel.tar.gz"
|
tar -xzf "panel.tar.gz"
|
||||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
@@ -64,7 +64,7 @@ $STD php artisan p:environment:queue-service --no-interaction
|
|||||||
echo "* * * * * php /opt/pelican-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
|
echo "* * * * * php /opt/pelican-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
|
||||||
chown -R www-data:www-data /opt/pelican-panel
|
chown -R www-data:www-data /opt/pelican-panel
|
||||||
chmod -R 755 /opt/pelican-panel/storage /opt/pelican-panel/bootstrap/cache/
|
chmod -R 755 /opt/pelican-panel/storage /opt/pelican-panel/bootstrap/cache/
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
||||||
msg_ok "Installed Pelican Panel"
|
msg_ok "Installed Pelican Panel"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -23,19 +23,19 @@ $STD apt-get install -y \
|
|||||||
composer
|
composer
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Adding PHP8.3 Repository"
|
msg_info "Adding PHP8.4 Repository"
|
||||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
msg_ok "Added PHP8.3 Repository"
|
msg_ok "Added PHP8.4 Repository"
|
||||||
|
|
||||||
msg_info "Installing PHP"
|
msg_info "Installing PHP"
|
||||||
$STD apt-get remove -y php8.2*
|
$STD apt-get remove -y php8.2*
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
php8.3 \
|
php8.4 \
|
||||||
php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
||||||
libapache2-mod-php8.3
|
libapache2-mod-php8.4
|
||||||
msg_ok "Installed PHP"
|
msg_ok "Installed PHP"
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
@@ -60,7 +60,7 @@ read -p "Enter your Last Name: " NAME_LAST
|
|||||||
msg_info "Installing pterodactyl Panel"
|
msg_info "Installing pterodactyl Panel"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
mkdir /opt/pterodactyl-panel
|
mkdir /opt/pterodactyl-panel
|
||||||
cd /opt/pterodactyl-panel
|
cd /opt/pterodactyl-panel || exit
|
||||||
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz")
|
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz")
|
||||||
tar -xzf "panel.tar.gz"
|
tar -xzf "panel.tar.gz"
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
@@ -68,8 +68,8 @@ IP=$(hostname -I | awk '{print $1}')
|
|||||||
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
$STD php artisan key:generate --force
|
$STD php artisan key:generate --force
|
||||||
$STD php artisan p:environment:setup --no-interaction --author $ADMIN_EMAIL --url "http://$IP"
|
$STD php artisan p:environment:setup --no-interaction --author "$ADMIN_EMAIL" --url "http://$IP"
|
||||||
$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password $DB_PASS
|
$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password "$DB_PASS"
|
||||||
$STD php artisan migrate --seed --force --no-interaction
|
$STD php artisan migrate --seed --force --no-interaction
|
||||||
$STD php artisan p:user:make --no-interaction --admin=1 --email "$ADMIN_EMAIL" --password "$ADMIN_PASS" --name-first "$NAME_FIRST" --name-last "$NAME_LAST" --username "admin"
|
$STD php artisan p:user:make --no-interaction --admin=1 --email "$ADMIN_EMAIL" --password "$ADMIN_PASS" --name-first "$NAME_FIRST" --name-last "$NAME_LAST" --username "admin"
|
||||||
echo "* * * * * php /opt/pterodactyl-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
|
echo "* * * * * php /opt/pterodactyl-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
|
||||||
@@ -82,7 +82,7 @@ chmod -R 755 /opt/pterodactyl-panel/storage/* /opt/pterodactyl-panel/bootstrap/c
|
|||||||
echo "pterodactyl Admin Password: $ADMIN_PASS"
|
echo "pterodactyl Admin Password: $ADMIN_PASS"
|
||||||
} >>~/pterodactyl-panel.creds
|
} >>~/pterodactyl-panel.creds
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
||||||
msg_ok "Installed pterodactyl Panel"
|
msg_ok "Installed pterodactyl Panel"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ $STD apt-get install -y \
|
|||||||
python3 \
|
python3 \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-pip
|
python3-pip \
|
||||||
|
python3-xmlsec
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
msg_ok "Setup Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: tteck (tteckster)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://www.zabbix.com/
|
# Source: https://www.zabbix.com/
|
||||||
|
|
||||||
@@ -14,8 +14,11 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Zabbix"
|
msg_info "Installing Zabbix"
|
||||||
cd /tmp
|
cd /tmp || exit
|
||||||
curl -fsSL "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb" -o $(basename "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")
|
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
|
||||||
|
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
|
||||||
|
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
|
||||||
|
-o /tmp/zabbix-release_latest+debian12_all.deb
|
||||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
|
|||||||
msg_ok "Installed PostgreSQL"
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
msg_info "Installing Zitadel"
|
msg_info "Installing Zitadel"
|
||||||
RELEASE=$(curl -fsSL https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz | tar -xz
|
curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
|
||||||
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
msg_ok "Installed Zitadel"
|
msg_ok "Installed Zitadel"
|
||||||
|
|
||||||
|
|||||||
@@ -94,12 +94,12 @@ msg_error() {
|
|||||||
# This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection
|
# This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection
|
||||||
setting_up_container() {
|
setting_up_container() {
|
||||||
msg_info "Setting up Container OS"
|
msg_info "Setting up Container OS"
|
||||||
while [ $i -gt 0 ]; do
|
while [ "$i" -gt 0 ]; do
|
||||||
if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then
|
if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
echo 1>&2 -en "${CROSS}${RD} No Network! "
|
echo 1>&2 -en "${CROSS}${RD} No Network! "
|
||||||
sleep $RETRY_EVERY
|
sleep "$RETRY_EVERY"
|
||||||
i=$((i - 1))
|
i=$((i - 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -194,6 +194,6 @@ customize() {
|
|||||||
msg_ok "Customized Container"
|
msg_ok "Customized Container"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
|
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
|
||||||
chmod +x /usr/bin/update
|
chmod +x /usr/bin/update
|
||||||
}
|
}
|
||||||
|
|||||||
170
misc/build.func
170
misc/build.func
@@ -5,7 +5,7 @@
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
variables() {
|
variables() {
|
||||||
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
|
NSAPP=$(echo "${APP,,}" | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
|
||||||
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
||||||
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
||||||
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||||
@@ -69,7 +69,7 @@ catch_errors() {
|
|||||||
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
||||||
error_handler() {
|
error_handler() {
|
||||||
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
source /dev/stdin <<<$(curl -fsSL 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="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
@@ -191,7 +191,7 @@ root_check() {
|
|||||||
|
|
||||||
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
|
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
|
||||||
pve_check() {
|
pve_check() {
|
||||||
if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[0-9]+)*"; then
|
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
|
||||||
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
|
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
|
||||||
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
|
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
|
||||||
echo -e "Exiting..."
|
echo -e "Exiting..."
|
||||||
@@ -307,7 +307,7 @@ get_header() {
|
|||||||
|
|
||||||
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
||||||
header_info() {
|
header_info() {
|
||||||
local app_name=$(echo ${APP,,} | tr -d ' ')
|
local app_name=$(echo "${APP,,}" | tr -d ' ')
|
||||||
local header_content
|
local header_content
|
||||||
|
|
||||||
# Download & save Header-File locally
|
# Download & save Header-File locally
|
||||||
@@ -411,128 +411,6 @@ exit_script() {
|
|||||||
# This function allows the user to configure advanced settings for the script.
|
# This function allows the user to configure advanced settings for the script.
|
||||||
advanced_settings() {
|
advanced_settings() {
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "Default is: ${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
|
||||||
if [ "$var_os" != "alpine" ]; then
|
|
||||||
var_default_os="${var_os}"
|
|
||||||
var_os=""
|
|
||||||
while [ -z "$var_os" ]; do
|
|
||||||
if [ "$var_default_os" == "debian" ]; then
|
|
||||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
|
||||||
"debian" "" ON \
|
|
||||||
"ubuntu" "" OFF \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_os" ]; then
|
|
||||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ "$var_default_os" == "ubuntu" ]; then
|
|
||||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
|
||||||
"debian" "" OFF \
|
|
||||||
"ubuntu" "" ON \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_os" ]; then
|
|
||||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$var_os" == "debian" ]; then
|
|
||||||
var_default_version="${var_version}"
|
|
||||||
var_version=""
|
|
||||||
while [ -z "$var_version" ]; do
|
|
||||||
if [ "$var_default_version" == "11" ]; then
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
|
||||||
"11" "Bullseye" ON \
|
|
||||||
"12" "Bookworm" OFF \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ "$var_default_version" == "12" ]; then
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
|
||||||
"11" "Bullseye" OFF \
|
|
||||||
"12" "Bookworm" ON \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$var_os" == "ubuntu" ]; then
|
|
||||||
var_default_version="${var_version}"
|
|
||||||
var_version=""
|
|
||||||
while [ -z "$var_version" ]; do
|
|
||||||
if [ "$var_default_version" == "20.04" ]; then
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
|
||||||
"20.04" "Focal" ON \
|
|
||||||
"22.04" "Jammy" OFF \
|
|
||||||
"24.04" "Noble" OFF \
|
|
||||||
"24.10" "Oracular" OFF \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
elif [ "$var_default_version" == "22.04" ]; then
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
|
||||||
"20.04" "Focal" OFF \
|
|
||||||
"22.04" "Jammy" ON \
|
|
||||||
"24.04" "Noble" OFF \
|
|
||||||
"24.10" "Oracular" OFF \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
elif [ "$var_default_version" == "24.04" ]; then
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
|
||||||
"20.04" "Focal" OFF \
|
|
||||||
"22.04" "Jammy" OFF \
|
|
||||||
"24.04" "Noble" ON \
|
|
||||||
"24.10" "Oracular" OFF \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
|
||||||
"20.04" "Focal" OFF \
|
|
||||||
"22.04" "Jammy" OFF \
|
|
||||||
"24.04" "Noble" OFF \
|
|
||||||
"24.10" "Oracular" ON \
|
|
||||||
3>&1 1>&2 2>&3); then
|
|
||||||
if [ -n "$var_version" ]; then
|
|
||||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit_script
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
# Setting Default Tag for Advanced Settings
|
# Setting Default Tag for Advanced Settings
|
||||||
TAGS="community-script;${var_tags:-}"
|
TAGS="community-script;${var_tags:-}"
|
||||||
CT_DEFAULT_TYPE="${CT_TYPE}"
|
CT_DEFAULT_TYPE="${CT_TYPE}"
|
||||||
@@ -548,6 +426,8 @@ advanced_settings() {
|
|||||||
if [ "$CT_TYPE" -eq 0 ]; then
|
if [ "$CT_TYPE" -eq 0 ]; then
|
||||||
CT_TYPE_DESC="Privileged"
|
CT_TYPE_DESC="Privileged"
|
||||||
fi
|
fi
|
||||||
|
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -564,6 +444,8 @@ advanced_settings() {
|
|||||||
if [ "$CT_TYPE" -eq 0 ]; then
|
if [ "$CT_TYPE" -eq 0 ]; then
|
||||||
CT_TYPE_DESC="Privileged"
|
CT_TYPE_DESC="Privileged"
|
||||||
fi
|
fi
|
||||||
|
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -603,7 +485,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
|
if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 "$NEXTID" --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$CT_ID" ]; then
|
if [ -z "$CT_ID" ]; then
|
||||||
CT_ID="$NEXTID"
|
CT_ID="$NEXTID"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||||
@@ -614,18 +496,18 @@ advanced_settings() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3); then
|
if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$CT_NAME" ]; then
|
if [ -z "$CT_NAME" ]; then
|
||||||
HN="$NSAPP"
|
HN="$NSAPP"
|
||||||
else
|
else
|
||||||
HN=$(echo ${CT_NAME,,} | tr -d ' ')
|
HN=$(echo "${CT_NAME,,}" | tr -d ' ')
|
||||||
fi
|
fi
|
||||||
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
|
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
|
||||||
else
|
else
|
||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3); then
|
if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 "$var_disk" --title "DISK SIZE" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$DISK_SIZE" ]; then
|
if [ -z "$DISK_SIZE" ]; then
|
||||||
DISK_SIZE="$var_disk"
|
DISK_SIZE="$var_disk"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
|
||||||
@@ -640,7 +522,7 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3); then
|
if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 "$var_cpu" --title "CORE COUNT" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$CORE_COUNT" ]; then
|
if [ -z "$CORE_COUNT" ]; then
|
||||||
CORE_COUNT="$var_cpu"
|
CORE_COUNT="$var_cpu"
|
||||||
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
|
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
|
||||||
@@ -651,7 +533,7 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3); then
|
if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 "$var_ram" --title "RAM" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$RAM_SIZE" ]; then
|
if [ -z "$RAM_SIZE" ]; then
|
||||||
RAM_SIZE="$var_ram"
|
RAM_SIZE="$var_ram"
|
||||||
echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
|
echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
|
||||||
@@ -731,7 +613,7 @@ advanced_settings() {
|
|||||||
echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
||||||
|
|
||||||
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MTU1 ]; then
|
if [ -z "$MTU1" ]; then
|
||||||
MTU1="Default"
|
MTU1="Default"
|
||||||
MTU=""
|
MTU=""
|
||||||
else
|
else
|
||||||
@@ -743,7 +625,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if SD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>&1 1>&2 2>&3); then
|
if SD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $SD ]; then
|
if [ -z "$SD" ]; then
|
||||||
SX=Host
|
SX=Host
|
||||||
SD=""
|
SD=""
|
||||||
else
|
else
|
||||||
@@ -756,7 +638,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if NX=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Server IP (leave blank for HOST)" 8 58 --title "DNS SERVER IP" 3>&1 1>&2 2>&3); then
|
if NX=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Server IP (leave blank for HOST)" 8 58 --title "DNS SERVER IP" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $NX ]; then
|
if [ -z "$NX" ]; then
|
||||||
NX=Host
|
NX=Host
|
||||||
NS=""
|
NS=""
|
||||||
else
|
else
|
||||||
@@ -768,7 +650,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MAC1 ]; then
|
if [ -z "$MAC1" ]; then
|
||||||
MAC1="Default"
|
MAC1="Default"
|
||||||
MAC=""
|
MAC=""
|
||||||
else
|
else
|
||||||
@@ -780,7 +662,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $VLAN1 ]; then
|
if [ -z "$VLAN1" ]; then
|
||||||
VLAN1="Default"
|
VLAN1="Default"
|
||||||
VLAN=""
|
VLAN=""
|
||||||
else
|
else
|
||||||
@@ -791,7 +673,7 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 ${TAGS} --title "Advanced Tags" 3>&1 1>&2 2>&3); then
|
if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 "${TAGS}" --title "Advanced Tags" 3>&1 1>&2 2>&3); then
|
||||||
if [ -n "${ADV_TAGS}" ]; then
|
if [ -n "${ADV_TAGS}" ]; then
|
||||||
ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]')
|
ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]')
|
||||||
TAGS="${ADV_TAGS}"
|
TAGS="${ADV_TAGS}"
|
||||||
@@ -1095,7 +977,7 @@ build_container() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
TEMP_DIR=$(mktemp -d)
|
TEMP_DIR=$(mktemp -d)
|
||||||
pushd $TEMP_DIR >/dev/null
|
pushd "$TEMP_DIR" >/dev/null
|
||||||
if [ "$var_os" == "alpine" ]; then
|
if [ "$var_os" == "alpine" ]; then
|
||||||
export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func)"
|
export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func)"
|
||||||
else
|
else
|
||||||
@@ -1135,7 +1017,7 @@ build_container() {
|
|||||||
|
|
||||||
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
||||||
if [ "$CT_TYPE" == "0" ]; then
|
if [ "$CT_TYPE" == "0" ]; then
|
||||||
cat <<EOF >>$LXC_CONFIG
|
cat <<EOF >>"$LXC_CONFIG"
|
||||||
# USB passthrough
|
# USB passthrough
|
||||||
lxc.cgroup2.devices.allow: a
|
lxc.cgroup2.devices.allow: a
|
||||||
lxc.cap.drop:
|
lxc.cap.drop:
|
||||||
@@ -1151,7 +1033,7 @@ EOF
|
|||||||
|
|
||||||
if [ "$CT_TYPE" == "0" ]; then
|
if [ "$CT_TYPE" == "0" ]; then
|
||||||
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
|
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
|
||||||
cat <<EOF >>$LXC_CONFIG
|
cat <<EOF >>"$LXC_CONFIG"
|
||||||
# VAAPI hardware transcoding
|
# VAAPI hardware transcoding
|
||||||
lxc.cgroup2.devices.allow: c 226:0 rwm
|
lxc.cgroup2.devices.allow: c 226:0 rwm
|
||||||
lxc.cgroup2.devices.allow: c 226:128 rwm
|
lxc.cgroup2.devices.allow: c 226:128 rwm
|
||||||
@@ -1165,13 +1047,13 @@ EOF
|
|||||||
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
|
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
|
||||||
if [[ -e "/dev/dri/renderD128" ]]; then
|
if [[ -e "/dev/dri/renderD128" ]]; then
|
||||||
if [[ -e "/dev/dri/card0" ]]; then
|
if [[ -e "/dev/dri/card0" ]]; then
|
||||||
cat <<EOF >>$LXC_CONFIG
|
cat <<EOF >>"$LXC_CONFIG"
|
||||||
# VAAPI hardware transcoding
|
# VAAPI hardware transcoding
|
||||||
dev0: /dev/dri/card0,gid=44
|
dev0: /dev/dri/card0,gid=44
|
||||||
dev1: /dev/dri/renderD128,gid=104
|
dev1: /dev/dri/renderD128,gid=104
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
cat <<EOF >>$LXC_CONFIG
|
cat <<EOF >>"$LXC_CONFIG"
|
||||||
# VAAPI hardware transcoding
|
# VAAPI hardware transcoding
|
||||||
dev0: /dev/dri/card1,gid=44
|
dev0: /dev/dri/card1,gid=44
|
||||||
dev1: /dev/dri/renderD128,gid=104
|
dev1: /dev/dri/renderD128,gid=104
|
||||||
@@ -1193,7 +1075,7 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
|||||||
EOF'
|
EOF'
|
||||||
pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
|
pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
|
||||||
fi
|
fi
|
||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/$var_install.sh)" || exit $?
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/"$var_install".sh)" || exit $?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -69,7 +69,7 @@ catch_errors() {
|
|||||||
# This function handles errors
|
# This function handles errors
|
||||||
error_handler() {
|
error_handler() {
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
source <(curl -fsSL 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="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
@@ -110,7 +110,7 @@ msg_info() {
|
|||||||
|
|
||||||
# This function displays a success message with a green color.
|
# This function displays a success message with a green color.
|
||||||
msg_ok() {
|
msg_ok() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR}${CM}${GN}${msg}${CL}"
|
echo -e "${BFR}${CM}${GN}${msg}${CL}"
|
||||||
@@ -118,7 +118,7 @@ msg_ok() {
|
|||||||
|
|
||||||
# This function displays a error message with a red color.
|
# This function displays a error message with a red color.
|
||||||
msg_error() {
|
msg_error() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
|
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
|
||||||
@@ -132,14 +132,14 @@ setting_up_container() {
|
|||||||
echo "LANG=${locale_line}" >/etc/default/locale
|
echo "LANG=${locale_line}" >/etc/default/locale
|
||||||
locale-gen >/dev/null
|
locale-gen >/dev/null
|
||||||
export LANG=${locale_line}
|
export LANG=${locale_line}
|
||||||
echo $tz >/etc/timezone
|
echo "$tz" >/etc/timezone
|
||||||
ln -sf /usr/share/zoneinfo/$tz /etc/localtime
|
ln -sf /usr/share/zoneinfo/"$tz" /etc/localtime
|
||||||
for ((i = RETRY_NUM; i > 0; i--)); do
|
for ((i = RETRY_NUM; i > 0; i--)); do
|
||||||
if [ "$(hostname -I)" != "" ]; then
|
if [ "$(hostname -I)" != "" ]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
echo 1>&2 -en "${CROSS}${RD} No Network! "
|
echo 1>&2 -en "${CROSS}${RD} No Network! "
|
||||||
sleep $RETRY_EVERY
|
sleep "$RETRY_EVERY"
|
||||||
done
|
done
|
||||||
if [ "$(hostname -I)" = "" ]; then
|
if [ "$(hostname -I)" = "" ]; then
|
||||||
echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
|
echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
|
||||||
@@ -265,7 +265,7 @@ EOF
|
|||||||
systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//')
|
systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//')
|
||||||
msg_ok "Customized Container"
|
msg_ok "Customized Container"
|
||||||
fi
|
fi
|
||||||
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
|
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
|
||||||
chmod +x /usr/bin/update
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then
|
if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ uninstall() {
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! pveversion | grep -Eq "pve-manager/(8\.[0-9])"; then
|
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
|
||||||
echo -e "This version of Proxmox Virtual Environment is not supported"
|
echo -e "This version of Proxmox Virtual Environment is not supported"
|
||||||
echo -e "Requires PVE Version 8.0 or higher"
|
echo -e "Requires PVE Version 8.0 or higher"
|
||||||
echo -e "Exiting..."
|
echo -e "Exiting..."
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user