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]