From 6a33fc45ad7be4671023939b982db9e914e140b1 Mon Sep 17 00:00:00 2001 From: MickLesk <47820557+MickLesk@users.noreply.github.com> Date: Fri, 25 Sep 2026 11:27:02 +0200 Subject: [PATCH] Let ArchiveBox reach 0.9 instead of staying on 0.7.4 uv pip install --system targets the container's Python 3.11, and every ArchiveBox release from 0.9 on requires 3.13, so the resolver silently fell back to 0.7.4. The package now lives in its own 3.13 venv, with the interpreter outside root's home because ArchiveBox drops privileges while importing. The expect block is gone: init and createsuperuser both run unattended now, and the server moved to its new default port. --- ct/archivebox.sh | 41 ++++++++++++++++++++----- install/archivebox-install.sh | 57 ++++++++++++----------------------- 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/ct/archivebox.sh b/ct/archivebox.sh index d2850c813..cad62292c 100644 --- a/ct/archivebox.sh +++ b/ct/archivebox.sh @@ -32,6 +32,7 @@ function update_script() { fi NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs + export UV_PYTHON_INSTALL_DIR="/opt/archivebox/python" PYTHON_VERSION="3.13" setup_uv ensure_dependencies chromium @@ -40,15 +41,41 @@ function update_script() { systemctl stop archivebox msg_ok "Stopped Service" - msg_info "Upgrading Playwright" - $STD uv pip install playwright --system --break-system-packages - $STD playwright install-deps chromium - msg_ok "Upgraded Playwright" + # Earlier installs used the system interpreter, which caps ArchiveBox at 0.7.4. + if [[ ! -x /opt/archivebox/venv/bin/archivebox ]]; then + msg_info "Moving ArchiveBox to its own Python 3.13 environment" + $STD uv venv --python 3.13 /opt/archivebox/venv + # Keep whatever port this container already answers on, or a reverse proxy in front + # of it would silently stop resolving. + local port + port="$(awk -F: '/^ExecStart=/ {print $NF}' /etc/systemd/system/archivebox.service 2>/dev/null)" + [[ "$port" =~ ^[0-9]+$ ]] || port=5797 + cat </etc/systemd/system/archivebox.service +[Unit] +Description=ArchiveBox Server +After=network.target + +[Service] +User=archivebox +WorkingDirectory=/opt/archivebox/data +ExecStart=/opt/archivebox/venv/bin/archivebox server 0.0.0.0:${port} +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + systemctl daemon-reload + msg_ok "Moved ArchiveBox to its own Python 3.13 environment (port ${port})" + fi msg_info "Updating ArchiveBox" + $STD uv pip install --python /opt/archivebox/venv/bin/python --upgrade archivebox playwright + $STD /opt/archivebox/venv/bin/playwright install-deps chromium + chown -R archivebox:archivebox /opt/archivebox/python /opt/archivebox/venv + # Without this a shell still reaches the old 0.7.4 entry point against a 0.9 collection. + ln -sf /opt/archivebox/venv/bin/archivebox /usr/local/bin/archivebox cd /opt/archivebox/data - $STD uv pip install --system --break-system-packages --upgrade --no-reinstall archivebox - sudo -u archivebox archivebox init + $STD sudo -u archivebox /opt/archivebox/venv/bin/archivebox init msg_ok "Updated ArchiveBox" msg_info "Starting Service" @@ -65,4 +92,4 @@ 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}:8000/admin/login${CL}" +echo -e "${GATEWAY}${BGN}http://${IP}:5797/admin/login${CL}" diff --git a/install/archivebox-install.sh b/install/archivebox-install.sh index 5ae2c25e9..db3c9fdcb 100644 --- a/install/archivebox-install.sh +++ b/install/archivebox-install.sh @@ -16,7 +16,6 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ git \ - expect \ libssl-dev \ libldap2-dev \ libsasl2-dev \ @@ -26,51 +25,33 @@ $STD apt-get install -y \ chromium msg_ok "Installed Dependencies" -msg_info "Installing Python Dependencies" -$STD apt-get install -y \ - python3-ldap \ - python3-msgpack \ - python3-regex -msg_ok "Installed Python Dependencies" - NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs +# ArchiveBox drops privileges on import, so its interpreter may not sit in root's home. +export UV_PYTHON_INSTALL_DIR="/opt/archivebox/python" PYTHON_VERSION="3.13" setup_uv -msg_info "Installing Playwright" -$STD uv pip install playwright --system --break-system-packages -$STD playwright install-deps chromium -msg_ok "Installed Playwright" - msg_info "Installing ArchiveBox" mkdir -p /opt/archivebox/{data,.npm,.cache,.local} $STD adduser --system --shell /bin/bash --gecos 'Archive Box User' --group --disabled-password --home /home/archivebox archivebox -chown -R archivebox:archivebox /opt/archivebox/{data,.npm,.cache,.local} +# A venv, not --system: the system interpreter is 3.11 and silently caps us at 0.7.4. +$STD uv venv --python 3.13 /opt/archivebox/venv +$STD uv pip install --python /opt/archivebox/venv/bin/python archivebox playwright +$STD /opt/archivebox/venv/bin/playwright install-deps chromium +ln -sf /opt/archivebox/venv/bin/archivebox /usr/local/bin/archivebox +chown -R archivebox:archivebox /opt/archivebox chmod -R 755 /opt/archivebox/data -$STD uv pip install archivebox --system --break-system-packages -cd /opt/archivebox/data -expect </etc/systemd/system/archivebox.service [Unit] @@ -80,7 +61,7 @@ After=network.target [Service] User=archivebox WorkingDirectory=/opt/archivebox/data -ExecStart=/usr/local/bin/archivebox server 0.0.0.0:8000 +ExecStart=/opt/archivebox/venv/bin/archivebox server 0.0.0.0:5797 Restart=always [Install]