mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-07 10:34:33 +00:00
Compare commits
20 Commits
fix-scanop
...
2026-08-27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d14ca63429 | ||
|
|
1b714dceda | ||
|
|
519f5630ce | ||
|
|
8734eba9a7 | ||
|
|
d80fbc9629 | ||
|
|
f114aa553c | ||
|
|
db80438531 | ||
|
|
07d1f0837d | ||
|
|
45a6102d48 | ||
|
|
6cc27497a0 | ||
|
|
beb5c3a573 | ||
|
|
e60b90f385 | ||
|
|
fadcb0c375 | ||
|
|
89f5d3000e | ||
|
|
0a6e59dab2 | ||
|
|
4168f6c5d4 | ||
|
|
a51488a406 | ||
|
|
ab1869fbb0 | ||
|
|
e470b6ddf1 | ||
|
|
416deb8fd0 |
42
CHANGELOG.md
42
CHANGELOG.md
@@ -527,6 +527,34 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-08-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- pve-ups: fix: add pip binary [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16820](https://github.com/community-scripts/ProxmoxVE/pull/16820))
|
||||||
|
|
||||||
|
## 2026-08-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Seanime ([#16777](https://github.com/community-scripts/ProxmoxVE/pull/16777))
|
||||||
|
- Yopass ([#16778](https://github.com/community-scripts/ProxmoxVE/pull/16778))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- excalidash: Add a sed to switch to the correct DB Provider [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#16814](https://github.com/community-scripts/ProxmoxVE/pull/16814))
|
||||||
|
- fix(stirling-pdf): remove broken ExecStop using %n [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#16813](https://github.com/community-scripts/ProxmoxVE/pull/16813))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix: Incorporate the new update functions to prevent a empty grep on … [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#16809](https://github.com/community-scripts/ProxmoxVE/pull/16809))
|
||||||
|
|
||||||
## 2026-08-26
|
## 2026-08-26
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
@@ -541,6 +569,20 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- Directus ([#16779](https://github.com/community-scripts/ProxmoxVE/pull/16779))
|
- Directus ([#16779](https://github.com/community-scripts/ProxmoxVE/pull/16779))
|
||||||
- HAProxy ([#16760](https://github.com/community-scripts/ProxmoxVE/pull/16760))
|
- HAProxy ([#16760](https://github.com/community-scripts/ProxmoxVE/pull/16760))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix]: LimeSurvey - enable Apache mod_rewrite [@jonathan8devs](https://github.com/jonathan8devs) ([#16767](https://github.com/community-scripts/ProxmoxVE/pull/16767))
|
||||||
|
- endurain: migrate legacy FRONTEND_DIR path on update [@MickLesk](https://github.com/MickLesk) ([#16794](https://github.com/community-scripts/ProxmoxVE/pull/16794))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: recognize bare XZ-compressed tarballs in fetch_and_deploy* [@MickLesk](https://github.com/MickLesk) ([#16796](https://github.com/community-scripts/ProxmoxVE/pull/16796))
|
||||||
|
- tools.func: fix mongodb version comparison, guard apt purge against removing dependents [@MickLesk](https://github.com/MickLesk) ([#16795](https://github.com/community-scripts/ProxmoxVE/pull/16795))
|
||||||
|
|
||||||
### 📂 Github
|
### 📂 Github
|
||||||
|
|
||||||
- github: teach the PocketBase bot every field [@MickLesk](https://github.com/MickLesk) ([#16781](https://github.com/community-scripts/ProxmoxVE/pull/16781))
|
- github: teach the PocketBase bot every field [@MickLesk](https://github.com/MickLesk) ([#16781](https://github.com/community-scripts/ProxmoxVE/pull/16781))
|
||||||
|
|||||||
@@ -35,29 +35,29 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
msg_info "Preparing Update"
|
msg_info "Updating Endurain Frontend"
|
||||||
cd /opt/endurain
|
cd /opt/endurain
|
||||||
rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
|
rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
|
||||||
msg_ok "Prepared Update"
|
|
||||||
|
|
||||||
msg_info "Updating Frontend"
|
|
||||||
cd /opt/endurain/frontend
|
cd /opt/endurain/frontend
|
||||||
$STD npm ci
|
$STD npm ci
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Updated Frontend"
|
msg_ok "Updated Endurain Frontend"
|
||||||
|
|
||||||
restore_backup
|
restore_backup
|
||||||
|
|
||||||
msg_info "Updating Backend"
|
if grep -qxF 'FRONTEND_DIR="/opt/endurain/frontend/app/dist"' /opt/endurain/.env; then
|
||||||
|
sed -i 's|^FRONTEND_DIR="/opt/endurain/frontend/app/dist"$|FRONTEND_DIR="/opt/endurain/frontend/dist"|' /opt/endurain/.env
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Endurain Backend"
|
||||||
cd /opt/endurain/backend
|
cd /opt/endurain/backend
|
||||||
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
|
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
|
||||||
UV_VERSION="$UV_VERSION" setup_uv
|
UV_VERSION="$UV_VERSION" setup_uv
|
||||||
$STD uv sync --frozen --no-dev
|
$STD uv sync --frozen --no-dev
|
||||||
msg_ok "Backend Updated"
|
msg_ok "Endurain Backend Updated"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start endurain
|
systemctl start endurain
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ function update_script() {
|
|||||||
msg_info "Configuring Database Provider (${DATABASE_PROVIDER:-sqlite})"
|
msg_info "Configuring Database Provider (${DATABASE_PROVIDER:-sqlite})"
|
||||||
cd /opt/excalidash/backend
|
cd /opt/excalidash/backend
|
||||||
sed -i '/datasource db {/,/}/ s/provider = env("[^"]*")/provider = "'"${DATABASE_PROVIDER:-sqlite}"'"/' prisma/schema.prisma
|
sed -i '/datasource db {/,/}/ s/provider = env("[^"]*")/provider = "'"${DATABASE_PROVIDER:-sqlite}"'"/' prisma/schema.prisma
|
||||||
|
sed -i '/datasource db {/,/}/ s/provider = "[^"]*"/provider = "'"${DATABASE_PROVIDER:-sqlite}"'"/' prisma/schema.prisma
|
||||||
mv prisma/migrations/"${DATABASE_PROVIDER:-sqlite}"/* prisma/migrations/
|
mv prisma/migrations/"${DATABASE_PROVIDER:-sqlite}"/* prisma/migrations/
|
||||||
rm -rf prisma/migrations/postgresql prisma/migrations/sqlite
|
rm -rf prisma/migrations/postgresql prisma/migrations/sqlite
|
||||||
msg_ok "Configured Database Provider"
|
msg_ok "Configured Database Provider"
|
||||||
|
|||||||
6
ct/headers/seanime
Normal file
6
ct/headers/seanime
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _
|
||||||
|
/ ___/___ ____ _____ (_)___ ___ ___
|
||||||
|
\__ \/ _ \/ __ `/ __ \/ / __ `__ \/ _ \
|
||||||
|
___/ / __/ /_/ / / / / / / / / / / __/
|
||||||
|
/____/\___/\__,_/_/ /_/_/_/ /_/ /_/\___/
|
||||||
|
|
||||||
6
ct/headers/yopass
Normal file
6
ct/headers/yopass
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __
|
||||||
|
\ \/ /___ ____ ____ ___________
|
||||||
|
\ / __ \/ __ \/ __ `/ ___/ ___/
|
||||||
|
/ / /_/ / /_/ / /_/ (__ |__ )
|
||||||
|
/_/\____/ .___/\__,_/____/____/
|
||||||
|
/_/
|
||||||
@@ -28,6 +28,13 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if [[ ! -L /etc/apache2/mods-enabled/rewrite.load ]]; then
|
||||||
|
msg_info "Enabling Apache mod_rewrite"
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
systemctl restart apache2
|
||||||
|
msg_ok "Enabled Apache mod_rewrite"
|
||||||
|
fi
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_warn "Application is updated via Web Interface"
|
msg_warn "Application is updated via Web Interface"
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Application"
|
msg_info "Updating Application"
|
||||||
cd /opt/pve-usv
|
cd /opt/pve-usv
|
||||||
$STD uv venv --clear venv
|
$STD uv venv --clear --seed venv
|
||||||
$STD uv pip install --python venv/bin/python .
|
$STD uv pip install --python venv/bin/python .
|
||||||
chown -R pveusv:pveusv /opt/pve-usv
|
chown -R pveusv:pveusv /opt/pve-usv
|
||||||
chmod 0755 deploy/pve-usv-agent.sh
|
chmod 0755 deploy/pve-usv-agent.sh
|
||||||
|
|||||||
63
ct/seanime.sh
Normal file
63
ct/seanime.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||||
|
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||||
|
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: hasan-ismail
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://seanime.app/
|
||||||
|
|
||||||
|
APP="Seanime"
|
||||||
|
var_tags="${var_tags:-media;anime;manga}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/seanime ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "seanime" "5rahim/seanime"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop seanime
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
create_backup /opt/seanime-data/config.toml
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "seanime" "5rahim/seanime" "prebuild" "latest" "/opt/seanime" "seanime-[0-9]*_Linux_$(arch_resolve x86_64 arm64).tar.gz"
|
||||||
|
chmod +x /opt/seanime/seanime
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start seanime
|
||||||
|
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}:43211${CL}"
|
||||||
65
ct/yopass.sh
Normal file
65
ct/yopass.sh
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||||
|
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||||
|
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/jhaals/yopass
|
||||||
|
|
||||||
|
APP="Yopass"
|
||||||
|
var_tags="${var_tags:-security;secrets}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified
|
||||||
|
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/yopass ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "yopass" "jhaals/yopass"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop yopass
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yopass" "jhaals/yopass" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Yopass"
|
||||||
|
cd /opt/yopass
|
||||||
|
$STD go build -ldflags "-X main.version=$(cat ~/.yopass)" ./cmd/yopass-server
|
||||||
|
cd /opt/yopass/website
|
||||||
|
$STD yarn install --network-timeout 600000
|
||||||
|
$STD yarn build
|
||||||
|
msg_ok "Built Yopass"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start yopass
|
||||||
|
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 "${GATEWAY}${BGN}https://${IP}:1337${CL}"
|
||||||
@@ -60,6 +60,7 @@ cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
|
|||||||
EOF
|
EOF
|
||||||
chown -R www-data:www-data "/opt/limesurvey"
|
chown -R www-data:www-data "/opt/limesurvey"
|
||||||
chmod -R 750 "/opt/limesurvey"
|
chmod -R 750 "/opt/limesurvey"
|
||||||
|
$STD a2enmod rewrite
|
||||||
systemctl reload apache2
|
systemctl reload apache2
|
||||||
rm -rf "$temp_file"
|
rm -rf "$temp_file"
|
||||||
msg_ok "Set up LimeSurvey"
|
msg_ok "Set up LimeSurvey"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ install -d -o pveusv -g pveusv -m 0750 \
|
|||||||
/var/lib/pve-usv/updates
|
/var/lib/pve-usv/updates
|
||||||
chown -R pveusv:pveusv /opt/pve-usv
|
chown -R pveusv:pveusv /opt/pve-usv
|
||||||
cd /opt/pve-usv
|
cd /opt/pve-usv
|
||||||
$STD uv venv --clear venv
|
$STD uv venv --clear --seed venv
|
||||||
$STD uv pip install --python venv/bin/python .
|
$STD uv pip install --python venv/bin/python .
|
||||||
chmod 0755 deploy/pve-usv-agent.sh
|
chmod 0755 deploy/pve-usv-agent.sh
|
||||||
msg_ok "Set up Application"
|
msg_ok "Set up Application"
|
||||||
|
|||||||
67
install/seanime-install.sh
Normal file
67
install/seanime-install.sh
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: hasan-ismail
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://seanime.app/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
|
msg_info "Installing FFmpeg"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"jellyfin" \
|
||||||
|
"https://repo.jellyfin.org/jellyfin_team.gpg.key" \
|
||||||
|
"https://repo.jellyfin.org/debian" \
|
||||||
|
"$(get_os_info codename)"
|
||||||
|
$STD apt install -y jellyfin-ffmpeg7
|
||||||
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
||||||
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
||||||
|
msg_ok "Installed FFmpeg"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "seanime" "5rahim/seanime" "prebuild" "latest" "/opt/seanime" "seanime-[0-9]*_Linux_$(arch_resolve x86_64 arm64).tar.gz"
|
||||||
|
chmod +x /opt/seanime/seanime
|
||||||
|
|
||||||
|
msg_info "Configuring Seanime"
|
||||||
|
SEANIME_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
mkdir -p /opt/seanime-data
|
||||||
|
cat <<EOF >/opt/seanime-data/config.toml
|
||||||
|
[server]
|
||||||
|
password = "${SEANIME_PASSWORD}"
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/root/seanime.creds
|
||||||
|
Seanime URL: http://${LOCAL_IP}:43211
|
||||||
|
Password: ${SEANIME_PASSWORD}
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Seanime"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/seanime.service
|
||||||
|
[Unit]
|
||||||
|
Description=Seanime
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/seanime
|
||||||
|
ExecStart=/opt/seanime/seanime --datadir /opt/seanime-data --host 0.0.0.0
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now seanime
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -147,7 +147,6 @@ Group=root
|
|||||||
EnvironmentFile=/opt/Stirling-PDF/.env
|
EnvironmentFile=/opt/Stirling-PDF/.env
|
||||||
WorkingDirectory=/opt/Stirling-PDF
|
WorkingDirectory=/opt/Stirling-PDF
|
||||||
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
|
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
|
||||||
ExecStop=/bin/kill -15 %n
|
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=10
|
RestartSec=10
|
||||||
|
|
||||||
|
|||||||
69
install/yopass-install.sh
Normal file
69
install/yopass-install.sh
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/jhaals/yopass
|
||||||
|
|
||||||
|
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 redis-server
|
||||||
|
systemctl enable -q --now redis-server
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_go
|
||||||
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "yopass" "jhaals/yopass" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Yopass"
|
||||||
|
cd /opt/yopass
|
||||||
|
$STD go build -ldflags "-X main.version=$(cat ~/.yopass)" ./cmd/yopass-server
|
||||||
|
cd /opt/yopass/website
|
||||||
|
$STD yarn install --network-timeout 600000
|
||||||
|
$STD yarn build
|
||||||
|
msg_ok "Built Yopass"
|
||||||
|
|
||||||
|
msg_info "Generating SSL Certificate"
|
||||||
|
mkdir -p /opt/yopass/certificates
|
||||||
|
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
|
||||||
|
-keyout /opt/yopass/certificates/key.pem \
|
||||||
|
-out /opt/yopass/certificates/cert.pem \
|
||||||
|
-subj "/C=US/ST=State/L=City/O=Yopass/CN=${LOCAL_IP}" \
|
||||||
|
-addext "subjectAltName=IP:${LOCAL_IP},DNS:localhost,IP:127.0.0.1" \
|
||||||
|
2>/dev/null
|
||||||
|
chmod 600 /opt/yopass/certificates/key.pem
|
||||||
|
chmod 644 /opt/yopass/certificates/cert.pem
|
||||||
|
msg_ok "Generated SSL Certificate"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/yopass.service
|
||||||
|
[Unit]
|
||||||
|
Description=Yopass
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/yopass
|
||||||
|
ExecStart=/opt/yopass/yopass-server --address 0.0.0.0 --port 1337 --tls-cert /opt/yopass/certificates/cert.pem --tls-key /opt/yopass/certificates/key.pem --database redis --redis redis://127.0.0.1:6379/0 --asset-path /opt/yopass/website/dist
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now yopass
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -632,7 +632,7 @@ is_tool_installed() {
|
|||||||
;;
|
;;
|
||||||
mongodb | mongod)
|
mongodb | mongod)
|
||||||
if command -v mongod >/dev/null 2>&1; then
|
if command -v mongod >/dev/null 2>&1; then
|
||||||
installed_version=$(mongod --version 2>/dev/null | awk '/db version/{print $3}' | cut -d. -f1,2)
|
installed_version=$(mongod --version 2>/dev/null | awk '/db version/{print $3}' | sed 's/^v//' | cut -d. -f1,2)
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
node | nodejs)
|
node | nodejs)
|
||||||
@@ -685,6 +685,39 @@ is_tool_installed() {
|
|||||||
return 0 # Installed and version matches (if specified)
|
return 0 # Installed and version matches (if specified)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Checks whether purging the given package glob(s) would also remove packages
|
||||||
|
# outside those globs (i.e. reverse dependents, such as an app depending on
|
||||||
|
# mongodb-org-server). Uses `apt-get -s` (simulate) with the stable apt-get
|
||||||
|
# output format, not `apt`, whose output is explicitly unstable for scripting.
|
||||||
|
# Returns 0 (safe to purge) or 1 (unsafe - prints the unexpected packages).
|
||||||
|
# Usage: _purge_is_safe 'mongodb*' ['other-glob*' ...]
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
_purge_is_safe() {
|
||||||
|
local -a globs=("$@")
|
||||||
|
local -a collateral=()
|
||||||
|
local pkg glob matched
|
||||||
|
local sim_out
|
||||||
|
sim_out=$(apt-get -s purge -y "${globs[@]}" 2>/dev/null) || return 0
|
||||||
|
while IFS= read -r pkg; do
|
||||||
|
[[ -z "$pkg" ]] && continue
|
||||||
|
matched=0
|
||||||
|
for glob in "${globs[@]}"; do
|
||||||
|
# shellcheck disable=SC2053
|
||||||
|
[[ "$pkg" == $glob ]] && {
|
||||||
|
matched=1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
done
|
||||||
|
((matched)) || collateral+=("$pkg")
|
||||||
|
done < <(awk '/^(Remv|Purg) /{print $2}' <<<"$sim_out")
|
||||||
|
if ((${#collateral[@]} > 0)); then
|
||||||
|
msg_warn "Refusing purge of '${globs[*]}': would also remove ${collateral[*]}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Remove old tool version completely (purge + cleanup repos)
|
# Remove old tool version completely (purge + cleanup repos)
|
||||||
# Usage: remove_old_tool_version "mariadb" "repository-name"
|
# Usage: remove_old_tool_version "mariadb" "repository-name"
|
||||||
@@ -696,11 +729,13 @@ remove_old_tool_version() {
|
|||||||
case "$tool_name" in
|
case "$tool_name" in
|
||||||
mariadb)
|
mariadb)
|
||||||
stop_all_services "mariadb"
|
stop_all_services "mariadb"
|
||||||
|
_purge_is_safe 'mariadb*' || return 1
|
||||||
$STD apt purge -y 'mariadb*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'mariadb*' >/dev/null 2>&1 || true
|
||||||
cleanup_tool_keyrings "mariadb"
|
cleanup_tool_keyrings "mariadb"
|
||||||
;;
|
;;
|
||||||
mysql)
|
mysql)
|
||||||
stop_all_services "mysql"
|
stop_all_services "mysql"
|
||||||
|
_purge_is_safe 'mysql*' || return 1
|
||||||
$STD apt purge -y 'mysql*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'mysql*' >/dev/null 2>&1 || true
|
||||||
# Keep data directory for safety (remove manually if needed)
|
# Keep data directory for safety (remove manually if needed)
|
||||||
# rm -rf /var/lib/mysql 2>/dev/null || true
|
# rm -rf /var/lib/mysql 2>/dev/null || true
|
||||||
@@ -708,12 +743,14 @@ remove_old_tool_version() {
|
|||||||
;;
|
;;
|
||||||
mongodb)
|
mongodb)
|
||||||
stop_all_services "mongod"
|
stop_all_services "mongod"
|
||||||
|
_purge_is_safe 'mongodb*' || return 1
|
||||||
$STD apt purge -y 'mongodb*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'mongodb*' >/dev/null 2>&1 || true
|
||||||
# Keep data directory for safety (remove manually if needed)
|
# Keep data directory for safety (remove manually if needed)
|
||||||
# rm -rf /var/lib/mongodb 2>/dev/null || true
|
# rm -rf /var/lib/mongodb 2>/dev/null || true
|
||||||
cleanup_tool_keyrings "mongodb"
|
cleanup_tool_keyrings "mongodb"
|
||||||
;;
|
;;
|
||||||
node | nodejs)
|
node | nodejs)
|
||||||
|
_purge_is_safe nodejs npm || return 1
|
||||||
$STD apt purge -y nodejs npm >/dev/null 2>&1 || true
|
$STD apt purge -y nodejs npm >/dev/null 2>&1 || true
|
||||||
# Clean up npm global modules
|
# Clean up npm global modules
|
||||||
if command -v npm >/dev/null 2>&1; then
|
if command -v npm >/dev/null 2>&1; then
|
||||||
@@ -726,23 +763,27 @@ remove_old_tool_version() {
|
|||||||
;;
|
;;
|
||||||
php)
|
php)
|
||||||
stop_all_services "php.*-fpm"
|
stop_all_services "php.*-fpm"
|
||||||
|
_purge_is_safe 'php*' || return 1
|
||||||
$STD apt purge -y 'php*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'php*' >/dev/null 2>&1 || true
|
||||||
rm -rf /etc/php 2>/dev/null || true
|
rm -rf /etc/php 2>/dev/null || true
|
||||||
cleanup_tool_keyrings "deb.sury.org-php" "php"
|
cleanup_tool_keyrings "deb.sury.org-php" "php"
|
||||||
;;
|
;;
|
||||||
postgresql)
|
postgresql)
|
||||||
stop_all_services "postgresql"
|
stop_all_services "postgresql"
|
||||||
|
_purge_is_safe 'postgresql*' || return 1
|
||||||
$STD apt purge -y 'postgresql*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'postgresql*' >/dev/null 2>&1 || true
|
||||||
# Keep data directory for safety (can be removed manually if needed)
|
# Keep data directory for safety (can be removed manually if needed)
|
||||||
# rm -rf /var/lib/postgresql 2>/dev/null || true
|
# rm -rf /var/lib/postgresql 2>/dev/null || true
|
||||||
cleanup_tool_keyrings "postgresql" "pgdg"
|
cleanup_tool_keyrings "postgresql" "pgdg"
|
||||||
;;
|
;;
|
||||||
java)
|
java)
|
||||||
|
_purge_is_safe 'temurin*' 'adoptium*' 'openjdk*' || return 1
|
||||||
$STD apt purge -y 'temurin*' 'adoptium*' 'openjdk*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'temurin*' 'adoptium*' 'openjdk*' >/dev/null 2>&1 || true
|
||||||
cleanup_tool_keyrings "adoptium"
|
cleanup_tool_keyrings "adoptium"
|
||||||
;;
|
;;
|
||||||
ruby)
|
ruby)
|
||||||
cleanup_legacy_install "ruby"
|
cleanup_legacy_install "ruby"
|
||||||
|
_purge_is_safe 'ruby*' || return 1
|
||||||
$STD apt purge -y 'ruby*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'ruby*' >/dev/null 2>&1 || true
|
||||||
;;
|
;;
|
||||||
rust)
|
rust)
|
||||||
@@ -754,6 +795,7 @@ remove_old_tool_version() {
|
|||||||
;;
|
;;
|
||||||
clickhouse)
|
clickhouse)
|
||||||
stop_all_services "clickhouse-server"
|
stop_all_services "clickhouse-server"
|
||||||
|
_purge_is_safe 'clickhouse*' || return 1
|
||||||
$STD apt purge -y 'clickhouse*' >/dev/null 2>&1 || true
|
$STD apt purge -y 'clickhouse*' >/dev/null 2>&1 || true
|
||||||
# Keep data directory for safety (remove manually if needed)
|
# Keep data directory for safety (remove manually if needed)
|
||||||
# rm -rf /var/lib/clickhouse 2>/dev/null || true
|
# rm -rf /var/lib/clickhouse 2>/dev/null || true
|
||||||
@@ -4473,7 +4515,10 @@ setup_clickhouse() {
|
|||||||
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$CLICKHOUSE_VERSION" ]]; then
|
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$CLICKHOUSE_VERSION" ]]; then
|
||||||
msg_info "Upgrade ClickHouse from $CURRENT_VERSION to $CLICKHOUSE_VERSION"
|
msg_info "Upgrade ClickHouse from $CURRENT_VERSION to $CLICKHOUSE_VERSION"
|
||||||
stop_all_services "clickhouse-server"
|
stop_all_services "clickhouse-server"
|
||||||
remove_old_tool_version "clickhouse"
|
remove_old_tool_version "clickhouse" || {
|
||||||
|
msg_error "Aborting ClickHouse upgrade: another package depends on it"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg_info "Setup ClickHouse $CLICKHOUSE_VERSION"
|
msg_info "Setup ClickHouse $CLICKHOUSE_VERSION"
|
||||||
fi
|
fi
|
||||||
@@ -5150,7 +5195,10 @@ setup_go() {
|
|||||||
# Scenario 2: Different version or not installed
|
# Scenario 2: Different version or not installed
|
||||||
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$GO_VERSION" ]]; then
|
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$GO_VERSION" ]]; then
|
||||||
msg_info "Upgrade Go from $CURRENT_VERSION to $GO_VERSION"
|
msg_info "Upgrade Go from $CURRENT_VERSION to $GO_VERSION"
|
||||||
remove_old_tool_version "go"
|
remove_old_tool_version "go" || {
|
||||||
|
msg_error "Aborting Go upgrade: another package depends on it"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg_info "Setup Go $GO_VERSION"
|
msg_info "Setup Go $GO_VERSION"
|
||||||
fi
|
fi
|
||||||
@@ -6753,7 +6801,10 @@ EOF
|
|||||||
# Scenario 2b: Different version installed - clean upgrade
|
# Scenario 2b: Different version installed - clean upgrade
|
||||||
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MARIADB_VERSION"; then
|
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MARIADB_VERSION"; then
|
||||||
msg_info "Upgrade MariaDB from $CURRENT_VERSION to $MARIADB_VERSION"
|
msg_info "Upgrade MariaDB from $CURRENT_VERSION to $MARIADB_VERSION"
|
||||||
remove_old_tool_version "mariadb"
|
remove_old_tool_version "mariadb" || {
|
||||||
|
msg_error "Aborting MariaDB upgrade: another package depends on it"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Scenario 3: Fresh install or version change with specific version
|
# Scenario 3: Fresh install or version change with specific version
|
||||||
@@ -7283,7 +7334,10 @@ setup_mongodb() {
|
|||||||
# Scenario 2: Different version installed - clean upgrade
|
# Scenario 2: Different version installed - clean upgrade
|
||||||
if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" != "$MONGO_VERSION" ]]; then
|
if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" != "$MONGO_VERSION" ]]; then
|
||||||
msg_info "Upgrade MongoDB from $INSTALLED_VERSION to $MONGO_VERSION"
|
msg_info "Upgrade MongoDB from $INSTALLED_VERSION to $MONGO_VERSION"
|
||||||
remove_old_tool_version "mongodb"
|
remove_old_tool_version "mongodb" || {
|
||||||
|
msg_error "Aborting MongoDB upgrade: another package depends on it (e.g. an app using it)"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg_info "Setup MongoDB $MONGO_VERSION"
|
msg_info "Setup MongoDB $MONGO_VERSION"
|
||||||
fi
|
fi
|
||||||
@@ -7473,7 +7527,10 @@ setup_mysql() {
|
|||||||
# Scenario 2: Different version installed - clean upgrade
|
# Scenario 2: Different version installed - clean upgrade
|
||||||
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MYSQL_VERSION"; then
|
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MYSQL_VERSION"; then
|
||||||
msg_info "Upgrade MySQL from $CURRENT_VERSION to $MYSQL_VERSION"
|
msg_info "Upgrade MySQL from $CURRENT_VERSION to $MYSQL_VERSION"
|
||||||
remove_old_tool_version "mysql"
|
remove_old_tool_version "mysql" || {
|
||||||
|
msg_error "Aborting MySQL upgrade: another package depends on it"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg_info "Setup MySQL $MYSQL_VERSION"
|
msg_info "Setup MySQL $MYSQL_VERSION"
|
||||||
fi
|
fi
|
||||||
@@ -7637,7 +7694,10 @@ setup_nodejs() {
|
|||||||
if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then
|
if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then
|
||||||
msg_info "Upgrade Node.js from $CURRENT_NODE_VERSION to $NODE_VERSION"
|
msg_info "Upgrade Node.js from $CURRENT_NODE_VERSION to $NODE_VERSION"
|
||||||
node_setup_ok_msg="Upgrade Node.js to $NODE_VERSION"
|
node_setup_ok_msg="Upgrade Node.js to $NODE_VERSION"
|
||||||
remove_old_tool_version "nodejs"
|
remove_old_tool_version "nodejs" || {
|
||||||
|
msg_error "Aborting Node.js upgrade: another package depends on it"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg_info "Setup Node.js $NODE_VERSION"
|
msg_info "Setup Node.js $NODE_VERSION"
|
||||||
node_setup_ok_msg="Setup Node.js $NODE_VERSION"
|
node_setup_ok_msg="Setup Node.js $NODE_VERSION"
|
||||||
@@ -9334,6 +9394,8 @@ fetch_and_deploy_from_url() {
|
|||||||
|
|
||||||
if [[ "$file_desc" =~ gzip.*compressed|gzip\ compressed\ data ]]; then
|
if [[ "$file_desc" =~ gzip.*compressed|gzip\ compressed\ data ]]; then
|
||||||
archive_type="tar"
|
archive_type="tar"
|
||||||
|
elif [[ "$file_desc" =~ XZ\ compressed\ data ]]; then
|
||||||
|
archive_type="tar"
|
||||||
elif [[ "$file_desc" =~ Zip.*archive|ZIP\ archive ]]; then
|
elif [[ "$file_desc" =~ Zip.*archive|ZIP\ archive ]]; then
|
||||||
archive_type="zip"
|
archive_type="zip"
|
||||||
elif [[ "$file_desc" =~ Debian.*package|Debian\ binary\ package ]]; then
|
elif [[ "$file_desc" =~ Debian.*package|Debian\ binary\ package ]]; then
|
||||||
|
|||||||
@@ -173,7 +173,11 @@ function detect_service() {
|
|||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
service=$(grep -oE '/ct/[a-zA-Z0-9._-]+\.sh' "$update_file" 2>/dev/null | head -n1 | sed 's|.*/ct/||; s|\.sh$||')
|
|
||||||
|
service=$(sed -n -E 's/^[[:space:]]*export[[:space:]]+UPDATE_SCRIPT_NAME=["'"'"']?([a-zA-Z0-9._-]+).*/\1/p' "$update_file" | head -n1)
|
||||||
|
[[ -z "$service" ]] && service=$(sed -n -E 's/^[[:space:]]*export[[:space:]]+SCRIPT_SLUG=["'"'"']?([a-zA-Z0-9._-]+).*/\1/p' "$update_file" | head -n1)
|
||||||
|
[[ -z "$service" ]] && service=$(grep -oE '/ct/[a-zA-Z0-9._-]+\.sh' "$update_file" 2>/dev/null | head -n1 | sed 's|.*/ct/||; s|\.sh$||')
|
||||||
|
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user