mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 10:52:49 +00:00
Compare commits
53 Commits
2025-04-06
...
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 |
76
CHANGELOG.md
76
CHANGELOG.md
@@ -14,6 +14,82 @@ 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
|
## 2025-04-06
|
||||||
|
|
||||||
### 🚀 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"
|
||||||
@@ -84,6 +84,7 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
cd /opt/actualbudget || exit
|
cd /opt/actualbudget || exit
|
||||||
|
export NODE_OPTIONS="--max_old_space_size=3072"
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn run build:server
|
$STD yarn run build:server
|
||||||
#$STD yarn workspaces focus @actual-app/sync-server --production
|
#$STD yarn workspaces focus @actual-app/sync-server --production
|
||||||
|
|||||||
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 @@
|
|||||||
|
__ __
|
||||||
|
/ /______ __________ _/ /_____ ___ ____
|
||||||
|
/ //_/ __ `/ ___/ __ `/ //_/ _ \/ _ \/ __ \
|
||||||
|
/ ,< / /_/ / / / /_/ / ,< / __/ __/ /_/ /
|
||||||
|
/_/|_|\__,_/_/ \__,_/_/|_|\___/\___/ .___/
|
||||||
|
/_/
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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/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,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "Meilisearch-UI has early development status and can caused performance issues",
|
"text": "Meilisearch-UI has early development status and can cause performance issues",
|
||||||
"type": "warn"
|
"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,53 +1,288 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "karakeep-app/karakeep",
|
"name": "OliveTin/OliveTin",
|
||||||
"version": "ios/v1.6.9-1",
|
"version": "2025.4.8",
|
||||||
"date": "2025-04-06T10:51:57Z"
|
"date": "2025-04-08T22:02:50Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fallenbagel/jellyseerr",
|
"name": "coder/code-server",
|
||||||
"version": "preview-back-to-axios",
|
"version": "v4.99.1",
|
||||||
"date": "2025-04-06T10:39:06Z"
|
"date": "2025-04-08T21:35:21Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "TriliumNext/Notes",
|
"name": "semaphoreui/semaphore",
|
||||||
"version": "v0.92.6",
|
"version": "v2.13.12",
|
||||||
"date": "2025-04-06T10:38:54Z"
|
"date": "2025-04-08T20:54:58Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fhem/fhem-mirror",
|
"name": "fhem/fhem-mirror",
|
||||||
"version": "6.2",
|
"version": "6.2",
|
||||||
"date": "2025-04-06T10:31:42Z"
|
"date": "2025-04-08T20:30:27Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kimai/kimai",
|
"name": "runtipi/runtipi",
|
||||||
"version": "2.32.0",
|
"version": "nightly",
|
||||||
"date": "2025-04-06T09:43:51Z"
|
"date": "2025-04-06T15:58:08Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "semaphoreui/semaphore",
|
"name": "minio/minio",
|
||||||
"version": "v2.13.8-beta2",
|
"version": "RELEASE.2025-04-08T15-41-24Z",
|
||||||
"date": "2025-04-06T06:36:42Z"
|
"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",
|
||||||
|
"version": "v1.29.4",
|
||||||
|
"date": "2025-04-01T08:45:07Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jenkinsci/jenkins",
|
||||||
|
"version": "jenkins-2.505",
|
||||||
|
"date": "2025-04-08T15:46:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
|
"version": "v0.107.59",
|
||||||
|
"date": "2025-03-21T11:11:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "openobserve/openobserve",
|
||||||
|
"version": "v0.14.6-rc2",
|
||||||
|
"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.1733",
|
"version": "v0.22.1744",
|
||||||
"date": "2025-04-06T06:00:36Z"
|
"date": "2025-04-08T06:09:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "inventree/InvenTree",
|
"name": "StarFleetCPTN/GoMFT",
|
||||||
"version": "0.17.10",
|
"version": "v0.2.6",
|
||||||
"date": "2025-04-06T05:31:49Z"
|
"date": "2025-04-08T02:23:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pelican-dev/panel",
|
||||||
|
"version": "v1.0.0-beta19",
|
||||||
|
"date": "2025-04-07T23:06:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pelican-dev/wings",
|
||||||
|
"version": "v1.0.0-beta11",
|
||||||
|
"date": "2025-04-07T23:02:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Threadfin/Threadfin",
|
||||||
|
"version": "1.2.32",
|
||||||
|
"date": "2025-04-07T20:01:09Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NodeBB/NodeBB",
|
||||||
|
"version": "v4.2.0",
|
||||||
|
"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",
|
||||||
|
"version": "26.1.4",
|
||||||
|
"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",
|
||||||
|
"version": "8.0-rc1-int2",
|
||||||
|
"date": "2025-04-02T19:05:08Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zabbix/zabbix",
|
||||||
|
"version": "7.4.0beta1",
|
||||||
|
"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",
|
"name": "firefly-iii/firefly-iii",
|
||||||
"version": "v6.2.10",
|
"version": "v6.2.10",
|
||||||
"date": "2025-03-22T13:02:26Z"
|
"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",
|
"name": "ollama/ollama",
|
||||||
"version": "v0.6.5-rc0",
|
"version": "v0.6.5",
|
||||||
"date": "2025-04-03T23:57:36Z"
|
"date": "2025-04-06T00:15:39Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jellyfin/jellyfin",
|
"name": "jellyfin/jellyfin",
|
||||||
@@ -69,21 +304,6 @@
|
|||||||
"version": "v1.0.2",
|
"version": "v1.0.2",
|
||||||
"date": "2025-04-05T17:40:25Z"
|
"date": "2025-04-05T17:40:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "open-webui/open-webui",
|
|
||||||
"version": "v0.6.1",
|
|
||||||
"date": "2025-04-05T17:15:47Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.1.4",
|
|
||||||
"date": "2025-03-13T15:41:42Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "stonith404/pingvin-share",
|
|
||||||
"version": "v1.11.0",
|
|
||||||
"date": "2025-04-05T14:56:47Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "bastienwirtz/homer",
|
"name": "bastienwirtz/homer",
|
||||||
"version": "v25.04.1",
|
"version": "v25.04.1",
|
||||||
@@ -119,11 +339,6 @@
|
|||||||
"version": "debian/12.0.13",
|
"version": "debian/12.0.13",
|
||||||
"date": "2025-04-04T20:05:45Z"
|
"date": "2025-04-04T20:05:45Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.98.2",
|
|
||||||
"date": "2025-03-15T02:11:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "homarr-labs/homarr",
|
"name": "homarr-labs/homarr",
|
||||||
"version": "v1.14.0",
|
"version": "v1.14.0",
|
||||||
@@ -134,31 +349,16 @@
|
|||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"date": "2025-04-04T18:10:16Z"
|
"date": "2025-04-04T18:10:16Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "syncthing/syncthing",
|
|
||||||
"version": "v1.29.4",
|
|
||||||
"date": "2025-04-01T08:45:07Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "icereed/paperless-gpt",
|
"name": "icereed/paperless-gpt",
|
||||||
"version": "v0.14.4",
|
"version": "v0.14.4",
|
||||||
"date": "2025-04-04T14:18:53Z"
|
"date": "2025-04-04T14:18:53Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "nzbgetcom/nzbget",
|
|
||||||
"version": "v24.8",
|
|
||||||
"date": "2025-03-18T07:33:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "apache/tomcat",
|
"name": "apache/tomcat",
|
||||||
"version": "9.0.104",
|
"version": "9.0.104",
|
||||||
"date": "2025-04-04T12:58:11Z"
|
"date": "2025-04-04T12:58:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Dolibarr/dolibarr",
|
|
||||||
"version": "21.0.1",
|
|
||||||
"date": "2025-04-04T12:56:35Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "sabnzbd/sabnzbd",
|
"name": "sabnzbd/sabnzbd",
|
||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
@@ -169,41 +369,16 @@
|
|||||||
"version": "0.49.12",
|
"version": "0.49.12",
|
||||||
"date": "2025-04-04T07:31:08Z"
|
"date": "2025-04-04T07:31:08Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.1",
|
|
||||||
"date": "2025-01-01T16:15:52Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wazuh/wazuh",
|
|
||||||
"version": "coverity-w14-4.12.0",
|
|
||||||
"date": "2025-04-04T00:03:06Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "minio/minio",
|
|
||||||
"version": "RELEASE.2025-04-03T14-56-28Z",
|
|
||||||
"date": "2025-04-03T19:08:18Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "OctoPrint/OctoPrint",
|
"name": "OctoPrint/OctoPrint",
|
||||||
"version": "1.10.3",
|
"version": "1.10.3",
|
||||||
"date": "2024-11-05T09:20:50Z"
|
"date": "2024-11-05T09:20:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Graylog2/graylog2-server",
|
|
||||||
"version": "6.0.14",
|
|
||||||
"date": "2025-04-03T07:52:24Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jupyter/notebook",
|
"name": "jupyter/notebook",
|
||||||
"version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
|
"version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
|
||||||
"date": "2025-04-03T06:49:38Z"
|
"date": "2025-04-03T06:49:38Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mattermost/mattermost",
|
|
||||||
"version": "server/public/v0.1.11",
|
|
||||||
"date": "2025-03-28T14:04:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
"version": "v4.0.8",
|
"version": "v4.0.8",
|
||||||
@@ -214,11 +389,6 @@
|
|||||||
"version": "v5.35.1",
|
"version": "v5.35.1",
|
||||||
"date": "2025-04-02T21:49:00Z"
|
"date": "2025-04-02T21:49:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "redis/redis",
|
|
||||||
"version": "8.0-rc1-int2",
|
|
||||||
"date": "2025-04-02T19:05:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "zitadel/zitadel",
|
"name": "zitadel/zitadel",
|
||||||
"version": "v2.63.9",
|
"version": "v2.63.9",
|
||||||
@@ -234,31 +404,11 @@
|
|||||||
"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": "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",
|
||||||
@@ -269,26 +419,6 @@
|
|||||||
"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",
|
||||||
@@ -319,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",
|
||||||
@@ -334,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",
|
||||||
@@ -349,11 +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": "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",
|
||||||
@@ -379,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",
|
||||||
@@ -394,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",
|
||||||
@@ -429,11 +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": "TasmoAdmin/TasmoAdmin",
|
"name": "TasmoAdmin/TasmoAdmin",
|
||||||
"version": "v4.2.3",
|
"version": "v4.2.3",
|
||||||
@@ -449,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",
|
||||||
@@ -464,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",
|
||||||
@@ -499,41 +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": "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",
|
||||||
@@ -574,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",
|
||||||
@@ -589,21 +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": "requarks/wiki",
|
"name": "requarks/wiki",
|
||||||
"version": "v2.5.307",
|
"version": "v2.5.307",
|
||||||
@@ -644,11 +699,6 @@
|
|||||||
"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",
|
||||||
@@ -699,31 +749,11 @@
|
|||||||
"version": "v1.60.0",
|
"version": "v1.60.0",
|
||||||
"date": "2025-03-16T18:39:49Z"
|
"date": "2025-03-16T18:39:49Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"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": "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",
|
||||||
@@ -769,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",
|
||||||
@@ -879,11 +904,6 @@
|
|||||||
"version": "v1.1.05",
|
"version": "v1.1.05",
|
||||||
"date": "2025-02-24T11:53:12Z"
|
"date": "2025-02-24T11:53:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "TechnitiumSoftware/DnsServer",
|
|
||||||
"version": "v13.4.3",
|
|
||||||
"date": "2025-02-23T11:08:26Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "prometheus-pve/prometheus-pve-exporter",
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
"version": "v3.5.2",
|
"version": "v3.5.2",
|
||||||
@@ -969,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",
|
||||||
@@ -994,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",
|
||||||
@@ -1044,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",
|
||||||
@@ -1149,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",
|
||||||
|
|||||||
@@ -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,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}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ 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 || exit
|
cd /opt/actualbudget || exit
|
||||||
|
export NODE_OPTIONS="--max_old_space_size=3072"
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn run build:server
|
$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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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/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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
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.
@@ -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..."
|
||||||
@@ -2,45 +2,45 @@
|
|||||||
<div align="center"> To copy data from Home Assistant Container to Home Assistant Container </div>
|
<div align="center"> To copy data from Home Assistant Container to Home Assistant Container </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Home Assistant Container to Home Assistant Core </div>
|
<div align="center"> To copy data from Home Assistant Container to Home Assistant Core </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Home Assistant Container to Podman Home Assistant </div>
|
<div align="center"> To copy data from Home Assistant Container to Podman Home Assistant </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Podman Home Assistant to Home Assistant Container </div>
|
<div align="center"> To copy data from Podman Home Assistant to Home Assistant Container </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Home Assistant Core to Home Assistant Container </div>
|
<div align="center"> To copy data from Home Assistant Core to Home Assistant Container </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Home Assistant Core to Home Assistant Core </div>
|
<div align="center"> To copy data from Home Assistant Core to Home Assistant Core </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Plex to Plex </div>
|
<div align="center"> To copy data from Plex to Plex </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/plex-copy-data-plex.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Zigbee2MQTT to Zigbee2MQTT </div>
|
<div align="center"> To copy data from Zigbee2MQTT to Zigbee2MQTT </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/z2m-copy-data-z2m.sh)"
|
||||||
```
|
```
|
||||||
<div align="center"> To copy data from Zwavejs2MQTT to Zwave JS UI </div>
|
<div align="center"> To copy data from Zwavejs2MQTT to Zwave JS UI </div>
|
||||||
|
|
||||||
```
|
```
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)"
|
||||||
```
|
```
|
||||||
@@ -35,7 +35,7 @@ function error_exit() {
|
|||||||
local REASON="\e[97m${1:-$DEFAULT}\e[39m"
|
local REASON="\e[97m${1:-$DEFAULT}\e[39m"
|
||||||
local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE"
|
local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE"
|
||||||
msg "$FLAG $REASON"
|
msg "$FLAG $REASON"
|
||||||
exit $EXIT
|
exit "$EXIT"
|
||||||
}
|
}
|
||||||
function warn() {
|
function warn() {
|
||||||
local REASON="\e[97m$1\e[39m"
|
local REASON="\e[97m$1\e[39m"
|
||||||
@@ -52,13 +52,13 @@ function msg() {
|
|||||||
echo -e "$TEXT"
|
echo -e "$TEXT"
|
||||||
}
|
}
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
[ -d "${CTID_FROM_PATH:-}" ] && pct unmount $CTID_FROM
|
[ -d "${CTID_FROM_PATH:-}" ] && pct unmount "$CTID_FROM"
|
||||||
[ -d "${CTID_TO_PATH:-}" ] && pct unmount $CTID_TO
|
[ -d "${CTID_TO_PATH:-}" ] && pct unmount "$CTID_TO"
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
rm -rf $TEMP_DIR
|
rm -rf "$TEMP_DIR"
|
||||||
}
|
}
|
||||||
TEMP_DIR=$(mktemp -d)
|
TEMP_DIR=$(mktemp -d)
|
||||||
pushd $TEMP_DIR >/dev/null
|
pushd "$TEMP_DIR" >/dev/null
|
||||||
|
|
||||||
TITLE="Home Assistant LXC Data Copy"
|
TITLE="Home Assistant LXC Data Copy"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@@ -84,32 +84,32 @@ while [ -z "${CTID_TO:+x}" ]; do
|
|||||||
done
|
done
|
||||||
for i in ${!CTID_MENU[@]}; do
|
for i in ${!CTID_MENU[@]}; do
|
||||||
[ "${CTID_MENU[$i]}" == "$CTID_FROM" ] &&
|
[ "${CTID_MENU[$i]}" == "$CTID_FROM" ] &&
|
||||||
CTID_FROM_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<${CTID_MENU[$i + 1]})
|
CTID_FROM_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<"${CTID_MENU[$i + 1]}")
|
||||||
[ "${CTID_MENU[$i]}" == "$CTID_TO" ] &&
|
[ "${CTID_MENU[$i]}" == "$CTID_TO" ] &&
|
||||||
CTID_TO_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<${CTID_MENU[$i + 1]})
|
CTID_TO_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<"${CTID_MENU[$i + 1]}")
|
||||||
done
|
done
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \
|
whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \
|
||||||
"Are you sure you want to copy data between the following LXCs?
|
"Are you sure you want to copy data between the following LXCs?
|
||||||
$CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME})
|
$CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME})
|
||||||
Version: 2022.01.23" 13 50 || exit
|
Version: 2022.01.23" 13 50 || exit
|
||||||
info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'"
|
info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'"
|
||||||
if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then
|
if [ $(pct status "$CTID_TO" | sed 's/.* //') == 'running' ]; then
|
||||||
msg "Stopping '$CTID_TO'..."
|
msg "Stopping '$CTID_TO'..."
|
||||||
pct stop $CTID_TO
|
pct stop "$CTID_TO"
|
||||||
fi
|
fi
|
||||||
msg "Mounting Container Disks..."
|
msg "Mounting Container Disks..."
|
||||||
DOCKER_PATH=/var/lib/docker/volumes/hass_config/
|
DOCKER_PATH=/var/lib/docker/volumes/hass_config/
|
||||||
CTID_FROM_PATH=$(pct mount $CTID_FROM | sed -n "s/.*'\(.*\)'/\1/p") ||
|
CTID_FROM_PATH=$(pct mount "$CTID_FROM" | sed -n "s/.*'\(.*\)'/\1/p") ||
|
||||||
die "There was a problem mounting the root disk of LXC '${CTID_FROM}'."
|
die "There was a problem mounting the root disk of LXC '${CTID_FROM}'."
|
||||||
[ -d "${CTID_FROM_PATH}${DOCKER_PATH}" ] ||
|
[ -d "${CTID_FROM_PATH}${DOCKER_PATH}" ] ||
|
||||||
die "Home Assistant directories in '$CTID_FROM' not found."
|
die "Home Assistant directories in '$CTID_FROM' not found."
|
||||||
CTID_TO_PATH=$(pct mount $CTID_TO | sed -n "s/.*'\(.*\)'/\1/p") ||
|
CTID_TO_PATH=$(pct mount "$CTID_TO" | sed -n "s/.*'\(.*\)'/\1/p") ||
|
||||||
die "There was a problem mounting the root disk of LXC '${CTID_TO}'."
|
die "There was a problem mounting the root disk of LXC '${CTID_TO}'."
|
||||||
[ -d "${CTID_TO_PATH}${DOCKER_PATH}" ] ||
|
[ -d "${CTID_TO_PATH}${DOCKER_PATH}" ] ||
|
||||||
die "Home Assistant directories in '$CTID_TO' not found."
|
die "Home Assistant directories in '$CTID_TO' not found."
|
||||||
|
|
||||||
rm -rf ${CTID_TO_PATH}${DOCKER_PATH}
|
rm -rf "${CTID_TO_PATH}"${DOCKER_PATH}
|
||||||
mkdir ${CTID_TO_PATH}${DOCKER_PATH}
|
mkdir "${CTID_TO_PATH}"${DOCKER_PATH}
|
||||||
|
|
||||||
msg "Copying Data Between Containers..."
|
msg "Copying Data Between Containers..."
|
||||||
RSYNC_OPTIONS=(
|
RSYNC_OPTIONS=(
|
||||||
@@ -121,11 +121,11 @@ RSYNC_OPTIONS=(
|
|||||||
--info=progress2
|
--info=progress2
|
||||||
)
|
)
|
||||||
msg "<======== Docker Data ========>"
|
msg "<======== Docker Data ========>"
|
||||||
rsync ${RSYNC_OPTIONS[*]} ${CTID_FROM_PATH}${DOCKER_PATH} ${CTID_TO_PATH}${DOCKER_PATH}
|
rsync "${RSYNC_OPTIONS[*]}" "${CTID_FROM_PATH}"${DOCKER_PATH} "${CTID_TO_PATH}"${DOCKER_PATH}
|
||||||
echo -en "\e[1A\e[0K\e[1A\e[0K"
|
echo -en "\e[1A\e[0K\e[1A\e[0K"
|
||||||
|
|
||||||
info "Successfully Transferred Data."
|
info "Successfully Transferred Data."
|
||||||
|
|
||||||
# Use to copy all data from one Home Assistant LXC to another
|
# Use to copy all data from one Home Assistant LXC to another
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//home-assistant-container-copy-data-home-assistant-container.sh)"
|
||||||
@@ -124,4 +124,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Home Assistant Container LXC to a Home Assistant Core LXC
|
# Use to copy all data from a Home Assistant Container LXC to a Home Assistant Core LXC
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//home-assistant-container-copy-data-home-assistant-core.sh)"
|
||||||
@@ -129,4 +129,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC
|
# Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//home-assistant-container-copy-data-podman-home-assistant.sh)"
|
||||||
@@ -124,4 +124,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC
|
# Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//home-assistant-core-copy-data-home-assistant-container.sh)"
|
||||||
@@ -123,4 +123,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC
|
# Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//home-assistant-core-copy-data-home-assistant-core.sh)"
|
||||||
@@ -128,4 +128,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from one Plex Media Server LXC to another
|
# Use to copy all data from one Plex Media Server LXC to another
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//plex-copy-data-plex.sh)"
|
||||||
@@ -129,4 +129,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC.
|
# Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC.
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//podman-home-assistant-copy-data-home-assistant-container.sh)"
|
||||||
@@ -128,4 +128,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from one Zigbee2MQTT LXC to another
|
# Use to copy all data from one Zigbee2MQTT LXC to another
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//z2m-copy-data-z2m.sh)"
|
||||||
@@ -130,4 +130,4 @@ info "Successfully Transferred Data."
|
|||||||
|
|
||||||
# Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC
|
# Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC
|
||||||
# run from the Proxmox Shell
|
# run from the Proxmox Shell
|
||||||
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)"
|
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/mainmain/tools/copy-data//zwavejs2mqtt-copy-data-zwavejsui.sh)"
|
||||||
@@ -41,7 +41,7 @@ catch_errors() {
|
|||||||
|
|
||||||
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
||||||
error_handler() {
|
error_handler() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
@@ -84,7 +84,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}"
|
||||||
@@ -102,7 +102,7 @@ while true; do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! pveversion | grep -Eq "pve-manager/8\.[0-3](\.[0-9]+)*"; then
|
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
|
||||||
msg_error "This version of Proxmox Virtual Environment is not supported"
|
msg_error "This version of Proxmox Virtual Environment is not supported"
|
||||||
msg_error "⚠️ Requires Proxmox Virtual Environment Version 8.0 or later."
|
msg_error "⚠️ Requires Proxmox Virtual Environment Version 8.0 or later."
|
||||||
msg_error "Exiting..."
|
msg_error "Exiting..."
|
||||||
@@ -40,7 +40,7 @@ function clean_container() {
|
|||||||
header_info
|
header_info
|
||||||
name=$(pct exec "$container" hostname)
|
name=$(pct exec "$container" hostname)
|
||||||
echo -e "${BL}[Info]${GN} Cleaning ${name} ${CL} \n"
|
echo -e "${BL}[Info]${GN} Cleaning ${name} ${CL} \n"
|
||||||
pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update"
|
pct exec "$container" -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update"
|
||||||
}
|
}
|
||||||
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||||
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
||||||
@@ -56,18 +56,18 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
status=$(pct status $container)
|
status=$(pct status "$container")
|
||||||
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
|
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
|
||||||
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
||||||
echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n"
|
echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n"
|
||||||
pct start $container
|
pct start "$container"
|
||||||
echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n"
|
echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n"
|
||||||
sleep 5
|
sleep 5
|
||||||
clean_container $container
|
clean_container "$container"
|
||||||
echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n"
|
echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n"
|
||||||
pct shutdown $container &
|
pct shutdown "$container" &
|
||||||
elif [ "$status" == "status: running" ]; then
|
elif [ "$status" == "status: running" ]; then
|
||||||
clean_container $container
|
clean_container "$container"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user