mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
1 Commits
2025-10-28
...
deb13_k_to
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c59abf838 |
70
CHANGELOG.md
70
CHANGELOG.md
@@ -10,82 +10,12 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
## 2025-10-29
|
|
||||||
|
|
||||||
## 2025-10-28
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Update alpine-komodo.sh fixing missing pull images command [@glopes](https://github.com/glopes) ([#8689](https://github.com/community-scripts/ProxmoxVE/pull/8689))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Update SABnzbd. Include par2cmdline-turbo [@burgerga](https://github.com/burgerga) ([#8648](https://github.com/community-scripts/ProxmoxVE/pull/8648))
|
|
||||||
- jotty: Add more ENV VARS (disabled) [@vhsdream](https://github.com/vhsdream) ([#8688](https://github.com/community-scripts/ProxmoxVE/pull/8688))
|
|
||||||
- Bump bazarr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8677](https://github.com/community-scripts/ProxmoxVE/pull/8677))
|
|
||||||
- Update flaresolverr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8672](https://github.com/community-scripts/ProxmoxVE/pull/8672))
|
|
||||||
|
|
||||||
## 2025-10-27
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
|
|
||||||
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
|
|
||||||
- jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
|
|
||||||
|
|
||||||
## 2025-10-26
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
|
|
||||||
|
|
||||||
## 2025-10-25
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
|
|
||||||
|
|
||||||
## 2025-10-24
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
|
|
||||||
- Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
|
|
||||||
|
|
||||||
## 2025-10-23
|
## 2025-10-23
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
- Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
|
|
||||||
- Various Downgrades to Debian 12 (MySQL / OMW / Technitium) [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
|
|
||||||
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
|
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
- #### 🔧 Refactor
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
#!/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://garagehq.deuxfleurs.fr/
|
|
||||||
|
|
||||||
APP="Alpine-Garage"
|
|
||||||
var_tags="${var_tags:-alpine;object-storage}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-512}"
|
|
||||||
var_disk="${var_disk:-5}"
|
|
||||||
var_os="${var_os:-alpine}"
|
|
||||||
var_version="${var_version:-3.22}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
if [[ ! -f /usr/local/bin/garage ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
|
||||||
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
rc-service garage stop || true
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing Up Data"
|
|
||||||
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
|
|
||||||
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
|
|
||||||
msg_ok "Backed Up Data"
|
|
||||||
|
|
||||||
msg_info "Updating Garage"
|
|
||||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
|
||||||
chmod +x /usr/local/bin/garage
|
|
||||||
echo "${GITEA_RELEASE}" >~/.garage
|
|
||||||
msg_ok "Updated Garage"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
rc-service garage start || rc-service garage restart
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Update Successfully!"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
@@ -52,7 +52,6 @@ function update_script() {
|
|||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit
|
exit
|
||||||
|
|||||||
19
ct/bazarr.sh
19
ct/bazarr.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,28 +28,15 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
||||||
msg_info "Stopping Service"
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
systemctl stop bazarr
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
|
||||||
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
||||||
|
|
||||||
msg_info "Setup Bazarr"
|
msg_info "Setup Bazarr"
|
||||||
mkdir -p /var/lib/bazarr/
|
mkdir -p /var/lib/bazarr/
|
||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
if [[ ! -d /opt/bazarr/venv/ ]]; then
|
|
||||||
$STD uv venv /opt/bazarr/venv --python 3.12
|
|
||||||
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
$STD uv pip install -r /opt/bazarr/requirements.txt --system
|
||||||
msg_ok "Setup Bazarr"
|
msg_ok "Setup Bazarr"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start bazarr
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
#!/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: jdacode
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/comfyanonymous/ComfyUI
|
|
||||||
|
|
||||||
APP="ComfyUI"
|
|
||||||
var_tags="${var_tags:-ai}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-8192}"
|
|
||||||
var_disk="${var_disk:-25}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f /opt/${APP} ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_error "To update use the ${APP} Manager."
|
|
||||||
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}:8188${CL}"
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
#!/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: ekke85 | MickLesk
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Dispatcharr/Dispatcharr
|
|
||||||
|
|
||||||
APP="Dispatcharr"
|
|
||||||
var_tags="${var_tags:-media;arr}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d "/opt/dispatcharr" ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup_uv
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
|
|
||||||
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop dispatcharr-celery
|
|
||||||
systemctl stop dispatcharr-celerybeat
|
|
||||||
systemctl stop dispatcharr-daphne
|
|
||||||
systemctl stop dispatcharr
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
|
|
||||||
if [[ -f /opt/dispatcharr/.env ]]; then
|
|
||||||
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
|
|
||||||
cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
|
|
||||||
cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
|
|
||||||
cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
|
|
||||||
cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/dispatcharr/.env ]]; then
|
|
||||||
set -o allexport
|
|
||||||
source /opt/dispatcharr/.env
|
|
||||||
set +o allexport
|
|
||||||
if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
|
|
||||||
PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
|
|
||||||
msg_info "Database backup created"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
$STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
|
|
||||||
msg_ok "Backup created: $BACKUP_FILE"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
|
|
||||||
|
|
||||||
msg_info "Updating Dispatcharr Backend"
|
|
||||||
if [[ -f /tmp/dispatcharr.env.backup ]]; then
|
|
||||||
mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
|
|
||||||
fi
|
|
||||||
if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
|
|
||||||
mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
|
|
||||||
fi
|
|
||||||
if [[ -f /tmp/start-celery.sh.backup ]]; then
|
|
||||||
mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
|
|
||||||
fi
|
|
||||||
if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
|
|
||||||
mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
|
|
||||||
fi
|
|
||||||
if [[ -f /tmp/start-daphne.sh.backup ]]; then
|
|
||||||
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
rm -rf .venv
|
|
||||||
$STD uv venv
|
|
||||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
|
||||||
$STD uv pip install gunicorn gevent celery redis daphne
|
|
||||||
msg_ok "Updated Dispatcharr Backend"
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
|
||||||
cd /opt/dispatcharr/frontend
|
|
||||||
$STD npm install --legacy-peer-deps
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Running Django Migrations"
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
if [[ -f .env ]]; then
|
|
||||||
set -o allexport
|
|
||||||
source .env
|
|
||||||
set +o allexport
|
|
||||||
fi
|
|
||||||
$STD uv run python manage.py migrate --noinput
|
|
||||||
$STD uv run python manage.py collectstatic --noinput
|
|
||||||
msg_ok "Migrations Complete"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start dispatcharr
|
|
||||||
systemctl start dispatcharr-celery
|
|
||||||
systemctl start dispatcharr-celerybeat
|
|
||||||
systemctl start dispatcharr-daphne
|
|
||||||
msg_ok "Started Services"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f /tmp/dispatcharr_db_*.sql
|
|
||||||
msg_ok "Cleanup completed"
|
|
||||||
msg_ok "Update Successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,18 +28,13 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.3.25"; then
|
||||||
msg_error "Wrong Debian version detected!"
|
|
||||||
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
|
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop flaresolverr
|
systemctl stop flaresolverr
|
||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
rm -rf /opt/flaresolverr
|
rm -rf /opt/flaresolverr
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start flaresolverr
|
systemctl start flaresolverr
|
||||||
|
|||||||
64
ct/garage.sh
64
ct/garage.sh
@@ -1,64 +0,0 @@
|
|||||||
#!/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://garagehq.deuxfleurs.fr/
|
|
||||||
|
|
||||||
APP="Garage"
|
|
||||||
var_tags="${var_tags:-object-storage}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-5}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /usr/local/bin/garage ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
|
||||||
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop garage
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing Up Data"
|
|
||||||
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
|
|
||||||
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
|
|
||||||
msg_ok "Backed Up Data"
|
|
||||||
|
|
||||||
msg_info "Updating Garage"
|
|
||||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
|
||||||
chmod +x /usr/local/bin/garage
|
|
||||||
echo "${GITEA_RELEASE}" >~/.garage
|
|
||||||
msg_ok "Updated Garage"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start garage
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Update Successfully!"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __ _ ______
|
|
||||||
/ | / /___ (_)___ ___ / ____/___ __________ _____ ____
|
|
||||||
/ /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
|
|
||||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / / / /_/ / /_/ / __/
|
|
||||||
/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/_/ \__,_/\__, /\___/
|
|
||||||
/_/ /____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
______ ____ __ ______
|
|
||||||
/ ____/___ ____ ___ / __/_ __/ / / / _/
|
|
||||||
/ / / __ \/ __ `__ \/ /_/ / / / / / // /
|
|
||||||
/ /___/ /_/ / / / / / / __/ /_/ / /_/ // /
|
|
||||||
\____/\____/_/ /_/ /_/_/ \__, /\____/___/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ _ __ __
|
|
||||||
/ __ \(_)________ ____ _/ /______/ /_ ____ ___________
|
|
||||||
/ / / / / ___/ __ \/ __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
|
|
||||||
/ /_/ / (__ ) /_/ / /_/ / /_/ /__/ / / / /_/ / / / /
|
|
||||||
/_____/_/____/ .___/\__,_/\__/\___/_/ /_/\__,_/_/ /_/
|
|
||||||
/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
______
|
|
||||||
/ ____/___ __________ _____ ____
|
|
||||||
/ / __/ __ `/ ___/ __ `/ __ `/ _ \
|
|
||||||
/ /_/ / /_/ / / / /_/ / /_/ / __/
|
|
||||||
\____/\__,_/_/ \__,_/\__, /\___/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __ __ __ ___
|
|
||||||
/ __ \____ _/ /______/ /_ / |/ /___ ____
|
|
||||||
/ /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
|
|
||||||
/ ____/ /_/ / /_/ /__/ / / / / / / /_/ / / / /
|
|
||||||
/_/ \__,_/\__/\___/_/ /_/_/ /_/\____/_/ /_/
|
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,8 +28,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD apt-get update
|
$STD apt update
|
||||||
$STD apt-get -y upgrade
|
$STD apt -y upgrade
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -29,11 +29,10 @@ function update_script() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating LXC"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_disk="${var_disk:-2}"
|
|||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -28,24 +28,24 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
|
||||||
if [ ! -f /opt/.env ]; then
|
if [ ! -f /opt/.env ]; then
|
||||||
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
|
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
|
||||||
cat <<EOF >/opt/.env
|
cat <<EOF >/opt/.env
|
||||||
DisableRootWarning=true
|
DisableRootWarning=true
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop jackett
|
systemctl stop jackett
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
rm -rf /opt/Jackett
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
|
||||||
fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start jackett
|
systemctl start jackett
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ function update_script() {
|
|||||||
|
|
||||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||||
msg_info "Updating Intel Dependencies"
|
msg_info "Updating Intel Dependencies"
|
||||||
rm .intel-*
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -27,10 +27,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP LXC"
|
|
||||||
$STD apt-get update
|
JAVA_VERSION="21" setup_java
|
||||||
$STD apt-get -y upgrade
|
|
||||||
msg_ok "Updated $APP LXC"
|
msg_info "Updating Jenkings"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated Jenkins"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-20}"
|
var_disk="${var_disk:-20}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -35,19 +35,18 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
|
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Joplin-Server"
|
||||||
cd /opt/joplin-server
|
cd /opt/joplin-server
|
||||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||||
$STD yarn config set --home enableTelemetry 0
|
$STD yarn config set --home enableTelemetry 0
|
||||||
export BUILD_SEQUENCIAL=1
|
export BUILD_SEQUENCIAL=1
|
||||||
$STD yarn install --inline-builds
|
$STD yarn install --inline-builds
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated Joplin-Server"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start joplin-server
|
systemctl start joplin-server
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated Successfully!"
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-256}"
|
var_ram="${var_ram:-256}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -32,9 +32,9 @@ function update_script() {
|
|||||||
setup_uv
|
setup_uv
|
||||||
|
|
||||||
if check_for_gh_release "kapowarr" "Casvt/Kapowarr"; then
|
if check_for_gh_release "kapowarr" "Casvt/Kapowarr"; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping Service"
|
||||||
systemctl stop kapowarr
|
systemctl stop kapowarr
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
mv /opt/kapowarr/db /opt/
|
mv /opt/kapowarr/db /opt/
|
||||||
@@ -42,14 +42,14 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr"
|
fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr"
|
||||||
|
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating Kapowarr"
|
||||||
mv /opt/db /opt/kapowarr
|
mv /opt/db /opt/kapowarr
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated Kapowarr"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting Service"
|
||||||
systemctl start kapowarr
|
systemctl start kapowarr
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started Service"
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -38,14 +38,11 @@ function update_script() {
|
|||||||
msg_ok "Updated yt-dlp"
|
msg_ok "Updated yt-dlp"
|
||||||
|
|
||||||
msg_info "Prepare update"
|
msg_info "Prepare update"
|
||||||
if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
|
$STD apt install -y graphicsmagick ghostscript
|
||||||
$STD apt-get install -y graphicsmagick ghostscript
|
|
||||||
fi
|
|
||||||
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
||||||
mkdir -p /etc/karakeep
|
mkdir -p /etc/karakeep
|
||||||
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/karakeep
|
|
||||||
msg_ok "Update prepared"
|
msg_ok "Update prepared"
|
||||||
|
|
||||||
if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
|
if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
|
||||||
@@ -65,7 +62,7 @@ function update_script() {
|
|||||||
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
|
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Karakeep"
|
||||||
corepack enable
|
corepack enable
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
|
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
|
||||||
@@ -86,17 +83,18 @@ function update_script() {
|
|||||||
$STD pnpm migrate
|
$STD pnpm migrate
|
||||||
$STD pnpm store prune
|
$STD pnpm store prune
|
||||||
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE}/" /etc/karakeep/karakeep.env
|
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE}/" /etc/karakeep/karakeep.env
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated Karakeep"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start karakeep-browser karakeep-workers karakeep-web
|
systemctl start karakeep-browser karakeep-workers karakeep-web
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get autoremove -y
|
$STD apt autoremove -y
|
||||||
$STD apt-get autoclean -y
|
$STD apt autoclean -y
|
||||||
|
$STD apt clean -y
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
10
ct/kasm.sh
10
ct/kasm.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-8192}"
|
var_ram="${var_ram:-8192}"
|
||||||
var_disk="${var_disk:-30}"
|
var_disk="${var_disk:-30}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
var_fuse="${var_fuse:-yes}"
|
var_fuse="${var_fuse:-yes}"
|
||||||
var_tun="${var_tun:-yes}"
|
var_tun="${var_tun:-yes}"
|
||||||
@@ -29,10 +29,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating LXC"
|
||||||
$STD apt-get update
|
$STD apt update
|
||||||
$STD apt-get -y upgrade
|
$STD apt -y upgrade
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated LXC"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,9 +28,9 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then
|
if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then
|
||||||
msg_info "Stopping Keycloak"
|
msg_info "Stopping Service"
|
||||||
systemctl stop keycloak
|
systemctl stop keycloak
|
||||||
msg_ok "Stopped Keycloak"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating packages"
|
msg_info "Updating packages"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
@@ -44,16 +44,16 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Keycloak"
|
||||||
cd /opt
|
cd /opt
|
||||||
cp -a keycloak.old/conf/. keycloak/conf/
|
cp -a keycloak.old/conf/. keycloak/conf/
|
||||||
cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
|
cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
|
||||||
cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
|
cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
|
||||||
msg_ok "Updated ${APP} LXC"
|
msg_ok "Updated Keycloak"
|
||||||
|
|
||||||
msg_info "Restarting Keycloak"
|
msg_info "Restarting Service"
|
||||||
systemctl restart keycloak
|
systemctl restart keycloak
|
||||||
msg_ok "Restarted Keycloak"
|
msg_ok "Restarted Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf keycloak.old
|
rm -rf keycloak.old
|
||||||
|
|||||||
40
ct/kimai.sh
40
ct/kimai.sh
@@ -30,25 +30,13 @@ 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 composer \
|
|
||||||
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
|
||||||
libapache2-mod-php8.4
|
|
||||||
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
|
if check_for_gh_release "koillection" "benjaminjonard/koillection"; then
|
||||||
BACKUP_DIR="/opt/kimai_backup"
|
BACKUP_DIR="/opt/kimai_backup"
|
||||||
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping Apache2"
|
msg_info "Stopping Apache2"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Apache2"
|
msg_ok "Stopped Apache2"
|
||||||
@@ -60,15 +48,9 @@ function update_script() {
|
|||||||
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
|
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
|
||||||
msg_ok "Backup completed"
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
fetch_and_deploy_gh_release "kimai" "kimai/kimai"
|
||||||
trap "echo Unable to download release file for version ${RELEASE}; try again later" ERR
|
|
||||||
set -e
|
msg_info "Updating 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")
|
|
||||||
$STD unzip "${RELEASE}".zip
|
|
||||||
set +e
|
|
||||||
trap - ERR
|
|
||||||
rm -rf /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/
|
||||||
@@ -76,8 +58,7 @@ function update_script() {
|
|||||||
cd /opt/kimai
|
cd /opt/kimai
|
||||||
$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
|
msg_ok "Updated Kimai"
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Apache2"
|
msg_info "Starting Apache2"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
@@ -92,12 +73,9 @@ 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 "$BACKUP_DIR"
|
rm -rf "$BACKUP_DIR"
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -38,7 +38,7 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
|
fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Koillection"
|
||||||
cd /opt/koillection
|
cd /opt/koillection
|
||||||
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
||||||
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
||||||
@@ -50,7 +50,7 @@ function update_script() {
|
|||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
chown -R www-data:www-data /opt/koillection/public/uploads
|
chown -R www-data:www-data /opt/koillection/public/uploads
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated Koillection"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
@@ -59,7 +59,7 @@ function update_script() {
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -r /opt/koillection-backup
|
rm -r /opt/koillection-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
cp /opt/kometa/config/config.yml /opt
|
cp /opt/kometa/config/config.yml /opt
|
||||||
msg_ok "Backup completed"
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
||||||
|
|
||||||
msg_info "Updating Kometa"
|
msg_info "Updating Kometa"
|
||||||
@@ -49,7 +49,7 @@ function update_script() {
|
|||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start kometa
|
systemctl start kometa
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start komga
|
systemctl start komga
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating Komodo"
|
||||||
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
||||||
if [[ -z "$COMPOSE_FILE" ]]; then
|
if [[ -z "$COMPOSE_FILE" ]]; then
|
||||||
msg_error "No valid compose file found in /opt/komodo!"
|
msg_error "No valid compose file found in /opt/komodo!"
|
||||||
@@ -61,7 +61,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated Komodo"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start ipfs
|
systemctl start ipfs
|
||||||
msg_ok "Service started"
|
msg_ok "Service started"
|
||||||
msg_ok "Updated successfully"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
14
ct/mylar3.sh
14
ct/mylar3.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 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
|
# Author: davalanche
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/mylar3/mylar3
|
# Source: https://github.com/mylar3/mylar3
|
||||||
|
|
||||||
@@ -25,10 +25,16 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
|
||||||
if check_for_gh_release "mylar3" "mylar3/mylar3"; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
|
rm -rf /opt/mylar3/* /opt/mylar3/.*
|
||||||
|
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
|
||||||
systemctl restart mylar3
|
systemctl restart mylar3
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
#!/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: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/PatchMon/PatchMon
|
|
||||||
|
|
||||||
APP="PatchMon"
|
|
||||||
var_tags="${var_tags:-monitoring}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d "/opt/patchmon" ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
if check_for_gh_release "PatchMon" "PatchMon/PatchMon"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop patchmon-server
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
cp /opt/patchmon/backend/.env /opt/backend.env
|
|
||||||
cp /opt/patchmon/frontend/.env /opt/frontend.env
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
|
|
||||||
|
|
||||||
msg_info "Updating PatchMon"
|
|
||||||
cd /opt/patchmon
|
|
||||||
export NODE_ENV=production
|
|
||||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
cd /opt/patchmon/backend
|
|
||||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
cd /opt/patchmon/frontend
|
|
||||||
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
$STD npm run build
|
|
||||||
cd /opt/patchmon/backend
|
|
||||||
mv /opt/backend.env /opt/patchmon/backend/.env
|
|
||||||
mv /opt/frontend.env /opt/patchmon/frontend/.env
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
$STD npx prisma generate
|
|
||||||
msg_ok "Updated PatchMon"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start patchmon-server
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated Successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -27,13 +27,12 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating PiHole"
|
msg_info "Updating ${APP}"
|
||||||
set +e
|
set +e
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
/usr/local/bin/pihole -up
|
/usr/local/bin/pihole -up
|
||||||
msg_ok "Updated PiHole"
|
msg_ok "Updated ${APP}"
|
||||||
msg_ok "Updated Successfully!"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,8 +66,6 @@ function update_script() {
|
|||||||
$STD unzip "$brwsr_tmp"
|
$STD unzip "$brwsr_tmp"
|
||||||
mv browserless-"$TAG"/ /opt/browserless
|
mv browserless-"$TAG"/ /opt/browserless
|
||||||
cd /opt/browserless
|
cd /opt/browserless
|
||||||
$STD npm install typescript
|
|
||||||
$STD npm install esbuild
|
|
||||||
$STD npm install
|
$STD npm install
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
||||||
|
|||||||
@@ -24,21 +24,24 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if par2 --version | grep -q "par2cmdline-turbo"; then
|
|
||||||
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d /opt/sabnzbd ]]; then
|
if [[ ! -d /opt/sabnzbd ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "sabnzbd-org" "sabnzbd/sabnzbd"; then
|
setup_uv
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ -f /opt/${APP}_version.txt ]] && [[ "${RELEASE}" == "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
setup_uv
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
systemctl stop sabnzbd
|
systemctl stop sabnzbd
|
||||||
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
||||||
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
|
||||||
|
tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
|
||||||
|
rm -f "$temp_file"
|
||||||
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
||||||
msg_info "Migrating SABnzbd to uv virtual environment"
|
msg_info "Migrating SABnzbd to uv virtual environment"
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
$STD uv venv /opt/sabnzbd/venv
|
||||||
@@ -52,10 +55,9 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
$STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
|
||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
systemctl start sabnzbd
|
systemctl start sabnzbd
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://docs.bunkerweb.io/latest/",
|
"documentation": "https://docs.bunkerweb.io/latest/",
|
||||||
"website": "https://www.bunkerweb.io/",
|
"website": "https://www.bunkerweb.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
|
||||||
"config_path": "/etc/bunkerweb/variables.env",
|
"config_path": "/opt/bunkerweb/variables.env",
|
||||||
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
|
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ComfyUI",
|
|
||||||
"slug": "comfyui",
|
|
||||||
"categories": [
|
|
||||||
20
|
|
||||||
],
|
|
||||||
"date_created": "2025-10-26",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"config_path": "/opt",
|
|
||||||
"interface_port": 8188,
|
|
||||||
"documentation": "https://github.com/comfyanonymous/ComfyUI",
|
|
||||||
"website": "https://www.comfy.org/",
|
|
||||||
"logo": "https://framerusercontent.com/images/3cNQMWKzIhIrQ5KErBm7dSmbd2w.png",
|
|
||||||
"description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/comfyui.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 4,
|
|
||||||
"ram": 8192,
|
|
||||||
"hdd": 25,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Application takes long time to install. Please be patient!",
|
|
||||||
"type": "warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Please check that you have installed the drivers for your GPU.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Dispatcharr",
|
|
||||||
"slug": "dispatcharr",
|
|
||||||
"categories": [
|
|
||||||
14
|
|
||||||
],
|
|
||||||
"date_created": "2025-10-27",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 9191,
|
|
||||||
"documentation": "https://dispatcharr.github.io/Dispatcharr-Docs/",
|
|
||||||
"website": "https://github.com/Dispatcharr/Dispatcharr",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dispatcharr.webp",
|
|
||||||
"config_path": "/opt/dispatcharr/.env",
|
|
||||||
"description": "Dispatcharr is an open-source powerhouse for managing IPTV streams and EPG data with elegance and control. Born from necessity and built with passion, it started as a personal project by OkinawaBoss and evolved with contributions from legends like dekzter, SergeantPanda and Bucatini.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/dispatcharr.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -31,5 +31,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Flaresolverr is pinned to Version 3.3.25 because they add an breaking python package which doesn't work with debian 12.`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Garage",
|
|
||||||
"slug": "garage",
|
|
||||||
"categories": [
|
|
||||||
8
|
|
||||||
],
|
|
||||||
"date_created": "2025-10-27",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3900,
|
|
||||||
"documentation": "https://garagehq.deuxfleurs.fr/documentation/quick-start/",
|
|
||||||
"website": "https://garagehq.deuxfleurs.fr/",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garage.webp",
|
|
||||||
"config_path": "/etc/garage.toml",
|
|
||||||
"description": "Garage is a lightweight, self-hosted, S3-compatible object storage service built for distributed environments. It is designed to be simple, efficient, and easy to deploy across multiple nodes.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/garage.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 1024,
|
|
||||||
"hdd": 5,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "alpine",
|
|
||||||
"script": "ct/alpine-garage.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 512,
|
|
||||||
"hdd": 5,
|
|
||||||
"os": "alpine",
|
|
||||||
"version": "3.22"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "The Garage configuration file is located at `/etc/garage.toml`. You can edit RPC and API bindings, tokens, and data directories there.",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Admin API runs by default on port `3903`, S3 API on port `3900`, Web UI on `3902`. Adjust firewall rules accordingly.",
|
|
||||||
"type": "warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "To view your generated tokens and RPC secret, check `~/garage.creds` after installation.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
|
"documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
|
||||||
"config_path": "/opt/guardian/.env",
|
"config_path": "/opt/guardian/.env",
|
||||||
"website": "https://github.com/HydroshieldMKII/Guardian",
|
"website": "https://github.com/HydroshieldMKII/Guardian",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp",
|
"logo": null,
|
||||||
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
|
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "PatchMon",
|
|
||||||
"slug": "patchmon",
|
|
||||||
"categories": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"date_created": "2025-10-25",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3399,
|
|
||||||
"documentation": "https://docs.patchmon.net",
|
|
||||||
"website": "https://patchmon.net",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/patchmon.webp",
|
|
||||||
"config_path": "/opt/patchmon/backend/.env, /opt/patchmon/frontend/.env",
|
|
||||||
"description": "Monitor Linux patches across all your hosts with real-time visibility, security update tracking, and comprehensive package management.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/patchmon.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 4,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -35,10 +35,6 @@
|
|||||||
{
|
{
|
||||||
"text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
|
"text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Directory `/opt/urbackup/backups` is set as initial backup path. Change it to your liking",
|
|
||||||
"type": "info"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,84 +0,0 @@
|
|||||||
#!/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://garagehq.deuxfleurs.fr/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apk add --no-cache openssl
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
|
||||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
|
||||||
chmod +x /usr/local/bin/garage
|
|
||||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
|
|
||||||
mkdir -p /etc/garage
|
|
||||||
RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64)
|
|
||||||
ADMIN_TOKEN=$(openssl rand -base64 32)
|
|
||||||
METRICS_TOKEN=$(openssl rand -base64 32)
|
|
||||||
{
|
|
||||||
echo "Garage Tokens and Secrets"
|
|
||||||
echo "RPC Secret: $RPC_SECRET"
|
|
||||||
echo "Admin Token: $ADMIN_TOKEN"
|
|
||||||
echo "Metrics Token: $METRICS_TOKEN"
|
|
||||||
} >~/garage.creds
|
|
||||||
echo $GITEA_RELEASE >>~/.garage
|
|
||||||
cat <<EOF >/etc/garage.toml
|
|
||||||
metadata_dir = "/var/lib/garage/meta"
|
|
||||||
data_dir = "/var/lib/garage/data"
|
|
||||||
db_engine = "sqlite"
|
|
||||||
replication_factor = 1
|
|
||||||
|
|
||||||
rpc_bind_addr = "0.0.0.0:3901"
|
|
||||||
rpc_public_addr = "127.0.0.1:3901"
|
|
||||||
rpc_secret = "${RPC_SECRET}"
|
|
||||||
|
|
||||||
[s3_api]
|
|
||||||
s3_region = "garage"
|
|
||||||
api_bind_addr = "0.0.0.0:3900"
|
|
||||||
root_domain = ".s3.garage"
|
|
||||||
|
|
||||||
[s3_web]
|
|
||||||
bind_addr = "0.0.0.0:3902"
|
|
||||||
root_domain = ".web.garage"
|
|
||||||
index = "index.html"
|
|
||||||
|
|
||||||
[k2v_api]
|
|
||||||
api_bind_addr = "0.0.0.0:3904"
|
|
||||||
|
|
||||||
[admin]
|
|
||||||
api_bind_addr = "0.0.0.0:3903"
|
|
||||||
admin_token = "${ADMIN_TOKEN}"
|
|
||||||
metrics_token = "${METRICS_TOKEN}"
|
|
||||||
EOF
|
|
||||||
msg_ok "Configured Garage"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<'EOF' >/etc/init.d/garage
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
name="Garage Object Storage"
|
|
||||||
command="/usr/local/bin/garage"
|
|
||||||
command_args="server"
|
|
||||||
command_background="yes"
|
|
||||||
pidfile="/run/garage.pid"
|
|
||||||
depend() {
|
|
||||||
need net
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x /etc/init.d/garage
|
|
||||||
$STD rc-update add garage default
|
|
||||||
$STD rc-service garage restart || rc-service garage start
|
|
||||||
msg_ok "Service active"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
@@ -13,15 +13,20 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
msg_info "Setup Python3"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-dev
|
||||||
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
||||||
|
|
||||||
msg_info "Installing Bazarr"
|
msg_info "Installing Bazarr"
|
||||||
mkdir -p /var/lib/bazarr/
|
mkdir -p /var/lib/bazarr/
|
||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv venv /opt/bazarr/venv --python 3.12
|
$STD uv pip install -r /opt/bazarr/requirements.txt --system
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
|
||||||
msg_ok "Installed Bazarr"
|
msg_ok "Installed Bazarr"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -36,7 +41,7 @@ UMask=0002
|
|||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py
|
ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py
|
||||||
KillSignal=SIGINT
|
KillSignal=SIGINT
|
||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
SyslogIdentifier=bazarr
|
SyslogIdentifier=bazarr
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: jdacode
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/comfyanonymous/ComfyUI
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "${TAB3}Choose the GPU type for ComfyUI:"
|
|
||||||
echo "${TAB3}[1]-None [2]-NVIDIA [3]-AMD [4]-Intel"
|
|
||||||
read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice
|
|
||||||
gpu_choice=${gpu_choice:-1}
|
|
||||||
case "$gpu_choice" in
|
|
||||||
1) comfyui_gpu_type="none";;
|
|
||||||
2) comfyui_gpu_type="nvidia";;
|
|
||||||
3) comfyui_gpu_type="amd";;
|
|
||||||
4) comfyui_gpu_type="intel";;
|
|
||||||
*) comfyui_gpu_type="none"; echo "${TAB3}Invalid choice. Defaulting to ${comfyui_gpu_type}." ;;
|
|
||||||
esac
|
|
||||||
echo
|
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
|
|
||||||
|
|
||||||
msg_info "Python dependencies"
|
|
||||||
$STD uv venv "/opt/ComfyUI/venv"
|
|
||||||
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
|
|
||||||
$STD uv pip install \
|
|
||||||
torch \
|
|
||||||
torchvision \
|
|
||||||
torchaudio \
|
|
||||||
--extra-index-url "https://download.pytorch.org/whl/cu128" \
|
|
||||||
--python="/opt/ComfyUI/venv/bin/python"
|
|
||||||
elif [[ "${comfyui_gpu_type,,}" == "amd" ]]; then
|
|
||||||
$STD uv pip install \
|
|
||||||
torch \
|
|
||||||
torchvision \
|
|
||||||
torchaudio \
|
|
||||||
--index-url "https://download.pytorch.org/whl/rocm6.3" \
|
|
||||||
--python="/opt/ComfyUI/venv/bin/python"
|
|
||||||
elif [[ "${comfyui_gpu_type,,}" == "intel" ]]; then
|
|
||||||
$STD uv pip install \
|
|
||||||
torch \
|
|
||||||
torchvision \
|
|
||||||
torchaudio \
|
|
||||||
--index-url "https://download.pytorch.org/whl/xpu" \
|
|
||||||
--python="/opt/ComfyUI/venv/bin/python"
|
|
||||||
fi
|
|
||||||
$STD uv pip install -r "/opt/ComfyUI/requirements.txt" --python="/opt/ComfyUI/venv/bin/python"
|
|
||||||
msg_ok "Python dependencies"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/comfyui.service
|
|
||||||
[Unit]
|
|
||||||
Description=ComfyUI Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/ComfyUI
|
|
||||||
ExecStart=/opt/ComfyUI/venv/bin/python /opt/ComfyUI/main.py --listen --port 8188 --cpu
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now comfyui
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt -y autoremove
|
|
||||||
$STD apt -y autoclean
|
|
||||||
$STD apt -y clean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,263 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: ekke85
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Dispatcharr/Dispatcharr
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt install -y \
|
|
||||||
build-essential \
|
|
||||||
python3-dev \
|
|
||||||
libpq-dev \
|
|
||||||
nginx \
|
|
||||||
redis-server \
|
|
||||||
ffmpeg \
|
|
||||||
procps \
|
|
||||||
streamlink
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
setup_uv
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
PG_VERSION="16" setup_postgresql
|
|
||||||
|
|
||||||
msg_info "Creating PostgreSQL Database"
|
|
||||||
DB_NAME=dispatcharr_db
|
|
||||||
DB_USER=dispatcharr_usr
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|
||||||
{
|
|
||||||
echo "Dispatcharr Credentials"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo ""
|
|
||||||
} >>~/dispatcharr.creds
|
|
||||||
msg_ok "Created PostgreSQL Database"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
|
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies with uv"
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
$STD uv venv
|
|
||||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
|
||||||
$STD uv pip install gunicorn gevent celery redis daphne
|
|
||||||
msg_ok "Installed Python Dependencies"
|
|
||||||
|
|
||||||
msg_info "Configuring Dispatcharr"
|
|
||||||
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
|
||||||
export POSTGRES_DB=$DB_NAME
|
|
||||||
export POSTGRES_USER=$DB_USER
|
|
||||||
export POSTGRES_PASSWORD=$DB_PASS
|
|
||||||
export POSTGRES_HOST=localhost
|
|
||||||
$STD uv run python manage.py migrate --noinput
|
|
||||||
$STD uv run python manage.py collectstatic --noinput
|
|
||||||
cat <<EOF >/opt/dispatcharr/.env
|
|
||||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
|
|
||||||
POSTGRES_DB=$DB_NAME
|
|
||||||
POSTGRES_USER=$DB_USER
|
|
||||||
POSTGRES_PASSWORD=$DB_PASS
|
|
||||||
POSTGRES_HOST=localhost
|
|
||||||
CELERY_BROKER_URL=redis://localhost:6379/0
|
|
||||||
EOF
|
|
||||||
cd /opt/dispatcharr/frontend
|
|
||||||
$STD npm install --legacy-peer-deps
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Configured Dispatcharr"
|
|
||||||
|
|
||||||
msg_info "Configuring Nginx"
|
|
||||||
cat <<EOF >/etc/nginx/sites-available/dispatcharr.conf
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name _;
|
|
||||||
|
|
||||||
# Serve static assets with correct MIME types
|
|
||||||
location /assets/ {
|
|
||||||
alias /opt/dispatcharr/frontend/dist/assets/;
|
|
||||||
expires 30d;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
|
|
||||||
# Explicitly set MIME types for webpack-built assets
|
|
||||||
types {
|
|
||||||
text/javascript js;
|
|
||||||
text/css css;
|
|
||||||
image/png png;
|
|
||||||
image/svg+xml svg svgz;
|
|
||||||
font/woff2 woff2;
|
|
||||||
font/woff woff;
|
|
||||||
font/ttf ttf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
location /static/ {
|
|
||||||
alias /opt/dispatcharr/static/;
|
|
||||||
expires 30d;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location /media/ {
|
|
||||||
alias /opt/dispatcharr/media/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://127.0.0.1:8001;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade \$http_upgrade;
|
|
||||||
proxy_set_header Connection "Upgrade";
|
|
||||||
proxy_set_header Host \$host;
|
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
# All other requests proxy to Gunicorn
|
|
||||||
location / {
|
|
||||||
include proxy_params;
|
|
||||||
proxy_pass http://127.0.0.1:5656;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
|
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
systemctl restart nginx
|
|
||||||
msg_ok "Configured Nginx"
|
|
||||||
|
|
||||||
msg_info "Creating Services"
|
|
||||||
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
set -a
|
|
||||||
source .env
|
|
||||||
set +a
|
|
||||||
exec uv run gunicorn \\
|
|
||||||
--workers=4 \\
|
|
||||||
--worker-class=gevent \\
|
|
||||||
--timeout=300 \\
|
|
||||||
--bind 0.0.0.0:5656 \\
|
|
||||||
dispatcharr.wsgi:application
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/dispatcharr/start-gunicorn.sh
|
|
||||||
|
|
||||||
cat <<EOF >/opt/dispatcharr/start-celery.sh
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
set -a
|
|
||||||
source .env
|
|
||||||
set +a
|
|
||||||
exec uv run celery -A dispatcharr worker -l info -c 4
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/dispatcharr/start-celery.sh
|
|
||||||
|
|
||||||
cat <<EOF >/opt/dispatcharr/start-celerybeat.sh
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
set -a
|
|
||||||
source .env
|
|
||||||
set +a
|
|
||||||
exec uv run celery -A dispatcharr beat -l info
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/dispatcharr/start-celerybeat.sh
|
|
||||||
|
|
||||||
cat <<EOF >/opt/dispatcharr/start-daphne.sh
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
cd /opt/dispatcharr
|
|
||||||
set -a
|
|
||||||
source .env
|
|
||||||
set +a
|
|
||||||
exec uv run daphne -b 0.0.0.0 -p 8001 dispatcharr.asgi:application
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/dispatcharr/start-daphne.sh
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/dispatcharr.service
|
|
||||||
[Unit]
|
|
||||||
Description=Dispatcharr Web Server
|
|
||||||
After=network.target postgresql.service redis-server.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/dispatcharr
|
|
||||||
ExecStart=/opt/dispatcharr/start-gunicorn.sh
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10
|
|
||||||
User=root
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/dispatcharr-celery.service
|
|
||||||
[Unit]
|
|
||||||
Description=Dispatcharr Celery Worker
|
|
||||||
After=network.target redis-server.service
|
|
||||||
Requires=dispatcharr.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/dispatcharr
|
|
||||||
ExecStart=/opt/dispatcharr/start-celery.sh
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10
|
|
||||||
User=root
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/dispatcharr-celerybeat.service
|
|
||||||
[Unit]
|
|
||||||
Description=Dispatcharr Celery Beat Scheduler
|
|
||||||
After=network.target redis-server.service
|
|
||||||
Requires=dispatcharr.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/dispatcharr
|
|
||||||
ExecStart=/opt/dispatcharr/start-celerybeat.sh
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10
|
|
||||||
User=root
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/dispatcharr-daphne.service
|
|
||||||
[Unit]
|
|
||||||
Description=Dispatcharr WebSocket Server (Daphne)
|
|
||||||
After=network.target
|
|
||||||
Requires=dispatcharr.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/dispatcharr
|
|
||||||
ExecStart=/opt/dispatcharr/start-daphne.sh
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10
|
|
||||||
User=root
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now dispatcharr dispatcharr-celery dispatcharr-celerybeat dispatcharr-daphne
|
|
||||||
msg_ok "Created Services"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt -y autoremove
|
|
||||||
$STD apt -y autoclean
|
|
||||||
$STD apt -y clean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -21,18 +21,13 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Chrome"
|
msg_info "Installing Chrome"
|
||||||
setup_deb822_repo \
|
curl -fsSL "https://dl.google.com/linux/linux_signing_key.pub" | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg
|
||||||
"google-chrome" \
|
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >/etc/apt/sources.list.d/google-chrome.list
|
||||||
"https://dl.google.com/linux/linux_signing_key.pub" \
|
|
||||||
"https://dl.google.com/linux/chrome/deb/" \
|
|
||||||
"stable"
|
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y google-chrome-stable
|
$STD apt install -y google-chrome-stable
|
||||||
# remove google-chrome.list added by google-chrome-stable
|
|
||||||
rm /etc/apt/sources.list.d/google-chrome.list
|
|
||||||
msg_ok "Installed Chrome"
|
msg_ok "Installed Chrome"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
#!/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://garagehq.deuxfleurs.fr/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Setup Garage"
|
|
||||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
|
||||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
|
||||||
chmod +x /usr/local/bin/garage
|
|
||||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
|
|
||||||
mkdir -p /etc/garage
|
|
||||||
RPC_SECRET=$(openssl rand -hex 32)
|
|
||||||
ADMIN_TOKEN=$(openssl rand -base64 32)
|
|
||||||
METRICS_TOKEN=$(openssl rand -base64 32)
|
|
||||||
{
|
|
||||||
echo "Garage Tokens and Secrets"
|
|
||||||
echo "RPC Secret: $RPC_SECRET"
|
|
||||||
echo "Admin Token: $ADMIN_TOKEN"
|
|
||||||
echo "Metrics Token: $METRICS_TOKEN"
|
|
||||||
} >>~/garage.creds
|
|
||||||
echo $GITEA_RELEASE >>~/.garage
|
|
||||||
cat <<EOF >/etc/garage.toml
|
|
||||||
metadata_dir = "/var/lib/garage/meta"
|
|
||||||
data_dir = "/var/lib/garage/data"
|
|
||||||
db_engine = "sqlite"
|
|
||||||
replication_factor = 1
|
|
||||||
|
|
||||||
rpc_bind_addr = "[::]:3901"
|
|
||||||
rpc_public_addr = "127.0.0.1:3901"
|
|
||||||
rpc_secret = "${RPC_SECRET}"
|
|
||||||
|
|
||||||
[s3_api]
|
|
||||||
s3_region = "garage"
|
|
||||||
api_bind_addr = "[::]:3900"
|
|
||||||
root_domain = ".s3.garage.localhost"
|
|
||||||
|
|
||||||
[s3_web]
|
|
||||||
bind_addr = "[::]:3902"
|
|
||||||
root_domain = ".web.garage.localhost"
|
|
||||||
index = "index.html"
|
|
||||||
|
|
||||||
[k2v_api]
|
|
||||||
api_bind_addr = "[::]:3904"
|
|
||||||
|
|
||||||
[admin]
|
|
||||||
api_bind_addr = "[::]:3903"
|
|
||||||
admin_token = "${ADMIN_TOKEN}"
|
|
||||||
metrics_token = "${METRICS_TOKEN}"
|
|
||||||
EOF
|
|
||||||
msg_ok "Set up Garage"
|
|
||||||
|
|
||||||
|
|
||||||
msg_info "Creating service"
|
|
||||||
cat <<'EOF' >/etc/systemd/system/garage.service
|
|
||||||
[Unit]
|
|
||||||
Description=Garage Object Storage (Deuxfleurs)
|
|
||||||
After=network-online.target
|
|
||||||
Wants=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/usr/local/bin/garage -c /etc/garage.toml server
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/var/lib/garage
|
|
||||||
Environment=RUST_LOG=info
|
|
||||||
StandardOutput=append:/var/log/garage.log
|
|
||||||
StandardError=append:/var/log/garage.log
|
|
||||||
LimitNOFILE=65536
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
$STD systemctl enable -q --now garage
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt -y autoremove
|
|
||||||
$STD apt -y autoclean
|
|
||||||
$STD apt -y clean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -19,11 +19,9 @@ if ! grep -qEi 'ubuntu' /etc/os-release; then
|
|||||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
||||||
else
|
|
||||||
$STD apt -y install intel-opencl-icd
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
|
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
if [[ "$CTTYPE" == "0" ]]; then
|
||||||
chgrp video /dev/dri
|
chgrp video /dev/dri
|
||||||
chmod 755 /dev/dri
|
chmod 755 /dev/dri
|
||||||
|
|||||||
@@ -25,15 +25,7 @@ mkdir -p data/{users,checklists,notes}
|
|||||||
|
|
||||||
cat <<EOF >/opt/jotty/.env
|
cat <<EOF >/opt/jotty/.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
|
||||||
# --- Uncomment to enable
|
|
||||||
# HTTPS=true
|
# HTTPS=true
|
||||||
# SERVE_PUBLIC_IMAGES=yes
|
|
||||||
# SERVE_PUBLIC_FILES=yes
|
|
||||||
# SERVE_PUBLIC_VIDEOS=yes
|
|
||||||
# STOP_CHECK_UPDATES=yes
|
|
||||||
# --- For troubleshooting
|
|
||||||
# DEBUGGER=true
|
|
||||||
|
|
||||||
# --- SSO with OIDC (optional)
|
# --- SSO with OIDC (optional)
|
||||||
# SSO_MODE=oidc
|
# SSO_MODE=oidc
|
||||||
|
|||||||
@@ -14,40 +14,25 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt install -y \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
apache2 \
|
apache2 \
|
||||||
git \
|
git \
|
||||||
expect \
|
expect
|
||||||
composer \
|
|
||||||
lsb-release
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mysql
|
setup_mariadb
|
||||||
|
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
||||||
msg_info "Adding PHP8.4 Repository"
|
setup_composer
|
||||||
$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 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
|
|
||||||
msg_ok "Added PHP8.4 Repository"
|
|
||||||
|
|
||||||
msg_info "Installing PHP"
|
|
||||||
$STD apt-get remove -y php8.2*
|
|
||||||
$STD apt-get install -y \
|
|
||||||
php8.4 \
|
|
||||||
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
|
|
||||||
libapache2-mod-php8.4
|
|
||||||
msg_ok "Installed PHP"
|
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
DB_NAME=kimai_db
|
DB_NAME=kimai_db
|
||||||
DB_USER=kimai
|
DB_USER=kimai
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
MYSQL_VERSION=$(mysql --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
|
MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
$STD mariadb -e "CREATE DATABASE $DB_NAME;"
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
$STD mariadb -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
$STD mariadb -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
{
|
{
|
||||||
echo "Kimai-Credentials"
|
echo "Kimai-Credentials"
|
||||||
echo "Kimai Database User: $DB_USER"
|
echo "Kimai Database User: $DB_USER"
|
||||||
@@ -56,11 +41,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
|
|||||||
} >>~/kimai.creds
|
} >>~/kimai.creds
|
||||||
msg_ok "Set up database"
|
msg_ok "Set up database"
|
||||||
|
|
||||||
msg_info "Installing Kimai (Patience)"
|
fetch_and_deploy_gh_release "kimai" "kimai/kimai"
|
||||||
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 "${RELEASE}".zip
|
msg_info "Setup Kimai"
|
||||||
$STD unzip "${RELEASE}".zip
|
|
||||||
mv kimai-"${RELEASE}" /opt/kimai
|
|
||||||
cd /opt/kimai
|
cd /opt/kimai
|
||||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
@@ -92,8 +75,6 @@ admin_lte:
|
|||||||
options:
|
options:
|
||||||
default_avatar: build/apple-touch-icon.png
|
default_avatar: build/apple-touch-icon.png
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Installed Kimai"
|
msg_ok "Installed Kimai"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -131,6 +112,7 @@ customize
|
|||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "${RELEASE}".zip
|
rm -rf "${RELEASE}".zip
|
||||||
$STD apt-get -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
|
# Author: davalanche
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/mylar3/mylar3
|
# Source: https://github.com/mylar3/mylar3
|
||||||
|
|
||||||
@@ -14,6 +14,7 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y jq
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
||||||
Types: deb
|
Types: deb
|
||||||
URIs: http://deb.debian.org/debian
|
URIs: http://deb.debian.org/debian
|
||||||
@@ -22,17 +23,22 @@ Components: non-free non-free-firmware
|
|||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y unrar
|
$STD apt install -y unrar
|
||||||
|
rm /etc/apt/sources.list.d/non-free.sources
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
msg_info "Setup Python3"
|
||||||
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
|
$STD apt install -y python3-pip
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
$STD pip install -U --no-cache-dir pip
|
||||||
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION}"
|
msg_info "Installing ${APPLICATION}"
|
||||||
|
mkdir -p /opt/mylar3
|
||||||
mkdir -p /opt/mylar3-data
|
mkdir -p /opt/mylar3-data
|
||||||
$STD uv venv /opt/mylar3/.venv
|
RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
|
||||||
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
|
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
|
||||||
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
|
$STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
||||||
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -42,7 +48,7 @@ Description=Mylar3 Service
|
|||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/opt/mylar3/.venv/bin/python /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
|
ExecStart=/usr/bin/python3 /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
|
||||||
GuessMainPID=no
|
GuessMainPID=no
|
||||||
Type=forking
|
Type=forking
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|||||||
@@ -63,7 +63,27 @@ msg_ok "MySQL Server configured"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)"
|
msg_info "Installing phpMyAdmin"
|
||||||
|
$STD apt install -y \
|
||||||
|
apache2 \
|
||||||
|
php \
|
||||||
|
php-mysqli \
|
||||||
|
php-mbstring \
|
||||||
|
php-zip \
|
||||||
|
php-gd \
|
||||||
|
php-json \
|
||||||
|
php-curl
|
||||||
|
|
||||||
|
curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
|
||||||
|
mkdir -p /var/www/html/phpMyAdmin
|
||||||
|
tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
|
||||||
|
cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
|
||||||
|
SECRET=$(openssl rand -base64 24)
|
||||||
|
sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
|
||||||
|
chmod 660 /var/www/html/phpMyAdmin/config.inc.php
|
||||||
|
chown -R www-data:www-data /var/www/html/phpMyAdmin
|
||||||
|
systemctl restart apache2
|
||||||
|
msg_ok "Installed phpMyAdmin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Start Service"
|
msg_info "Start Service"
|
||||||
|
|||||||
@@ -1,287 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/PatcMmon/PatchMon
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt install -y \
|
|
||||||
build-essential \
|
|
||||||
nginx \
|
|
||||||
redis-server
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
PG_VERSION="17" setup_postgresql
|
|
||||||
|
|
||||||
msg_info "Setup PostgreSQL Database"
|
|
||||||
DB_NAME=patchmon_db
|
|
||||||
DB_USER=patchmon_usr
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
|
||||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
|
||||||
{
|
|
||||||
echo "PatchMon Credentials"
|
|
||||||
echo "PatchMon Database Name: $DB_NAME"
|
|
||||||
echo "PatchMon Database User: $DB_USER"
|
|
||||||
echo "PatchMon Database Password: $DB_PASS"
|
|
||||||
} >>~/patchmon.creds
|
|
||||||
msg_ok "Setup PostgreSQL Database"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
|
|
||||||
|
|
||||||
msg_info "Configuring PatchMon"
|
|
||||||
cd /opt/patchmon
|
|
||||||
export NODE_ENV=production
|
|
||||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
cd /opt/patchmon/backend
|
|
||||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
cd /opt/patchmon/frontend
|
|
||||||
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
|
|
||||||
$STD npm run build
|
|
||||||
|
|
||||||
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
|
|
||||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
|
||||||
cat <<EOF >/opt/patchmon/backend/.env
|
|
||||||
# Database Configuration
|
|
||||||
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
|
|
||||||
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
|
|
||||||
PM_DB_CONN_WAIT_INTERVAL=2
|
|
||||||
|
|
||||||
# JWT Configuration
|
|
||||||
JWT_SECRET="$JWT_SECRET"
|
|
||||||
JWT_EXPIRES_IN=1h
|
|
||||||
JWT_REFRESH_EXPIRES_IN=7d
|
|
||||||
|
|
||||||
# Server Configuration
|
|
||||||
PORT=3399
|
|
||||||
NODE_ENV=production
|
|
||||||
|
|
||||||
# API Configuration
|
|
||||||
API_VERSION=v1
|
|
||||||
|
|
||||||
# CORS Configuration
|
|
||||||
CORS_ORIGIN="http://$LOCAL_IP"
|
|
||||||
|
|
||||||
# Session Configuration
|
|
||||||
SESSION_INACTIVITY_TIMEOUT_MINUTES=30
|
|
||||||
|
|
||||||
# User Configuration
|
|
||||||
DEFAULT_USER_ROLE=user
|
|
||||||
|
|
||||||
# Rate Limiting (times in milliseconds)
|
|
||||||
RATE_LIMIT_WINDOW_MS=900000
|
|
||||||
RATE_LIMIT_MAX=5000
|
|
||||||
AUTH_RATE_LIMIT_WINDOW_MS=600000
|
|
||||||
AUTH_RATE_LIMIT_MAX=500
|
|
||||||
AGENT_RATE_LIMIT_WINDOW_MS=60000
|
|
||||||
AGENT_RATE_LIMIT_MAX=1000
|
|
||||||
|
|
||||||
# Redis Configuration
|
|
||||||
REDIS_HOST=localhost
|
|
||||||
REDIS_PORT=6379
|
|
||||||
|
|
||||||
# Logging
|
|
||||||
LOG_LEVEL=info
|
|
||||||
ENABLE_LOGGING=true
|
|
||||||
|
|
||||||
# TFA Configuration
|
|
||||||
TFA_REMEMBER_ME_EXPIRES_IN=30d
|
|
||||||
TFA_MAX_REMEMBER_SESSIONS=5
|
|
||||||
TFA_SUSPICIOUS_ACTIVITY_THRESHOLD=3
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/opt/patchmon/frontend/.env
|
|
||||||
VITE_API_URL=http://$LOCAL_IP/api/v1
|
|
||||||
VITE_APP_NAME=PatchMon
|
|
||||||
VITE_APP_VERSION=1.3.0
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd /opt/patchmon/backend
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
$STD npx prisma generate
|
|
||||||
msg_ok "Configured PatchMon"
|
|
||||||
|
|
||||||
msg_info "Configuring Nginx"
|
|
||||||
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name $LOCAL_IP;
|
|
||||||
|
|
||||||
# Security headers
|
|
||||||
add_header X-Frame-Options DENY always;
|
|
||||||
add_header X-Content-Type-Options nosniff always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
||||||
|
|
||||||
# Frontend
|
|
||||||
location / {
|
|
||||||
root /opt/patchmon/frontend/dist;
|
|
||||||
try_files \$uri \$uri/ /index.html;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Bull Board proxy
|
|
||||||
location /bullboard {
|
|
||||||
proxy_pass http://127.0.0.1:3399;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade \$http_upgrade;
|
|
||||||
proxy_set_header Connection 'upgrade';
|
|
||||||
proxy_set_header Host \$host;
|
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
|
||||||
proxy_set_header X-Forwarded-Host \$host;
|
|
||||||
proxy_set_header Cookie \$http_cookie;
|
|
||||||
proxy_cache_bypass \$http_upgrade;
|
|
||||||
proxy_read_timeout 300s;
|
|
||||||
proxy_connect_timeout 75s;
|
|
||||||
|
|
||||||
# Enable cookie passthrough
|
|
||||||
proxy_pass_header Set-Cookie;
|
|
||||||
proxy_cookie_path / /;
|
|
||||||
|
|
||||||
# Preserve original client IP
|
|
||||||
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
|
|
||||||
if (\$request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API proxy
|
|
||||||
location /api/ {
|
|
||||||
proxy_pass http://127.0.0.1:3399;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade \$http_upgrade;
|
|
||||||
proxy_set_header Connection 'upgrade';
|
|
||||||
proxy_set_header Host \$host;
|
|
||||||
proxy_set_header X-Real-IP \$remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
|
||||||
proxy_cache_bypass \$http_upgrade;
|
|
||||||
proxy_read_timeout 300s;
|
|
||||||
proxy_connect_timeout 75s;
|
|
||||||
|
|
||||||
# Preserve original client IP
|
|
||||||
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
|
|
||||||
if (\$request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Static assets caching (exclude Bull Board assets)
|
|
||||||
location ~* ^/(?!bullboard).*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
|
||||||
root /opt/patchmon/frontend/dist;
|
|
||||||
expires 1y;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Health check endpoint
|
|
||||||
location /health {
|
|
||||||
proxy_pass http://127.0.0.1:3399/health;
|
|
||||||
access_log off;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/
|
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
$STD nginx -t
|
|
||||||
systemctl restart nginx
|
|
||||||
msg_ok "Configured Nginx"
|
|
||||||
|
|
||||||
msg_info "Creating service"
|
|
||||||
cat <<EOF >/etc/systemd/system/patchmon-server.service
|
|
||||||
[Unit]
|
|
||||||
Description=PatchMon Service
|
|
||||||
After=network.target postgresql.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/patchmon/backend
|
|
||||||
ExecStart=/usr/bin/node src/server.js
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
Environment=NODE_ENV=production
|
|
||||||
Environment=PATH=/usr/bin:/usr/local/bin
|
|
||||||
NoNewPrivileges=true
|
|
||||||
PrivateTmp=true
|
|
||||||
ProtectSystem=strict
|
|
||||||
ProtectHome=true
|
|
||||||
ReadWritePaths=/opt/patchmon
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now patchmon-server
|
|
||||||
msg_ok "Created and started service"
|
|
||||||
|
|
||||||
msg_info "Updating settings"
|
|
||||||
cat <<EOF >/opt/patchmon/backend/update-settings.js
|
|
||||||
const { PrismaClient } = require('@prisma/client');
|
|
||||||
const { v4: uuidv4 } = require('uuid');
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
async function updateSettings() {
|
|
||||||
try {
|
|
||||||
const existingSettings = await prisma.settings.findFirst();
|
|
||||||
|
|
||||||
const settingsData = {
|
|
||||||
id: uuidv4(),
|
|
||||||
server_url: 'http://$LOCAL_IP',
|
|
||||||
server_protocol: 'http',
|
|
||||||
server_host: '$LOCAL_IP',
|
|
||||||
server_port: 3399,
|
|
||||||
update_interval: 60,
|
|
||||||
auto_update: true,
|
|
||||||
signup_enabled: false,
|
|
||||||
ignore_ssl_self_signed: false,
|
|
||||||
updated_at: new Date()
|
|
||||||
};
|
|
||||||
|
|
||||||
if (existingSettings) {
|
|
||||||
// Update existing settings
|
|
||||||
await prisma.settings.update({
|
|
||||||
where: { id: existingSettings.id },
|
|
||||||
data: settingsData
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// Create new settings record
|
|
||||||
await prisma.settings.create({
|
|
||||||
data: settingsData
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('✅ Database settings updated successfully');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('❌ Error updating settings:', error.message);
|
|
||||||
process.exit(1);
|
|
||||||
} finally {
|
|
||||||
await prisma.\$disconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateSettings();
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cd /opt/patchmon/backend
|
|
||||||
$STD node update-settings.js
|
|
||||||
msg_ok "Settings updated successfully"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt -y autoremove
|
|
||||||
$STD apt -y autoclean
|
|
||||||
$STD apt -y clean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
apache2-utils \
|
apache2-utils \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-venv
|
python3.11-venv
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Radicale"
|
msg_info "Setting up Radicale"
|
||||||
|
|||||||
@@ -61,8 +61,6 @@ cd /opt/browserless
|
|||||||
$STD npm install
|
$STD npm install
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
||||||
$STD npm install typescript --save-dev
|
|
||||||
$STD npm install esbuild --save-dev
|
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
$STD npm run build:function
|
$STD npm run build:function
|
||||||
$STD npm prune production
|
$STD npm prune production
|
||||||
|
|||||||
@@ -19,33 +19,30 @@ $STD apt install -y \
|
|||||||
p7zip-full
|
p7zip-full
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
msg_info "Setup uv"
|
||||||
|
setup_uv
|
||||||
|
msg_ok "Setup uv"
|
||||||
|
|
||||||
msg_info "Setup Unrar"
|
msg_info "Setup Unrar"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
||||||
Types: deb
|
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
|
||||||
URIs: http://deb.debian.org/debian/
|
|
||||||
Suites: trixie
|
|
||||||
Components: non-free
|
|
||||||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
|
|
||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y unrar
|
$STD apt install -y unrar
|
||||||
|
rm /etc/apt/sources.list.d/non-free.list
|
||||||
msg_ok "Setup Unrar"
|
msg_ok "Setup Unrar"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Installing SABnzbd"
|
msg_info "Installing SABnzbd"
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
mkdir -p /opt/sabnzbd
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
$STD uv venv /opt/sabnzbd/venv
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
|
||||||
|
tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
|
||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
msg_ok "Installed SABnzbd"
|
msg_ok "Installed SABnzbd"
|
||||||
|
|
||||||
read -r -p "Would you like to install par2cmdline-turbo? <y/N> " prompt
|
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
mv /usr/bin/par2 /usr/bin/par2.old
|
|
||||||
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/sabnzbd.service
|
cat <<EOF >/etc/systemd/system/sabnzbd.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -68,6 +65,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
$STD apt -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt -y autoclean
|
$STD apt -y autoclean
|
||||||
$STD apt -y clean
|
$STD apt -y clean
|
||||||
|
|||||||
@@ -14,12 +14,9 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y coreutils
|
||||||
coreutils \
|
|
||||||
debconf-utils
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
|
||||||
msg_info "Installing UrBackup Server"
|
msg_info "Installing UrBackup Server"
|
||||||
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
|
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
|
||||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
|
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
|
||||||
@@ -30,8 +27,6 @@ Components:
|
|||||||
Signed-By: /usr/share/keyrings/home-uroni.gpg
|
Signed-By: /usr/share/keyrings/home-uroni.gpg
|
||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
mkdir -p /opt/urbackup/backups
|
|
||||||
echo "urbackup-server urbackup/backuppath string /opt/urbackup/backups" | debconf-set-selections
|
|
||||||
$STD apt install -y urbackup-server
|
$STD apt install -y urbackup-server
|
||||||
msg_ok "Installed UrBackup Server"
|
msg_ok "Installed UrBackup Server"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user