Compare commits

...

36 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
20a6e35a07 Update CHANGELOG.md (#11214)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-27 00:16:00 +00:00
community-scripts-pr-app[bot]
4173579597 Update versions.json (#11213)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-27 01:15:34 +01:00
community-scripts-pr-app[bot]
f8f50f9b00 Update CHANGELOG.md (#11211)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 21:21:27 +00:00
CanbiZ (MickLesk)
fa29f74c31 feat(build.func): add nesting warning for systemd-based distributions (#11208) 2026-01-26 22:21:09 +01:00
community-scripts-pr-app[bot]
e50f3cd4f5 Update CHANGELOG.md (#11210)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 21:21:01 +00:00
K3vin
297a0a00de Fixing Nginx configuration for 1.11.0 installs (#11207) 2026-01-26 22:20:34 +01:00
community-scripts-pr-app[bot]
4e910de96d Update CHANGELOG.md (#11202)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 15:28:00 +00:00
CanbiZ (MickLesk)
b3b67651c9 fix(jellystat): correct WorkingDirectory to /backend for task resolution (#10747) (#11201) 2026-01-26 16:27:33 +01:00
community-scripts-pr-app[bot]
9aadff9c95 Update CHANGELOG.md (#11200)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 13:55:28 +00:00
CanbiZ (MickLesk)
d42dbc155c core: refine cleanup_lxc to safely clear caches (#11197)
Updated the cleanup_lxc function to directly remove cache directories for Python, Node.js, Go, Rust, Ruby, and PHP, instead of relying on package manager commands. Improved error handling to prevent cleanup failures from affecting installs, and clarified documentation to reflect safer, more targeted cache removal.
2026-01-26 14:55:04 +01:00
community-scripts-pr-app[bot]
92f15001b6 Update CHANGELOG.md (#11199)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 13:45:25 +00:00
CanbiZ (MickLesk)
13a4af4300 jotty: full refactor / now use prebuild packages and less ressources (#11059)
* jotty: full refactor / now use prebuild packages and less ressources

* add latest

* llatest
2026-01-26 14:44:59 +01:00
community-scripts-pr-app[bot]
78bc815a4f Update CHANGELOG.md (#11198)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 13:26:01 +00:00
Slaviša Arežina
427986deaf Fix (#11196) 2026-01-26 14:25:34 +01:00
community-scripts-pr-app[bot]
6767ea4420 Update versions.json (#11195)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 13:06:37 +01:00
community-scripts-pr-app[bot]
befc014eb9 Update CHANGELOG.md (#11191)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 07:22:40 +00:00
durzo
35a011e5c5 tracearr: fix install check and update node to version 24 (#11188)
* tracearr: fix install check and update node to version 24

* refactor

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-26 08:22:15 +01:00
community-scripts-pr-app[bot]
b9eef7a257 Update CHANGELOG.md (#11190)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 00:17:36 +00:00
community-scripts-pr-app[bot]
64752790b6 Update versions.json (#11189)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-26 01:17:05 +01:00
community-scripts-pr-app[bot]
cf08e8d644 Update CHANGELOG.md (#11187)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 22:00:32 +00:00
Chris
9603c39487 [FIX] Tautulli: ensure virtualenv is recreated during update; backup tautulli.db (#11182)
* Recreate virtualenv during update; remove some superfluous commands

* backup and restore tautulli.db during update

* ensure clear virtualenv
2026-01-25 23:00:11 +01:00
community-scripts-pr-app[bot]
b53cfe6bbc Update CHANGELOG.md (#11185)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 20:01:55 +00:00
Chris
f05927602c ensure additional JSON files are in place (#11183) 2026-01-25 21:01:31 +01:00
community-scripts-pr-app[bot]
2a234829b8 Update CHANGELOG.md (#11179)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 12:42:34 +00:00
community-scripts-pr-app[bot]
cd678bf8a9 Update CHANGELOG.md (#11178)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 12:42:23 +00:00
CanbiZ (MickLesk)
ac696e22ca Termix: recreate nginx dirs and backup uploads on update (#11169) 2026-01-25 13:42:11 +01:00
community-scripts-pr-app[bot]
3471392fe4 Update CHANGELOG.md (#11177)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 12:42:01 +00:00
CanbiZ (MickLesk)
9f3fa8e46c fix(deluge): correct service paths to /usr/local/bin (#11170) 2026-01-25 13:41:38 +01:00
community-scripts-pr-app[bot]
d91d5d7fd0 Update versions.json (#11176)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 13:06:13 +01:00
community-scripts-pr-app[bot]
377dbcddfc Update CHANGELOG.md (#11171)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 08:05:47 +00:00
Shuo Feng
596f0166dc Karakeep: Add the FFmpeg option to the installation script (#11157)
Co-authored-by: Chris <punk.sand7393@fastmail.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-01-25 09:05:26 +01:00
community-scripts-pr-app[bot]
1b5db3dce7 Update CHANGELOG.md (#11168)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 07:12:12 +00:00
community-scripts-pr-app[bot]
8c28895ec4 Update CHANGELOG.md (#11167)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 07:12:00 +00:00
Chris
918d7c9053 Manyfold: fix permissions error (#11165) 2026-01-25 08:11:48 +01:00
community-scripts-pr-app[bot]
4b83732478 Update CHANGELOG.md (#11166)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-25 07:11:37 +00:00
CanbiZ (MickLesk)
92d33ee5e9 feat(apt-cacher-ng): add avahi-daemon for mDNS service discovery (#11140)
apt-cacher-ng ships with Avahi service config but needs avahi-daemon
to advertise itself via mDNS for auto-apt-proxy discovery.

Closes #11101
2026-01-25 08:10:51 +01:00
23 changed files with 700 additions and 422 deletions

View File

@@ -10,8 +10,58 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2026-01-27
## 2026-01-26
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Ghost: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#11196](https://github.com/community-scripts/ProxmoxVE/pull/11196))
- tracearr: fix install check and update node to version 24 [@durzo](https://github.com/durzo) ([#11188](https://github.com/community-scripts/ProxmoxVE/pull/11188))
- #### ✨ New Features
- jotty: full refactor / prebuild package [@MickLesk](https://github.com/MickLesk) ([#11059](https://github.com/community-scripts/ProxmoxVE/pull/11059))
- #### 💥 Breaking Changes
- Fixing Nginx configuration for 1.11.0 installs [@8b1th3r0](https://github.com/8b1th3r0) ([#11207](https://github.com/community-scripts/ProxmoxVE/pull/11207))
### 💾 Core
- #### 🐞 Bug Fixes
- core: refine cleanup_lxc to safely clear caches [@MickLesk](https://github.com/MickLesk) ([#11197](https://github.com/community-scripts/ProxmoxVE/pull/11197))
- #### ✨ New Features
- core: add nesting warning for systemd-based distributions [@MickLesk](https://github.com/MickLesk) ([#11208](https://github.com/community-scripts/ProxmoxVE/pull/11208))
### 🧰 Tools
- #### 🐞 Bug Fixes
- jellystat: correct WorkingDirectory to /backend [@MickLesk](https://github.com/MickLesk) ([#11201](https://github.com/community-scripts/ProxmoxVE/pull/11201))
## 2026-01-25
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- [FIX] Tautulli: ensure virtualenv is recreated during update; backup tautulli.db [@vhsdream](https://github.com/vhsdream) ([#11182](https://github.com/community-scripts/ProxmoxVE/pull/11182))
- [Fix] Pangolin: ensure additional JSON files are in place [@vhsdream](https://github.com/vhsdream) ([#11183](https://github.com/community-scripts/ProxmoxVE/pull/11183))
- Manyfold: fix permissions error [@vhsdream](https://github.com/vhsdream) ([#11165](https://github.com/community-scripts/ProxmoxVE/pull/11165))
- Termix: recreate nginx dirs and backup uploads on update [@MickLesk](https://github.com/MickLesk) ([#11169](https://github.com/community-scripts/ProxmoxVE/pull/11169))
- Deluge: correct service paths to /usr/local/bin [@MickLesk](https://github.com/MickLesk) ([#11170](https://github.com/community-scripts/ProxmoxVE/pull/11170))
- #### ✨ New Features
- Karakeep: Add the FFmpeg option to the installation script [@vonhyou](https://github.com/vonhyou) ([#11157](https://github.com/community-scripts/ProxmoxVE/pull/11157))
- apt-cacher-ng: add avahi-daemon for mDNS service discovery [@MickLesk](https://github.com/MickLesk) ([#11140](https://github.com/community-scripts/ProxmoxVE/pull/11140))
## 2026-01-24
### 🆕 New Scripts

View File

@@ -26,6 +26,7 @@ function update_script() {
setup_mariadb
NODE_VERSION="22" setup_nodejs
ensure_dependencies git
msg_info "Updating Ghost"
if command -v ghost &>/dev/null; then

View File

@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="jotty"
var_tags="${var_tags:-tasks;notes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-8}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
@@ -35,61 +35,21 @@ function update_script() {
msg_ok "Stopped Service"
msg_info "Backing up configuration & data"
cd /opt/jotty
cp ./.env /opt/app.env
$STD tar -cf /opt/data_config.tar ./data ./config
cp /opt/jotty/.env /opt/app.env
[[ -d /opt/jotty/data ]] && mv /opt/jotty/data /opt/data
msg_ok "Backed up configuration & data"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
msg_info "Updating jotty"
cd /opt/jotty
unset NODE_OPTIONS
export NODE_OPTIONS="--max-old-space-size=3072"
$STD yarn --frozen-lockfile
$STD yarn next telemetry disable
$STD yarn build
[ -d "public" ] && cp -r public .next/standalone/
[ -d "howto" ] && cp -r howto .next/standalone/
mkdir -p .next/standalone/.next
cp -r .next/static .next/standalone/.next/
mv .next/standalone /tmp/jotty_standalone
rm -rf ./* .next .git .gitignore .yarn
mv /tmp/jotty_standalone/* .
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
rm -rf /tmp/jotty_standalone
msg_ok "Updated jotty"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz"
msg_info "Restoring configuration & data"
mv /opt/app.env /opt/jotty/.env
$STD tar -xf /opt/data_config.tar
[[ -d /opt/data ]] && mv /opt/data /opt/jotty/data
msg_ok "Restored configuration & data"
msg_info "Updating Service"
cat <<EOF >/etc/systemd/system/jotty.service
[Unit]
Description=jotty server
After=network.target
[Service]
WorkingDirectory=/opt/jotty
EnvironmentFile=/opt/jotty/.env
ExecStart=/usr/bin/node server.js
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
msg_ok "Updated Service"
msg_info "Starting Service"
systemctl start jotty
msg_ok "Started Service"
rm /opt/data_config.tar
msg_ok "Updated successfully!"
fi
exit

View File

@@ -20,44 +20,44 @@ color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/manyfold ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/manyfold ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then
msg_info "Stopping Services"
systemctl stop manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
msg_ok "Stopped Services"
if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then
msg_info "Stopping Services"
systemctl stop manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
msg_ok "Stopped Services"
msg_info "Backing up Data"
CURRENT_VERSION=$(grep -oP 'APP_VERSION=\K[^ ]+' /opt/manyfold/.env || echo "unknown")
cp -r /opt/manyfold/app/storage /opt/manyfold_storage_backup 2>/dev/null || true
cp -r /opt/manyfold/app/tmp /opt/manyfold_tmp_backup 2>/dev/null || true
cp /opt/manyfold/app/config/credentials.yml.enc /opt/manyfold_credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold/app/config/master.key /opt/manyfold_master.key 2>/dev/null || true
$STD tar -czf "/opt/manyfold_${CURRENT_VERSION}_backup.tar.gz" -C /opt/manyfold app
msg_ok "Backed up Data"
msg_info "Backing up Data"
CURRENT_VERSION=$(grep -oP 'APP_VERSION=\K[^ ]+' /opt/manyfold/.env || echo "unknown")
cp -r /opt/manyfold/app/storage /opt/manyfold_storage_backup 2>/dev/null || true
cp -r /opt/manyfold/app/tmp /opt/manyfold_tmp_backup 2>/dev/null || true
cp /opt/manyfold/app/config/credentials.yml.enc /opt/manyfold_credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold/app/config/master.key /opt/manyfold_master.key 2>/dev/null || true
$STD tar -czf "/opt/manyfold_${CURRENT_VERSION}_backup.tar.gz" -C /opt/manyfold app
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
msg_info "Configuring Manyfold"
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
RELEASE=$(get_latest_github_release "manyfold3d/manyfold")
sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env"
msg_ok "Configured Manyfold"
msg_info "Configuring Manyfold"
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
RELEASE=$(get_latest_github_release "manyfold3d/manyfold")
sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env"
msg_ok "Configured Manyfold"
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
msg_info "Installing Manyfold"
chown -R manyfold:manyfold /home/manyfold/.rbenv
chown -R manyfold:manyfold /opt/manyfold
msg_info "Installing Manyfold"
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
chown -R manyfold:manyfold /opt/manyfold
sudo -u manyfold bash -c '
sudo -u manyfold bash -c '
source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/bin:$PATH"
eval "$(/home/manyfold/.rbenv/bin/rbenv init - bash)"
@@ -70,31 +70,31 @@ function update_script() {
bin/rails db:migrate
bin/rails assets:precompile
'
msg_ok "Installed Manyfold"
msg_ok "Installed Manyfold"
msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Restarting Services"
source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
for f in /etc/systemd/system/manyfold-*.service; do
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
done
systemctl daemon-reload
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
msg_ok "Restarted Services"
msg_ok "Updated successfully!"
fi
exit
msg_info "Restarting Services"
source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
for f in /etc/systemd/system/manyfold-*.service; do
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
done
systemctl daemon-reload
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
msg_ok "Restarted Services"
msg_ok "Updated successfully!"
fi
exit
}
start

View File

@@ -53,6 +53,8 @@ function update_script() {
cp -R .next/standalone ./
chmod +x ./dist/cli.mjs
cp server/db/names.json ./dist/names.json
cp server/db/ios_models.json ./dist/ios_models.json
cp server/db/mac_models.json ./dist/mac_models.json
msg_ok "Updated Pangolin"
msg_info "Restoring config"

View File

@@ -35,9 +35,10 @@ function update_script() {
systemctl stop tautulli
msg_ok "Stopped Service"
msg_info "Backing up config"
msg_info "Backing up config and database"
cp /opt/Tautulli/config.ini /opt/tautulli_config.ini.backup
msg_ok "Backed up config"
cp /opt/Tautulli/tautulli.db /opt/tautulli.db.backup
msg_ok "Backed up config and database"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
@@ -46,17 +47,17 @@ function update_script() {
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
echo "master" >/opt/Tautulli/branch.txt
source /opt/Tautulli/.venv/bin/activate
$STD pip install --upgrade uv
$STD uv pip install -q -r requirements.txt
$STD uv pip install -q pyopenssl
deactivate
$STD uv venv -c
$STD source /opt/Tautulli/.venv/bin/activate
$STD uv pip install -r requirements.txt
$STD uv pip install pyopenssl
msg_ok "Updated Tautulli"
msg_info "Restoring config"
msg_info "Restoring config and database"
cp /opt/tautulli_config.ini.backup /opt/Tautulli/config.ini
rm -f /opt/tautulli_config.ini.backup
msg_ok "Restored config"
cp /opt/tautulli.db.backup /opt/Tautulli/tautulli.db
rm -f /opt/{tautulli_config.ini.backup,tautulli.db.backup}
msg_ok "Restored config and database"
msg_info "Starting Service"
systemctl start tautulli

View File

@@ -36,10 +36,19 @@ function update_script() {
msg_info "Backing up Data"
cp -r /opt/termix/data /opt/termix_data_backup
cp -r /opt/termix/uploads /opt/termix_uploads_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
msg_info "Recreating Directories"
mkdir -p /opt/termix/html \
/opt/termix/nginx \
/opt/termix/nginx/logs \
/opt/termix/nginx/cache \
/opt/termix/nginx/client_body
msg_ok "Recreated Directories"
msg_info "Building Frontend"
cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
@@ -60,9 +69,9 @@ function update_script() {
msg_ok "Set up Production Dependencies"
msg_info "Restoring Data"
mkdir -p /opt/termix/data
cp -r /opt/termix_data_backup/. /opt/termix/data
rm -rf /opt/termix_data_backup
cp -r /opt/termix_data_backup /opt/termix/data
cp -r /opt/termix_uploads_backup /opt/termix/uploads
rm -rf /opt/termix_data_backup /opt/termix_uploads_backup
msg_ok "Restored Data"
msg_info "Updating Frontend Files"

View File

@@ -23,11 +23,13 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/systemd/system/tracearr.service ]]; then
if [[ ! -f /lib/systemd/system/tracearr.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
msg_info "Stopping Services"
systemctl stop tracearr postgresql redis

View File

@@ -19,9 +19,9 @@
"type": "default",
"script": "ct/jotty.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"cpu": 1,
"ram": 1024,
"hdd": 5,
"os": "debian",
"version": "13"
}
@@ -31,10 +31,5 @@
"username": null,
"password": null
},
"notes": [
{
"text": "jotty was previously named rwMarkable",
"type": "info"
}
]
"notes": []
}

View File

@@ -1,8 +1,228 @@
[
{
"name": "webmin/webmin",
"version": "2.621",
"date": "2026-01-26T23:14:03Z"
},
{
"name": "coder/code-server",
"version": "v4.108.2",
"date": "2026-01-26T22:43:09Z"
},
{
"name": "ollama/ollama",
"version": "v0.15.0-rc6",
"date": "2026-01-24T04:10:04Z"
"version": "v0.15.2",
"date": "2026-01-26T22:34:29Z"
},
{
"name": "Forceu/Gokapi",
"version": "v2.1.0",
"date": "2025-08-29T12:56:13Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.2.0-dev.3",
"date": "2026-01-26T21:56:05Z"
},
{
"name": "metabase/metabase",
"version": "v0.57.10.6",
"date": "2026-01-26T21:31:59Z"
},
{
"name": "fccview/jotty",
"version": "1.19.1",
"date": "2026-01-26T21:30:39Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.81.3.rc.2",
"date": "2026-01-26T18:18:16Z"
},
{
"name": "hargata/lubelog",
"version": "v1.5.8",
"date": "2026-01-26T18:18:03Z"
},
{
"name": "mongodb/mongo",
"version": "r8.3.0-alpha2",
"date": "2026-01-26T17:21:09Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "livebook-dev/livebook",
"version": "nightly",
"date": "2026-01-26T16:17:09Z"
},
{
"name": "opencloud-eu/opencloud",
"version": "v5.0.0",
"date": "2026-01-26T15:58:00Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.4.6",
"date": "2026-01-23T15:32:50Z"
},
{
"name": "Athou/commafeed",
"version": "6.1.1",
"date": "2026-01-26T15:14:16Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "@fumadocs/ui@16.4.9",
"date": "2026-01-26T15:02:21Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v2.1.2",
"date": "2026-01-26T14:57:54Z"
},
{
"name": "passbolt/passbolt_api",
"version": "v5.9.0",
"date": "2026-01-26T14:46:28Z"
},
{
"name": "jordan-dalby/ByteStash",
"version": "v1.5.10",
"date": "2026-01-26T14:07:59Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "7.1.0-alpha.2",
"date": "2026-01-26T12:07:12Z"
},
{
"name": "node-red/node-red",
"version": "4.1.4",
"date": "2026-01-26T11:29:13Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2026-01-26T09:30:03Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.13",
"date": "2026-01-06T12:09:32Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.3-rc.3",
"date": "2026-01-26T08:27:48Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.16.1",
"date": "2026-01-26T08:27:11Z"
},
{
"name": "jupyter/notebook",
"version": "v7.5.3",
"date": "2026-01-26T07:28:46Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.16",
"date": "2026-01-17T07:54:15Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.946",
"date": "2026-01-26T06:11:11Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.4",
"date": "2026-01-04T22:41:00Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "9.0.5",
"date": "2026-01-26T03:34:21Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "jeedom/core",
"version": "4.5.2",
"date": "2026-01-26T00:27:06Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.4",
"date": "2026-01-25T22:16:41Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-availability-sync-single-server-resolution",
"date": "2026-01-25T21:05:21Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.5.1",
"date": "2026-01-25T20:50:59Z"
},
{
"name": "esphome/esphome",
"version": "2026.1.2",
"date": "2026-01-25T18:21:29Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.28.1",
"date": "2026-01-25T18:20:14Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.14",
"date": "2026-01-25T17:14:38Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.8.0",
"date": "2026-01-25T13:48:30Z"
},
{
"name": "evcc-io/evcc",
"version": "0.300.6",
"date": "2026-01-25T10:37:05Z"
},
{
"name": "eclipse-mosquitto/mosquitto",
"version": "v2.1.0rc3",
"date": "2026-01-25T09:15:01Z"
},
{
"name": "kimai/kimai",
"version": "2.47.0",
"date": "2026-01-25T09:01:46Z"
},
{
"name": "mayswind/AriaNg",
"version": "1.3.13",
"date": "2026-01-25T07:56:27Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.9.0",
"date": "2026-01-25T00:31:51Z"
},
{
"name": "runtipi/runtipi",
@@ -24,11 +244,6 @@
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.81.0-stable",
"date": "2026-01-24T19:46:15Z"
},
{
"name": "benzino77/tasmocompiler",
"version": "v13.1.0",
@@ -39,16 +254,6 @@
"version": "v1.18.5",
"date": "2026-01-24T17:15:32Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.3",
"date": "2026-01-24T15:58:33Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.13",
"date": "2026-01-06T12:09:32Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.5.1",
@@ -74,66 +279,31 @@
"version": "v1.3.1",
"date": "2026-01-24T13:50:25Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.16",
"date": "2026-01-17T07:54:15Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.3.0",
"date": "2026-01-08T16:08:34Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.4",
"date": "2026-01-04T22:41:00Z"
},
{
"name": "nickheyer/discopanel",
"version": "v1.0.25",
"date": "2026-01-24T05:56:58Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.912",
"date": "2026-01-24T05:56:30Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.4.0",
"date": "2026-01-24T00:51:05Z"
},
{
"name": "jeedom/core",
"version": "4.5.2",
"date": "2026-01-24T00:27:04Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.20.2",
"date": "2026-01-24T00:12:39Z"
},
{
"name": "mongodb/mongo",
"version": "r8.3.0-alpha1",
"date": "2026-01-23T22:42:26Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.17.3",
"date": "2026-01-23T22:02:05Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.2.0-dev.2",
"date": "2026-01-23T21:57:48Z"
},
{
"name": "Donkie/Spoolman",
"version": "v0.23.0",
@@ -149,11 +319,6 @@
"version": "v1.6.7",
"date": "2026-01-12T09:54:36Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2026-01-23T19:39:09Z"
},
{
"name": "apache/tomcat",
"version": "10.1.52",
@@ -179,16 +344,6 @@
"version": "v0.50.3",
"date": "2026-01-23T16:09:10Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.4.6",
"date": "2026-01-23T15:32:50Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.10.0",
@@ -209,46 +364,21 @@
"version": "v1.7.6",
"date": "2026-01-23T09:41:22Z"
},
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.6.0-alpha.2",
"date": "2026-01-23T08:07:05Z"
},
{
"name": "neo4j/neo4j",
"version": "5.26.20",
"date": "2026-01-23T07:30:39Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "8.2.25",
"date": "2026-01-23T07:00:51Z"
},
{
"name": "9001/copyparty",
"version": "v1.20.4",
"date": "2026-01-23T01:29:26Z"
},
{
"name": "esphome/esphome",
"version": "2026.1.1",
"date": "2026-01-22T23:19:21Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.8.0",
"date": "2026-01-22T20:08:17Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.94.1",
"date": "2026-01-22T19:07:16Z"
},
{
"name": "fccview/jotty",
"version": "develop",
"date": "2026-01-22T18:59:33Z"
},
{
"name": "redis/redis",
"version": "8.4.0",
@@ -299,11 +429,6 @@
"version": "2026-01-22-r1",
"date": "2026-01-22T10:20:04Z"
},
{
"name": "eclipse-mosquitto/mosquitto",
"version": "v2.1.0rc2",
"date": "2026-01-22T09:42:43Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.52.9",
@@ -339,11 +464,6 @@
"version": "v2.8.0",
"date": "2025-12-12T20:25:00Z"
},
{
"name": "livebook-dev/livebook",
"version": "nightly",
"date": "2026-01-21T20:40:02Z"
},
{
"name": "Comfy-Org/ComfyUI",
"version": "v0.10.0",
@@ -359,30 +479,15 @@
"version": "jenkins-2.541.1",
"date": "2026-01-21T15:09:10Z"
},
{
"name": "node-red/node-red",
"version": "4.1.3",
"date": "2026-01-07T16:24:23Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.17.0-rc7",
"date": "2026-01-21T12:12:33Z"
},
{
"name": "evcc-io/evcc",
"version": "0.300.5",
"date": "2026-01-21T11:35:44Z"
},
{
"name": "javedh-dev/tracktor",
"version": "1.2.1",
"date": "2026-01-21T09:31:18Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.3-rc.2",
"date": "2026-01-21T08:57:16Z"
"date": "2026-01-21T11:12:28Z"
},
{
"name": "docker/compose",
@@ -404,11 +509,6 @@
"version": "v2.20.5",
"date": "2026-01-21T00:12:33Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-availability-sync-fix",
"date": "2026-01-20T22:11:24Z"
},
{
"name": "rcourtman/Pulse",
"version": "v5.0.17",
@@ -449,11 +549,6 @@
"version": "v14.0.8",
"date": "2026-01-20T15:10:44Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2026-01-20T14:25:19Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.23.0-rc.1",
@@ -469,11 +564,6 @@
"version": "2026.1.1",
"date": "2026-01-20T11:22:06Z"
},
{
"name": "passbolt/passbolt_api",
"version": "v5.9.0-test.1",
"date": "2026-01-20T10:34:53Z"
},
{
"name": "HydroshieldMKII/Guardian",
"version": "v1.3.4",
@@ -539,11 +629,6 @@
"version": "v1.0.0-beta22",
"date": "2026-01-18T22:38:36Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.5.0",
"date": "2026-01-18T22:16:38Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.21.2",
@@ -564,11 +649,6 @@
"version": "2.4",
"date": "2026-01-18T12:12:02Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.14.2",
@@ -589,11 +669,6 @@
"version": "v14.0.1",
"date": "2026-01-17T07:14:19Z"
},
{
"name": "coder/code-server",
"version": "v4.108.1",
"date": "2026-01-17T04:09:09Z"
},
{
"name": "wanetty/upgopher",
"version": "v1.13.0",
@@ -659,11 +734,6 @@
"version": "v4.8.0",
"date": "2026-01-14T17:54:36Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.16.0",
"date": "2026-01-14T16:45:03Z"
},
{
"name": "Bubka/2FAuth",
"version": "v6.0.0",
@@ -744,11 +814,6 @@
"version": "1.1.15",
"date": "2026-01-12T05:38:30Z"
},
{
"name": "hargata/lubelog",
"version": "v1.5.7",
"date": "2026-01-11T19:31:59Z"
},
{
"name": "alexta69/metube",
"version": "2026.01.11",
@@ -794,11 +859,6 @@
"version": "v0.7.2",
"date": "2026-01-10T21:00:12Z"
},
{
"name": "Athou/commafeed",
"version": "6.0.0",
"date": "2026-01-10T20:28:07Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
@@ -824,16 +884,6 @@
"version": "v3007.11",
"date": "2026-01-09T17:23:23Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "@fumadocs/base-ui@16.4.6",
"date": "2026-01-09T10:54:11Z"
},
{
"name": "webmin/webmin",
"version": "2.620",
"date": "2026-01-09T00:17:04Z"
},
{
"name": "ErsatzTV/ErsatzTV",
"version": "v26.1.1",
@@ -849,11 +899,6 @@
"version": "v2.2.0.103-2.2.0.103_canary_2026-01-08",
"date": "2026-01-08T12:41:37Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.2.11",
"date": "2026-01-08T12:15:04Z"
},
{
"name": "requarks/wiki",
"version": "v2.5.311",
@@ -899,11 +944,6 @@
"version": "2.2.16",
"date": "2026-01-07T03:26:27Z"
},
{
"name": "kimai/kimai",
"version": "2.46.0",
"date": "2026-01-07T00:19:31Z"
},
{
"name": "caddyserver/caddy",
"version": "v2.10.2",
@@ -957,7 +997,7 @@
{
"name": "mealie-recipes/mealie",
"version": "v3.9.2",
"date": "2026-01-02T19:40:19Z"
"date": "2026-01-02T19:40:09Z"
},
{
"name": "gotify/server",
@@ -1004,11 +1044,6 @@
"version": "v1.3.7",
"date": "2025-12-25T11:08:14Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.28.0",
"date": "2025-12-24T19:27:21Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.4",
@@ -1029,16 +1064,6 @@
"version": "v5.7",
"date": "2025-12-23T14:53:51Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v1.6.11",
"date": "2025-12-23T10:40:42Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.13",
"date": "2025-12-23T10:14:48Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.5",
@@ -1049,11 +1074,6 @@
"version": "v4.0.16.2944",
"date": "2025-11-05T01:56:48Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.7.1",
"date": "2025-12-21T17:06:17Z"
},
{
"name": "ventoy/Ventoy",
"version": "v1.1.10",
@@ -1099,11 +1119,6 @@
"version": "7.4.6",
"date": "2025-12-18T07:00:26Z"
},
{
"name": "opencloud-eu/opencloud",
"version": "v4.1.0",
"date": "2025-12-15T18:53:25Z"
},
{
"name": "docmost/docmost",
"version": "v0.24.1",
@@ -1114,11 +1129,6 @@
"version": "v5.0.87",
"date": "2025-12-14T08:35:11Z"
},
{
"name": "mayswind/AriaNg",
"version": "1.3.12",
"date": "2025-12-14T02:58:24Z"
},
{
"name": "martabal/qbittorrent-exporter",
"version": "v1.13.2",
@@ -1444,11 +1454,6 @@
"version": "v2.2.2",
"date": "2025-10-06T21:31:07Z"
},
{
"name": "jordan-dalby/ByteStash",
"version": "v1.5.9",
"date": "2025-10-06T08:34:01Z"
},
{
"name": "thomiceli/opengist",
"version": "v1.11.1",
@@ -1519,11 +1524,6 @@
"version": "v0.11.0",
"date": "2025-09-01T16:19:38Z"
},
{
"name": "Forceu/Gokapi",
"version": "v2.1.0",
"date": "2025-08-29T12:56:13Z"
},
{
"name": "janeczku/calibre-web",
"version": "0.6.25",

View File

@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Apt-Cacher NG"
DEBIAN_FRONTEND=noninteractive $STD apt -o Dpkg::Options::="--force-confold" install -y apt-cacher-ng
DEBIAN_FRONTEND=noninteractive $STD apt -o Dpkg::Options::="--force-confold" install -y apt-cacher-ng avahi-daemon
sed -i 's/# PassThroughPattern: .* # this would allow CONNECT to everything/PassThroughPattern: .*/' /etc/apt-cacher-ng/acng.conf
cat <<EOF >/etc/apt/apt.conf.d/00aptproxy.conf
Acquire::http::Proxy "http://localhost:3142";

View File

@@ -38,7 +38,7 @@ After=network-online.target
[Service]
Type=simple
UMask=007
ExecStart=/usr/bin/deluged -d
ExecStart=/usr/local/bin/deluged -d
Restart=on-failure
TimeoutStopSec=300
@@ -56,7 +56,7 @@ Wants=deluged.service
[Service]
Type=simple
UMask=027
ExecStart=/usr/bin/deluge-web -d
ExecStart=/usr/local/bin/deluge-web -d
Restart=on-failure
[Install]

View File

@@ -17,7 +17,8 @@ msg_info "Installing Dependencies"
$STD apt install -y \
nginx \
ca-certificates \
libjemalloc2
libjemalloc2 \
git
msg_ok "Installed Dependencies"
setup_mariadb

View File

@@ -14,33 +14,16 @@ network_check
update_os
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
msg_info "Installing ${APPLICATION}"
cd /opt/jotty
unset NODE_OPTIONS
export NODE_OPTIONS="--max-old-space-size=3072"
$STD yarn --frozen-lockfile
$STD yarn next telemetry disable
$STD yarn build
[ -d "public" ] && cp -r public .next/standalone/
[ -d "howto" ] && cp -r howto .next/standalone/
mkdir -p .next/standalone/.next
cp -r .next/static .next/standalone/.next/
mv .next/standalone /tmp/jotty_standalone
rm -rf ./* .next .git .gitignore .yarn
mv /tmp/jotty_standalone/* .
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
rm -rf /tmp/jotty_standalone
fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz"
msg_info "Setup jotty"
mkdir -p data/{users,checklists,notes}
cat <<EOF >/opt/jotty/.env
NODE_ENV=production
# --- Uncomment to enable
# APP_URL=https://your-jotty-domain.com
# INTERNAL_API_URL=http://localhost:3000
# HTTPS=true
# SERVE_PUBLIC_IMAGES=yes
# SERVE_PUBLIC_FILES=yes
@@ -53,12 +36,11 @@ NODE_ENV=production
# SSO_MODE=oidc
# OIDC_ISSUER=<your-oidc-issuer-url>
# OIDC_CLIENT_ID=<oidc-client-id>
# APP_URL=<https://app.domain.tld>
# SSO_FALLBACK_LOCAL=yes
# OIDC_CLIENT_SECRET=your_client_secret
# OIDC_ADMIN_GROUPS=admins
EOF
msg_ok "Installed ${APPLICATION}"
msg_ok "Setup jotty"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/jotty.service

View File

@@ -19,7 +19,8 @@ $STD apt install -y \
ca-certificates \
chromium \
graphicsmagick \
ghostscript
ghostscript \
ffmpeg
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "monolith" "Y2Z/monolith" "singlefile" "latest" "/usr/bin" "monolith-gnu-linux-x86_64"

View File

@@ -15,12 +15,12 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
libarchive-dev \
git \
libmariadb-dev \
redis-server \
nginx \
libassimp-dev
libarchive-dev \
git \
libmariadb-dev \
redis-server \
nginx \
libassimp-dev
msg_ok "Installed Dependencies"
setup_imagemagick
@@ -78,8 +78,7 @@ $STD mkdir -p /opt/manyfold_data
msg_ok "Configured Manyfold"
msg_info "Installing Manyfold"
chown -R manyfold:manyfold /home/manyfold/.rbenv
chown -R manyfold:manyfold /opt/manyfold
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
chmod +x /opt/manyfold/user_setup.sh
$STD npm install --global corepack
$STD sudo -u manyfold bash /opt/manyfold/user_setup.sh
@@ -91,7 +90,7 @@ source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
for f in /etc/systemd/system/manyfold-*.service; do
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
done
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
cat <<EOF >/etc/nginx/sites-available/manyfold.conf

View File

@@ -47,6 +47,8 @@ cd /opt/pangolin
EOF
chmod +x /usr/local/bin/pangctl ./dist/cli.mjs
cp server/db/names.json ./dist/names.json
cp server/db/ios_models.json ./dist/ios_models.json
cp server/db/mac_models.json ./dist/mac_models.json
mkdir -p /var/config
cat <<EOF >/opt/pangolin/config/config.yml

View File

@@ -25,9 +25,10 @@ cd /opt/Tautulli
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
echo "master" >/opt/Tautulli/branch.txt
uv venv -q
uv pip install -q -r requirements.txt
uv pip install -q pyopenssl
$STD uv venv
$STD source /opt/Tautulli/.venv/bin/activate
$STD uv pip install -r requirements.txt
$STD uv pip install pyopenssl
msg_ok "Installed Tautulli"
msg_info "Creating Service"

View File

@@ -71,18 +71,31 @@ events {
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /opt/termix/nginx/logs/access.log;
client_body_temp_path /opt/termix/nginx/client_body;
proxy_temp_path /opt/termix/nginx/proxy_temp;
fastcgi_temp_path /opt/termix/nginx/fastcgi_temp;
uwsgi_temp_path /opt/termix/nginx/uwsgi_temp;
scgi_temp_path /opt/termix/nginx/scgi_temp;
sendfile on;
keepalive_timeout 65;
client_header_timeout 300s;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
server {
listen 80;
server_name _;
server_name localhost;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
@@ -96,10 +109,25 @@ http {
location / {
root /opt/termix/html;
index index.html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~* \.map$ {
return 404;
access_log off;
log_not_found off;
}
location ~ ^/users/sessions(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/users(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
@@ -109,7 +137,7 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ {
location ~ ^/version(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
@@ -118,39 +146,153 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/(database|db)(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
location ~ ^/releases(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/alerts(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/rbac(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/credentials(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
location ~ ^/snippets(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/terminal(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/database(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
proxy_buffering off;
}
location ~ ^/db(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
proxy_buffering off;
}
location ~ ^/encryption(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /ssh/quick-connect {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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;
}
location /ssh/ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /ssh/websocket/ {
proxy_pass http://127.0.0.1:30002/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_connect_timeout 10s;
proxy_buffering off;
proxy_request_buffering off;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
location /ssh/tunnel/ {
@@ -158,59 +300,153 @@ http {
proxy_http_version 1.1;
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;
}
location /ssh/file_manager/recent {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /ssh/file_manager/pinned {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /ssh/file_manager/shortcuts {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /ssh/file_manager/sudo-password {
proxy_pass http://127.0.0.1:30004;
proxy_http_version 1.1;
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;
}
location /ssh/file_manager/ssh/ {
client_max_body_size 5G;
client_body_timeout 300s;
proxy_pass http://127.0.0.1:30004;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
proxy_buffering off;
}
location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ {
location ~ ^/network-topology(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location /health {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
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;
}
location ~ ^/(status|metrics)(/.*)?$ {
location ~ ^/status(/.*)?$ {
proxy_pass http://127.0.0.1:30005;
proxy_http_version 1.1;
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;
}
location ~ ^/(uptime|activity)(/.*)?$ {
location ~ ^/metrics(/.*)?$ {
proxy_pass http://127.0.0.1:30005;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
location ~ ^/uptime(/.*)?$ {
proxy_pass http://127.0.0.1:30006;
proxy_http_version 1.1;
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;
}
location ~ ^/activity(/.*)?$ {
proxy_pass http://127.0.0.1:30006;
proxy_http_version 1.1;
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;
}
location ~ ^/dashboard/preferences(/.*)?$ {
proxy_pass http://127.0.0.1:30006;
proxy_http_version 1.1;
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;
}
location ^~ /docker/console/ {
proxy_pass http://127.0.0.1:30008/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_connect_timeout 10s;
proxy_buffering off;
proxy_request_buffering off;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
location ~ ^/docker(/.*)?$ {
@@ -218,10 +454,18 @@ http {
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /opt/termix/html;
}
}
}
EOF

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y redis-server
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
NODE_VERSION="24" setup_nodejs
PG_VERSION="18" setup_postgresql
msg_info "Installing pnpm"

View File

@@ -1134,6 +1134,10 @@ load_vars_file() {
msg_warn "Invalid nesting value '$var_val' in $file (must be 0 or 1), ignoring"
continue
fi
# Warn about potential issues with systemd-based OS when nesting is disabled via vars file
if [[ "$var_val" == "0" && "${var_os:-debian}" != "alpine" ]]; then
msg_warn "Nesting disabled in $file - modern systemd-based distributions may require nesting for proper operation"
fi
;;
var_keyctl)
if [[ "$var_val" != "0" && "$var_val" != "1" ]]; then
@@ -2394,6 +2398,12 @@ advanced_settings() {
else
if [ $? -eq 1 ]; then
_enable_nesting="0"
# Warn about potential issues with systemd-based OS when nesting is disabled
if [[ "$var_os" != "alpine" ]]; then
whiptail --backtitle "Proxmox VE Helper Scripts" \
--title "⚠️ NESTING WARNING" \
--msgbox "Modern systemd-based distributions (Debian 13+, Ubuntu 24.04+, etc.) may require nesting to be enabled for proper operation.\n\nWithout nesting, the container may start in a degraded state with failing services (error 243/CREDENTIALS).\n\nIf you experience issues, enable nesting in the container options." 14 68
fi
else
((STEP--))
continue

View File

@@ -815,11 +815,9 @@ is_verbose_mode() {
# ------------------------------------------------------------------------------
# cleanup_lxc()
#
# - Comprehensive cleanup of package managers, caches, and logs
# - Supports Alpine (apk), Debian/Ubuntu (apt), and language package managers
# - Cleans: Python (pip/uv), Node.js (npm/yarn/pnpm), Go, Rust, Ruby, PHP
# - Truncates log files and vacuums systemd journal
# - Run at end of container creation to minimize disk usage
# - Cleans package manager and language caches (safe for installs AND updates)
# - Supports Alpine (apk), Debian/Ubuntu (apt), Python, Node.js, Go, Rust, Ruby, PHP
# - Uses fallback error handling to prevent cleanup failures from breaking installs
# ------------------------------------------------------------------------------
cleanup_lxc() {
msg_info "Cleaning up"
@@ -828,32 +826,52 @@ cleanup_lxc() {
$STD apk cache clean || true
rm -rf /var/cache/apk/*
else
$STD apt -y autoremove || true
$STD apt -y autoclean || true
$STD apt -y clean || true
$STD apt -y autoremove 2>/dev/null || msg_warn "apt autoremove failed (non-critical)"
$STD apt -y autoclean 2>/dev/null || msg_warn "apt autoclean failed (non-critical)"
$STD apt -y clean 2>/dev/null || msg_warn "apt clean failed (non-critical)"
fi
# Clear temp artifacts (keep sockets/FIFOs; ignore errors)
find /tmp /var/tmp -type f -name 'tmp*' -delete 2>/dev/null || true
find /tmp /var/tmp -type f -name 'tempfile*' -delete 2>/dev/null || true
# Node.js npm - directly remove cache directory
# npm cache clean/verify can fail with ENOTEMPTY errors, so we skip them
# Python
if command -v pip &>/dev/null; then
rm -rf /root/.cache/pip 2>/dev/null || true
fi
if command -v uv &>/dev/null; then
rm -rf /root/.cache/uv 2>/dev/null || true
fi
# Node.js
if command -v npm &>/dev/null; then
rm -rf /root/.npm/_cacache /root/.npm/_logs 2>/dev/null || true
fi
# Node.js yarn
if command -v yarn &>/dev/null; then yarn cache clean &>/dev/null || true; fi
# Node.js pnpm
if command -v pnpm &>/dev/null; then pnpm store prune &>/dev/null || true; fi
# Go
if command -v go &>/dev/null; then $STD go clean -cache -modcache || true; fi
# Rust cargo
if command -v cargo &>/dev/null; then $STD cargo clean || true; fi
# Ruby gem
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
# Composer (PHP)
if command -v composer &>/dev/null; then COMPOSER_ALLOW_SUPERUSER=1 $STD composer clear-cache || true; fi
if command -v yarn &>/dev/null; then
rm -rf /root/.cache/yarn /root/.yarn/cache 2>/dev/null || true
fi
if command -v pnpm &>/dev/null; then
pnpm store prune &>/dev/null || true
fi
# Go (only build cache, not modules)
if command -v go &>/dev/null; then
$STD go clean -cache 2>/dev/null || true
fi
# Rust (only registry cache, not build artifacts)
if command -v cargo &>/dev/null; then
rm -rf /root/.cargo/registry/cache /root/.cargo/.package-cache 2>/dev/null || true
fi
# Ruby
if command -v gem &>/dev/null; then
rm -rf /root/.gem/cache 2>/dev/null || true
fi
# PHP
if command -v composer &>/dev/null; then
rm -rf /root/.composer/cache 2>/dev/null || true
fi
msg_ok "Cleaned"
}

View File

@@ -265,7 +265,7 @@ After=network.target postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=${INSTALL_PATH}
WorkingDirectory=${INSTALL_PATH}/backend
EnvironmentFile=${CONFIG_PATH}
ExecStart=/usr/bin/node ${INSTALL_PATH}/backend/server.js
Restart=always