mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-05-22 16:34:57 +02:00
Compare commits
2 Commits
fix/the-lo
...
feat/pve-9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12d9a4642c | ||
|
|
034bbb1a52 |
33
CHANGELOG.md
33
CHANGELOG.md
@@ -464,47 +464,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-05-22
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- bitfocus-companion ([#14603](https://github.com/community-scripts/ProxmoxVE/pull/14603))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Docmost: Fix duplicate STORAGE_DRIVER [@MickLesk](https://github.com/MickLesk) ([#14645](https://github.com/community-scripts/ProxmoxVE/pull/14645))
|
||||
- Profilarr: pin Deno version to v2.7.5 [@MickLesk](https://github.com/MickLesk) ([#14632](https://github.com/community-scripts/ProxmoxVE/pull/14632))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- SoulSync: setup Node v22 and build WebUI [@MickLesk](https://github.com/MickLesk) ([#14639](https://github.com/community-scripts/ProxmoxVE/pull/14639))
|
||||
- Refactor: Dispatcharr [@MickLesk](https://github.com/MickLesk) ([#14313](https://github.com/community-scripts/ProxmoxVE/pull/14313))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: make LXC banner OS detection dynamic via /etc/os-release [@atahan99](https://github.com/atahan99) ([#14269](https://github.com/community-scripts/ProxmoxVE/pull/14269))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: suppress MOTD for non-interactive shells [@MickLesk](https://github.com/MickLesk) ([#14638](https://github.com/community-scripts/ProxmoxVE/pull/14638))
|
||||
|
||||
## 2026-05-21
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- snowshare: use mv instead of cp for uploads backup to prevent disk fill [@TuroYT](https://github.com/TuroYT) ([#14558](https://github.com/community-scripts/ProxmoxVE/pull/14558))
|
||||
- Technitium DNS: download release before stopping the service on update [@w-gitops](https://github.com/w-gitops) ([#14616](https://github.com/community-scripts/ProxmoxVE/pull/14616))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Proxmox VE 9.2 support [@MickLesk](https://github.com/MickLesk) ([#14624](https://github.com/community-scripts/ProxmoxVE/pull/14624))
|
||||
|
||||
## 2026-05-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: glabutis
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitfocus/companion
|
||||
|
||||
APP="Bitfocus-Companion"
|
||||
var_tags="${var_tags:-automation;media}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/bitfocus-companion/companion_headless.sh ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RELEASE_JSON=$(curl -fsSL "https://api.bitfocus.io/v1/product/companion/packages?limit=20")
|
||||
PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c '(if type == "array" then . else .packages end) | [.[] | select(.target=="linux-tgz" and (.uri | contains("linux-x64")))] | first')
|
||||
RELEASE=$(echo "$PACKAGE_JSON" | jq -r '.version // empty')
|
||||
ASSET_URL=$(echo "$PACKAGE_JSON" | jq -r '.uri // empty')
|
||||
if [[ -z "$RELEASE" || -z "$ASSET_URL" ]]; then
|
||||
msg_error "Could not resolve a matching Linux x64 Companion package from the Bitfocus API."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${RELEASE}" == "$(cat ~/.bitfocus-companion 2>/dev/null)" ]]; then
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop bitfocus-companion
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_from_url "$ASSET_URL" "/opt/bitfocus-companion"
|
||||
echo "${RELEASE}" >~/.bitfocus-companion
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start bitfocus-companion
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
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}:8000${CL}"
|
||||
@@ -54,7 +54,7 @@ function update_script() {
|
||||
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
|
||||
fi
|
||||
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
|
||||
rm -f /opt/dispatcharr/start-gunicorn.sh
|
||||
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
|
||||
@@ -83,6 +83,9 @@ function update_script() {
|
||||
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
|
||||
@@ -102,35 +105,7 @@ function update_script() {
|
||||
rm -rf .venv
|
||||
$STD uv venv --clear
|
||||
$STD uv sync
|
||||
$STD uv pip install uwsgi gevent celery redis daphne
|
||||
cat <<'EOF' >/opt/dispatcharr/start-uwsgi.sh
|
||||
#!/usr/bin/env bash
|
||||
cd /opt/dispatcharr
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
exec .venv/bin/uwsgi \
|
||||
--chdir=/opt/dispatcharr \
|
||||
--module=dispatcharr.wsgi:application \
|
||||
--master \
|
||||
--workers=4 \
|
||||
--gevent=400 \
|
||||
--http=0.0.0.0:5656 \
|
||||
--http-keepalive=1 \
|
||||
--http-timeout=600 \
|
||||
--socket-timeout=600 \
|
||||
--buffer-size=65536 \
|
||||
--post-buffering=4096 \
|
||||
--lazy-apps \
|
||||
--thunder-lock \
|
||||
--die-on-term \
|
||||
--vacuum
|
||||
EOF
|
||||
chmod +x /opt/dispatcharr/start-uwsgi.sh
|
||||
if grep -q 'start-gunicorn.sh' /etc/systemd/system/dispatcharr.service; then
|
||||
sed -i 's|start-gunicorn.sh|start-uwsgi.sh|g' /etc/systemd/system/dispatcharr.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
$STD uv pip install gunicorn gevent celery redis daphne
|
||||
msg_ok "Updated Dispatcharr Backend"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
____ _ __ ____ ______ _
|
||||
/ __ )(_) /_/ __/___ _______ _______ / ____/___ ____ ___ ____ ____ _____ (_)___ ____
|
||||
/ __ / / __/ /_/ __ \/ ___/ / / / ___/_____/ / / __ \/ __ `__ \/ __ \/ __ `/ __ \/ / __ \/ __ \
|
||||
/ /_/ / / /_/ __/ /_/ / /__/ /_/ (__ )_____/ /___/ /_/ / / / / / / /_/ / /_/ / / / / / /_/ / / / /
|
||||
/_____/_/\__/_/ \____/\___/\__,_/____/ \____/\____/_/ /_/ /_/ .___/\__,_/_/ /_/_/\____/_/ /_/
|
||||
/_/
|
||||
@@ -36,9 +36,9 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "deno" "denoland/deno" "v2.7.5" "Deno is pinned to 2.7.5 because the known WouldBlock: Resource temporarily unavailable (os error 11) Issue"; then
|
||||
if check_for_gh_release "deno" "denoland/deno"; then
|
||||
ARCH=$(uname -m)
|
||||
fetch_and_deploy_gh_release "deno" "denoland/deno" "v2.7.5" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
|
||||
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then
|
||||
|
||||
@@ -35,20 +35,16 @@ function update_script() {
|
||||
systemctl stop snowshare
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
if ! grep -q '^UPLOAD_DIR=' /opt/snowshare.env 2>/dev/null; then
|
||||
msg_info "Migrating uploads to persistent directory"
|
||||
mkdir -p /opt/snowshare_data
|
||||
if [ -d /opt/snowshare/uploads ] && [ -z "$(ls -A /opt/snowshare_data 2>/dev/null)" ]; then
|
||||
mv /opt/snowshare/uploads/* /opt/snowshare_data/ 2>/dev/null || true
|
||||
mv /opt/snowshare/uploads/.[!.]* /opt/snowshare_data/ 2>/dev/null || true
|
||||
rmdir /opt/snowshare/uploads 2>/dev/null || true
|
||||
fi
|
||||
echo "UPLOAD_DIR=/opt/snowshare_data" >>/opt/snowshare.env
|
||||
msg_ok "Migrated uploads to /opt/snowshare_data"
|
||||
fi
|
||||
msg_info "Backing up uploads"
|
||||
[ -d /opt/snowshare/uploads ] && cp -a /opt/snowshare/uploads /opt/.snowshare_uploads_backup
|
||||
msg_ok "Uploads backed up"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
|
||||
|
||||
msg_info "Restoring uploads"
|
||||
[ -d /opt/.snowshare_uploads_backup ] && rm -rf /opt/snowshare/uploads && cp -a /opt/.snowshare_uploads_backup /opt/snowshare/uploads
|
||||
msg_ok "Uploads restored"
|
||||
|
||||
msg_info "Updating Snowshare"
|
||||
cd /opt/snowshare
|
||||
$STD npm ci
|
||||
|
||||
@@ -29,8 +29,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
if check_for_gh_release "soulsync" "Nezreka/SoulSync"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop soulsync
|
||||
@@ -49,12 +47,6 @@ function update_script() {
|
||||
$STD uv pip install -r requirements.txt
|
||||
msg_ok "Updated Python Dependencies"
|
||||
|
||||
msg_info "Building WebUI"
|
||||
cd /opt/soulsync/webui
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
msg_ok "Built WebUI"
|
||||
|
||||
mv /opt/soulsync-config.bak /opt/soulsync/config
|
||||
mv /opt/soulsync-data.bak /opt/soulsync/data
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ function update_script() {
|
||||
systemctl stop thelounge
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "thelounge" "thelounge/thelounge-deb" "binary"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: glabutis
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitfocus/companion
|
||||
|
||||
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 libusb-1.0-0
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Fetching Latest Bitfocus Companion Release"
|
||||
RELEASE_JSON=$(curl -fsSL "https://api.bitfocus.io/v1/product/companion/packages?limit=20")
|
||||
PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c '(if type == "array" then . else .packages end) | [.[] | select(.target=="linux-tgz" and (.uri | contains("linux-x64")))] | first')
|
||||
RELEASE=$(echo "$PACKAGE_JSON" | jq -r '.version // empty')
|
||||
ASSET_URL=$(echo "$PACKAGE_JSON" | jq -r '.uri // empty')
|
||||
if [[ -z "$RELEASE" || -z "$ASSET_URL" ]]; then
|
||||
msg_error "Could not resolve a matching Linux x64 Companion package from the Bitfocus API."
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Found Companion ${RELEASE}"
|
||||
|
||||
fetch_and_deploy_from_url "$ASSET_URL" "/opt/bitfocus-companion"
|
||||
|
||||
msg_info "Installing udev Rules"
|
||||
if [[ -f /opt/bitfocus-companion/50-companion-headless.rules ]]; then
|
||||
cp /opt/bitfocus-companion/50-companion-headless.rules /etc/udev/rules.d/
|
||||
udevadm control --reload-rules
|
||||
udevadm trigger
|
||||
fi
|
||||
msg_ok "Installed udev Rules"
|
||||
|
||||
mkdir -p /opt/bitfocus-companion-config
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/bitfocus-companion.service
|
||||
[Unit]
|
||||
Description=Bitfocus Companion
|
||||
After=network.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/bitfocus-companion/companion_headless.sh --config-dir /opt/bitfocus-companion-config
|
||||
WorkingDirectory=/opt/bitfocus-companion
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
Environment=NODE_ENV=production
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now bitfocus-companion
|
||||
msg_ok "Created Service"
|
||||
|
||||
echo "${RELEASE}" >~/.bitfocus-companion
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -38,7 +38,7 @@ msg_info "Installing Python Dependencies with uv"
|
||||
cd /opt/dispatcharr
|
||||
$STD uv venv --clear
|
||||
$STD uv sync
|
||||
$STD uv pip install uwsgi gevent celery redis daphne
|
||||
$STD uv pip install gunicorn gevent celery redis daphne
|
||||
msg_ok "Installed Python Dependencies"
|
||||
|
||||
msg_info "Configuring Dispatcharr"
|
||||
@@ -118,7 +118,7 @@ server {
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
}
|
||||
|
||||
# All other requests proxy to uWSGI
|
||||
# All other requests proxy to Gunicorn
|
||||
location / {
|
||||
include proxy_params;
|
||||
proxy_pass http://127.0.0.1:5656;
|
||||
@@ -131,30 +131,20 @@ systemctl restart nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/opt/dispatcharr/start-uwsgi.sh
|
||||
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
|
||||
#!/usr/bin/env bash
|
||||
cd /opt/dispatcharr
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
exec .venv/bin/uwsgi \\
|
||||
--chdir=/opt/dispatcharr \\
|
||||
--module=dispatcharr.wsgi:application \\
|
||||
--master \\
|
||||
exec uv run gunicorn \\
|
||||
--workers=4 \\
|
||||
--gevent=400 \\
|
||||
--http=0.0.0.0:5656 \\
|
||||
--http-keepalive=1 \\
|
||||
--http-timeout=600 \\
|
||||
--socket-timeout=600 \\
|
||||
--buffer-size=65536 \\
|
||||
--post-buffering=4096 \\
|
||||
--lazy-apps \\
|
||||
--thunder-lock \\
|
||||
--die-on-term \\
|
||||
--vacuum
|
||||
--worker-class=gevent \\
|
||||
--timeout=300 \\
|
||||
--bind 0.0.0.0:5656 \\
|
||||
dispatcharr.wsgi:application
|
||||
EOF
|
||||
chmod +x /opt/dispatcharr/start-uwsgi.sh
|
||||
chmod +x /opt/dispatcharr/start-gunicorn.sh
|
||||
|
||||
cat <<EOF >/opt/dispatcharr/start-celery.sh
|
||||
#!/usr/bin/env bash
|
||||
@@ -194,7 +184,7 @@ After=network.target postgresql.service redis-server.service
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/dispatcharr
|
||||
ExecStart=/opt/dispatcharr/start-uwsgi.sh
|
||||
ExecStart=/opt/dispatcharr/start-gunicorn.sh
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
User=root
|
||||
|
||||
@@ -31,8 +31,8 @@ cd /opt/docmost
|
||||
# included in GitHub tarballs. The community NoopAuditService exists but
|
||||
# is only exported by CoreModule – child modules such as UserModule cannot
|
||||
# resolve it. Making CoreModule @Global() exposes the token app-wide.
|
||||
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] &&
|
||||
! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
|
||||
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
|
||||
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
|
||||
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
|
||||
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
|
||||
fi
|
||||
@@ -45,7 +45,6 @@ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z
|
||||
-e "s|DRAWIO_URL=.*|DRAWIO_URL=https://embed.diagrams.net|" \
|
||||
-e "s|DISABLE_TELEMETRY=.*|DISABLE_TELEMETRY=true|" \
|
||||
-e "s|APP_URL=.*|APP_URL=http://$LOCAL_IP:3000|" \
|
||||
-e "s|^STORAGE_DRIVER=azure|#STORAGE_DRIVER=azure|" \
|
||||
/opt/docmost/.env
|
||||
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||
$STD pnpm install
|
||||
|
||||
@@ -20,7 +20,7 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
ARCH=$(uname -m)
|
||||
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "v2.7.5" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
|
||||
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
|
||||
fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
|
||||
PROFILARR_VERSION=$(cat ~/.profilarr)
|
||||
|
||||
|
||||
@@ -21,14 +21,12 @@ fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
|
||||
msg_info "Installing SnowShare"
|
||||
cd /opt/snowshare
|
||||
$STD npm ci
|
||||
mkdir -p /opt/snowshare_data
|
||||
cat <<EOF >/opt/snowshare.env
|
||||
DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME"
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 32)"
|
||||
ALLOW_SIGNUP=true
|
||||
NODE_ENV=production
|
||||
UPLOAD_DIR=/opt/snowshare_data
|
||||
EOF
|
||||
set -a
|
||||
source /opt/snowshare.env
|
||||
|
||||
@@ -23,7 +23,6 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.11" setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "soulsync" "Nezreka/SoulSync" "tarball"
|
||||
|
||||
@@ -34,12 +33,6 @@ $STD uv pip install -r requirements.txt --python /opt/soulsync/.venv/bin/python
|
||||
mkdir -p /opt/soulsync/{config,data,logs}
|
||||
msg_ok "Set up Application"
|
||||
|
||||
msg_info "Building WebUI"
|
||||
cd /opt/soulsync/webui
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
msg_ok "Built WebUI"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/soulsync.service
|
||||
[Unit]
|
||||
|
||||
@@ -13,7 +13,6 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "thelounge" "thelounge/thelounge-deb" "binary"
|
||||
systemctl enable -q --now thelounge
|
||||
|
||||
|
||||
@@ -182,20 +182,11 @@ motd_ssh() {
|
||||
echo "export TERM='xterm-256color'" >>/root/.bashrc
|
||||
|
||||
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||
|
||||
echo "[ -t 1 ] || return 0" >"$PROFILE_FILE"
|
||||
echo "echo -e \"\"" >>"$PROFILE_FILE"
|
||||
echo "echo -e \"\"" >"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE"
|
||||
echo "echo \"\"" >>"$PROFILE_FILE"
|
||||
cat <<EOF >>"$PROFILE_FILE"
|
||||
os_display="Unknown OS"
|
||||
if [ -r /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}"
|
||||
fi
|
||||
echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}"
|
||||
EOF
|
||||
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE"
|
||||
|
||||
|
||||
@@ -217,16 +217,22 @@ update_motd_ip() {
|
||||
# Only update if file exists and is from community-scripts
|
||||
if [ -f "$PROFILE_FILE" ] && grep -q "community-scripts" "$PROFILE_FILE" 2>/dev/null; then
|
||||
# Get current values
|
||||
local current_os="$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') - Version: $(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"')"
|
||||
local current_hostname="$(hostname)"
|
||||
local current_ip="$(hostname -I | awk '{print $1}')"
|
||||
|
||||
# Escape sed special chars in replacement strings (& \ |)
|
||||
current_os="${current_os//\\/\\\\}"
|
||||
current_os="${current_os//&/\\&}"
|
||||
current_hostname="${current_hostname//\\/\\\\}"
|
||||
current_hostname="${current_hostname//&/\\&}"
|
||||
current_ip="${current_ip//\\/\\\\}"
|
||||
current_ip="${current_ip//&/\\&}"
|
||||
|
||||
# Update only if values actually changed
|
||||
if ! grep -q "OS:.*$current_os" "$PROFILE_FILE" 2>/dev/null; then
|
||||
sed -i "s|OS:.*|OS: \${GN}$current_os\${CL}\\\"|" "$PROFILE_FILE"
|
||||
fi
|
||||
if ! grep -q "Hostname:.*$current_hostname" "$PROFILE_FILE" 2>/dev/null; then
|
||||
sed -i "s|Hostname:.*|Hostname: \${GN}$current_hostname\${CL}\\\"|" "$PROFILE_FILE"
|
||||
fi
|
||||
@@ -3643,7 +3649,7 @@ start() {
|
||||
run_addon_updates
|
||||
update_motd_ip
|
||||
cleanup_lxc
|
||||
elif ! command -v whiptail &>/dev/null || ! [ -t 0 ] || [[ "$TERM" == "dumb" ]]; then
|
||||
elif ! command -v whiptail &>/dev/null || ! [ -t 0 ]; then
|
||||
msg_info "No interactive terminal detected – defaulting to silent update mode"
|
||||
VERBOSE="no"
|
||||
set_std_mode
|
||||
|
||||
@@ -140,12 +140,10 @@ ensure_profile_loaded() {
|
||||
[[ -n "${_PROFILE_LOADED:-}" ]] && return
|
||||
command -v pveversion &>/dev/null && return
|
||||
|
||||
# Source all profile.d scripts to ensure PATH is complete.
|
||||
# Redirect stdout to suppress banner/MOTD output (e.g. 00_lxc-details.sh)
|
||||
# while still allowing env/PATH exports to take effect.
|
||||
# Source all profile.d scripts to ensure PATH is complete
|
||||
if [[ -d /etc/profile.d ]]; then
|
||||
for script in /etc/profile.d/*.sh; do
|
||||
[[ -r "$script" ]] && source "$script" >/dev/null || true
|
||||
[[ -r "$script" ]] && source "$script" || true
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
@@ -455,20 +455,11 @@ motd_ssh() {
|
||||
grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc
|
||||
|
||||
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||
|
||||
echo "[ -t 1 ] || return 0" >"$PROFILE_FILE"
|
||||
echo "echo -e \"\"" >>"$PROFILE_FILE"
|
||||
echo "echo -e \"\"" >"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE"
|
||||
echo "echo \"\"" >>"$PROFILE_FILE"
|
||||
cat <<EOF >>"$PROFILE_FILE"
|
||||
os_display="Unknown OS"
|
||||
if [ -r /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}"
|
||||
fi
|
||||
echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}"
|
||||
EOF
|
||||
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user