mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-08-20 03:22:43 +02:00
05fdd15406
* 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>
105 lines
3.5 KiB
Bash
105 lines
3.5 KiB
Bash
#!/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: vhsdream
|
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
# Source: https://github.com/calibrain/shelfmark
|
|
|
|
APP="shelfmark"
|
|
var_tags="${var_tags:-ebooks}"
|
|
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}"
|
|
|
|
header_info "$APP"
|
|
variables
|
|
color
|
|
catch_errors
|
|
|
|
function update_script() {
|
|
header_info
|
|
check_container_storage
|
|
check_container_resources
|
|
|
|
if [[ ! -d /opt/shelfmark ]]; then
|
|
msg_error "No ${APP} Installation Found!"
|
|
exit
|
|
fi
|
|
|
|
NODE_VERSION="24" setup_nodejs
|
|
PYTHON_VERSION="3.14" setup_uv
|
|
|
|
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
|
msg_info "Stopping Service(s)"
|
|
systemctl stop shelfmark
|
|
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
|
|
msg_ok "Stopped FlareSolverr service"
|
|
|
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
|
|
|
msg_info "Starting FlareSolverr Service"
|
|
systemctl start flaresolverr
|
|
msg_ok "Started FlareSolverr Service"
|
|
msg_ok "Updated FlareSolverr"
|
|
fi
|
|
|
|
create_backup /opt/shelfmark/start.sh
|
|
if command -v chromedriver &>/dev/null; then
|
|
$STD apt remove -y chromium-driver
|
|
fi
|
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
|
|
restore_backup
|
|
RELEASE_VERSION=$(cat "$HOME/.shelfmark")
|
|
|
|
msg_info "Updating Shelfmark"
|
|
export VIRTUAL_ENV=/opt/shelfmark/venv
|
|
sed -i "s/^RELEASE_VERSION=.*/RELEASE_VERSION=$RELEASE_VERSION/" /etc/shelfmark/.env
|
|
cd /opt/shelfmark/src/frontend
|
|
$STD npm ci
|
|
$STD npm run build
|
|
mv /opt/shelfmark/src/frontend/dist /opt/shelfmark/frontend-dist
|
|
cd /opt/shelfmark
|
|
$STD uv venv -c ./venv
|
|
$STD source ./venv/bin/activate
|
|
if [[ $(sed -n '/_BYPASS=/s/[^=]*=//p' /etc/shelfmark/.env) == "true" ]] && [[ $(sed -n '/BYPASSER=/s/[^=]*=//p' /etc/shelfmark/.env) == "false" ]]; then
|
|
$STD uv sync --active --locked --no-default-groups --extra browser
|
|
else
|
|
$STD uv sync --active --locked --no-default-groups
|
|
fi
|
|
msg_ok "Updated Shelfmark"
|
|
|
|
msg_info "Starting Service(s)"
|
|
systemctl start shelfmark
|
|
msg_ok "Started Service(s)"
|
|
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}http://${IP}:8084${CL}"
|