Compare commits

..

9 Commits

Author SHA1 Message Date
CanbiZ (MickLesk) ea54d95f86 Specify version for Ownfoil release deployment 2026-08-17 10:21:09 +02:00
CanbiZ (MickLesk) 22040bd4bd Pin ownfoil release to version 2.3.0 2026-08-17 10:19:45 +02:00
community-scripts-pr-app[bot] bb7721b199 Update CHANGELOG.md (#16573)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-17 07:23:58 +00:00
Tim Moore 22e2a6d73e fix romm: deploy EmulatorJS and Ruffle after the frontend build (#16571) 2026-08-17 09:23:31 +02:00
MickLesk b19dad1809 tools.func: fix invalid find -prune/-delete combination breaking CLEAN_INSTALL 2026-08-16 22:51:27 +02:00
community-scripts-pr-app[bot] 4f04894a19 Update CHANGELOG.md (#16564)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-16 18:43:38 +00:00
Robbie Trencheny 05fdd15406 [FIX] Shelfmark: internal bypasser never starts under the gevent worker (#16495)
* Shelfmark: fix internal bypasser under the gevent worker

The internal captcha bypasser never worked on this install. Shelfmark is served
by gunicorn's GeventWebSocketWorker, and DOCKERMODE controls whether the bypass
browser runs in a helper process "isolated from gunicorn/gevent" (upstream's
_get_via_subprocess). With DOCKERMODE=false the SeleniumBase CDP browser starts
inside the monkey-patched loop, its asyncio websocket never connects, and every
bypass dies at "Pure CDP browser startup timed out after 45s" — searches then
burn their whole retry budget and surface as "mirrors are blocked".

Set DOCKERMODE=true for deployment type 1, and migrate existing installs on
update. The flag is misnamed upstream: it gates gevent isolation, not Docker.

Also drop chromium.service. Nothing in Shelfmark connects to port 9222 — the
bypasser launches its own browser on a random port — so it only consumed
~226MB. With DOCKERMODE enabled it is additionally killed by Shelfmark's
orphan-process reaper (pkill -f chromium) on every bypass and respawned by
systemd, since an LXC shares its PID namespace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ln3yVj3sWHG2c6T78W1we

* Shelfmark: address review — one check, drop comments

Collapse the chromium.service removal and the DOCKERMODE migration into the
single internal-bypasser check, as every affected install has both. Guard the
disable so a second update run does not fail on the removed unit, matching
esphome.sh. Drop the explanatory comments.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ln3yVj3sWHG2c6T78W1we

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 20:43:14 +02:00
community-scripts-pr-app[bot] 92ec089410 Update CHANGELOG.md (#16560)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-16 18:37:34 +00:00
Tobias abc9e569ad tubearchivist: fix: enhance update script (#16521) 2026-08-16 20:37:12 +02:00
10 changed files with 46 additions and 45 deletions
+10
View File
@@ -524,12 +524,22 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-08-17
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571))
## 2026-08-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- [FIX] Shelfmark: internal bypasser never starts under the gevent worker [@robbiet480](https://github.com/robbiet480) ([#16495](https://github.com/community-scripts/ProxmoxVE/pull/16495))
- tubearchivist: fix: enhance update script [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16521](https://github.com/community-scripts/ProxmoxVE/pull/16521))
- tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530))
- wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528))
+3 -3
View File
@@ -29,15 +29,15 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then
RELEASE="2.3.0"
if check_for_gh_release "ownfoil" "a1ex4/ownfoil" "${RELEASE}" "pinned until 2.4.0 (coming soon) is tested, possible Breaking Changes."; then
msg_info "Stopping Service"
systemctl stop ownfoil
msg_ok "Stopped Service"
create_backup /opt/ownfoil/app/config
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "${RELEASE}"
restore_backup
+10 -2
View File
@@ -36,9 +36,18 @@ function update_script() {
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
msg_info "Stopping Service(s)"
systemctl stop shelfmark
[[ -f /etc/systemd/system/chromium.service ]] && systemctl stop chromium
msg_ok "Stopped Service(s)"
if [[ $(sed -n '/_BYPASS=/s/[^=]*=//p' /etc/shelfmark/.env) == "true" ]] &&
[[ $(sed -n '/BYPASSER=/s/[^=]*=//p' /etc/shelfmark/.env) == "false" ]]; then
msg_info "Updating internal bypasser configuration"
systemctl disable -q --now chromium 2>/dev/null || true
rm -f /etc/systemd/system/chromium.service
systemctl daemon-reload
sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env
msg_ok "Updated internal bypasser configuration"
fi
[[ -f /etc/systemd/system/flaresolverr.service ]] && if check_for_gh_release "flaresolverr" "Flaresolverr/Flaresolverr"; then
msg_info "Stopping FlareSolverr service"
systemctl stop flaresolverr
@@ -79,7 +88,6 @@ function update_script() {
msg_info "Starting Service(s)"
systemctl start shelfmark
[[ -f /etc/systemd/system/chromium.service ]] && systemctl start chromium
msg_ok "Started Service(s)"
msg_ok "Updated successfully!"
fi
-10
View File
@@ -35,16 +35,6 @@ function update_script() {
systemctl stop teslamate
msg_ok "Stopped Service"
if [[ ! -d /opt/elixir ]]; then
msg_info "Migrating to newer Elixir (required by TeslaMate)"
$STD apt remove -y elixir
fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip"
for bin in elixir elixirc iex mix; do
ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin"
done
msg_ok "Migrated to newer Elixir"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "teslamate" "teslamate-org/teslamate" "tarball"
msg_info "Building TeslaMate (Patience)"
+14 -3
View File
@@ -35,7 +35,10 @@ function update_script() {
systemctl stop tubearchivist tubearchivist-celery tubearchivist-beat
msg_ok "Stopped Services"
create_backup /opt/tubearchivist/.env
create_backup \
/opt/tubearchivist/.env \
/opt/tubearchivist/cache \
/opt/tubearchivist/backend/run.sh
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tubearchivist" "tubearchivist/tubearchivist" "tarball"
@@ -48,6 +51,8 @@ function update_script() {
mkdir -p /opt/tubearchivist/backend/static
cp -r /opt/tubearchivist/frontend/dist/* /opt/tubearchivist/backend/static/
cp /opt/tubearchivist/docker_assets/backend_start.py /opt/tubearchivist/backend/
rm -rf /opt/tubearchivist/.venv
$STD uv venv /opt/tubearchivist/.venv --python 3.13
$STD uv pip install --python /opt/tubearchivist/.venv/bin/python -r /opt/tubearchivist/backend/requirements.txt
if [[ -f /opt/tubearchivist/backend/requirements.plugins.txt ]]; then
mkdir -p /opt/yt_plugins/bgutil
@@ -59,8 +64,14 @@ function update_script() {
sed -i 's|^TA_APP_DIR=/opt/tubearchivist$|TA_APP_DIR=/opt/tubearchivist/backend|' /opt/tubearchivist/.env
sed -i 's|^TA_CACHE_DIR=/opt/tubearchivist/cache$|TA_CACHE_DIR=/cache|' /opt/tubearchivist/.env
sed -i 's|^TA_MEDIA_DIR=/opt/tubearchivist/media$|TA_MEDIA_DIR=/youtube|' /opt/tubearchivist/.env
ln -sf /opt/tubearchivist/cache /cache
ln -sf /opt/tubearchivist/media /youtube
ln -sfn /opt/tubearchivist/cache /cache
# /youtube may already be a user-managed Proxmox bind mount. Only create the symlink if nothing is there
if [[ ! -e /youtube ]]; then
mkdir -p /opt/tubearchivist/media
ln -sfn /opt/tubearchivist/media /youtube
elif ! mountpoint -q /youtube && [[ ! -L /youtube ]]; then
msg_error "/youtube exists but is neither a mount nor a symlink - check manually"
fi
ln -sf /opt/tubearchivist/.env /opt/tubearchivist/backend/.env
msg_ok "Restored Configuration"
+1 -1
View File
@@ -18,7 +18,7 @@ $STD apt install -y git
msg_ok "Installed Dependencies"
setup_uv
fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball"
fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "2.3.0"
msg_info "Setting up Ownfoil"
cd /opt/ownfoil
+3 -2
View File
@@ -136,8 +136,6 @@ else
fi
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip"
fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z"
msg_info "Creating environment file"
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf
@@ -214,6 +212,9 @@ ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources
ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets
msg_ok "Set up RomM Frontend"
fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip"
fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z"
msg_info "Configuring Angie"
cat <<'EOF' >/etc/angie/http.d/romm.conf
upstream romm_backend {
+1 -16
View File
@@ -116,6 +116,7 @@ else
chromium-common \
chromium \
python3-tk
sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env
msg_ok "Installed internal bypasser dependencies"
fi
@@ -165,22 +166,6 @@ KillMode=mixed
WantedBy=multi-user.target
EOF
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
cat <<EOF >/etc/systemd/system/chromium.service
[Unit]
Description=Chromium Headless Browser
After=network.target
[Service]
User=root
ExecStart=/usr/bin/chromium --headless --no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --hide-scrollbars
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now chromium
fi
if [[ "$DEPLOYMENT_TYPE" == "2" ]]; then
cat <<EOF >/etc/systemd/system/flaresolverr.service
[Unit]
+1 -5
View File
@@ -19,6 +19,7 @@ $STD apt install -y \
erlang \
erlang-dev \
erlang-syntax-tools \
elixir \
mosquitto \
locales
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen
@@ -26,11 +27,6 @@ $STD locale-gen
systemctl enable -q --now mosquitto
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip"
for bin in elixir elixirc iex mix; do
ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin"
done
PG_VERSION="17" setup_postgresql
PG_DB_NAME="teslamate" PG_DB_USER="teslamate" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
NODE_VERSION="22" setup_nodejs
+3 -3
View File
@@ -2542,7 +2542,7 @@ _deploy_source_tarball() {
mkdir -p "$target"
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete
find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf --
fi
tar --no-same-owner -xzf "$tarball" -C "$workdir" || {
@@ -2631,7 +2631,7 @@ _deploy_unpacked_archive() {
# was truncated, the archive was unreadable, or it unpacked to nothing.
mkdir -p "$target"
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete
find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf --
fi
if ! cp -r "$source_dir"/* "$target/"; then
@@ -9372,7 +9372,7 @@ fetch_and_deploy_from_url() {
mkdir -p "$directory"
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete
find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf --
fi
local unpack_tmp