Keep setup follow-up commands usable

This commit is contained in:
Nick Sweeting 2026-08-13 01:22:05 -07:00
parent 9a74934667
commit 25cf2c7a80
No known key found for this signature in database
2 changed files with 52 additions and 30 deletions

View File

@ -37,7 +37,7 @@ def test_setup_script_bootstraps_locked_abxpkg_version():
prepare_function = script.partition("prepare_abxpkg_environment() {")[2].partition("\n}")[0]
install_function = script.partition("install_archivebox_with_uv() {")[2].partition("\n}")[0]
assert 'ABXPKG_PACKAGE="${ABXPKG_PACKAGE:-abxpkg==1.12.58}"' in script
assert 'ABXPKG_PACKAGE="${ABXPKG_PACKAGE:-abxpkg==1.12.59}"' in script
assert 'ARCHIVEBOX_PACKAGE="${ARCHIVEBOX_PACKAGE:-archivebox}"' in script
assert '--prerelease allow --upgrade "$ARCHIVEBOX_PACKAGE"' in install_function
assert "fix_root_install_ownership" in prepare_function
@ -58,6 +58,9 @@ def test_setup_script_prints_root_safe_runtime_commands():
script = SETUP_SCRIPT.read_text()
assert 'echo " cd $ARCHIVEBOX_DATA_DIR' in script
assert 'FOLLOWUP_SUDO="sudo "' in script
assert '${FOLLOWUP_SUDO}docker compose run --rm archivebox add' in script
assert '${FOLLOWUP_SUDO}archivebox add' in script
assert "at ~/archivebox/data" not in script
assert "Server started on http://0.0.0.0" not in script
assert "server --daemonize 0.0.0.0:8000" in script
@ -66,6 +69,15 @@ def test_setup_script_prints_root_safe_runtime_commands():
assert "--connect-timeout 1 --max-time 2" in script
def test_setup_script_pulls_docker_image_once_and_reports_unavailable_docker_accurately():
script = SETUP_SCRIPT.read_text()
install_flow = script.partition("prepare_abxpkg_environment")[2]
assert install_flow.count("docker_pull_archivebox") == 1
assert "Docker wasn't found" not in install_flow
assert "not installed, not running, or not accessible to this user" in install_flow
def test_setup_script_does_not_fail_when_clear_cannot_use_terminal():
script = SETUP_SCRIPT.read_text()

View File

@ -25,6 +25,7 @@ RUNNING_AS_ROOT="false"
ARCHIVEBOX_SYSTEM_USER="archivebox"
ARCHIVEBOX_SYSTEM_UID=""
ARCHIVEBOX_SYSTEM_GID=""
FOLLOWUP_SUDO=""
if [ "$(id -u)" -eq 0 ]; then
RUNNING_AS_ROOT="true"
@ -70,13 +71,17 @@ if [ "$(id -u)" -eq 0 ]; then
export HOME
fi
if [ "$RUNNING_AS_ROOT" = "true" ] && [ -n "${SUDO_USER:-}" ] && [ "$SUDO_USER" != "root" ]; then
FOLLOWUP_SUDO="sudo "
fi
ARCHIVEBOX_BRANCH="${ARCHIVEBOX_BRANCH:-dev}"
ARCHIVEBOX_IMAGE="${ARCHIVEBOX_IMAGE:-archivebox/archivebox:dev}"
ARCHIVEBOX_PYTHON="${ARCHIVEBOX_PYTHON:-3.13}"
ARCHIVEBOX_PACKAGE="${ARCHIVEBOX_PACKAGE:-archivebox}"
ARCHIVEBOX_PLATFORM="${ARCHIVEBOX_PLATFORM:-}"
ARCHIVEBOX_COMPOSE_URL="${ARCHIVEBOX_COMPOSE_URL:-https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/${ARCHIVEBOX_BRANCH}/docker-compose.yml}"
ABXPKG_PACKAGE="${ABXPKG_PACKAGE:-abxpkg==1.12.58}"
ABXPKG_PACKAGE="${ABXPKG_PACKAGE:-abxpkg==1.12.59}"
ABXPKG_LIB_DIR="${ABXPKG_LIB_DIR:-$HOME/.cache/archivebox/setup-abxpkg}"
ARCHIVEBOX_HOME_DIR="$HOME/archivebox"
ARCHIVEBOX_DATA_DIR="$ARCHIVEBOX_HOME_DIR/data"
@ -344,7 +349,12 @@ if resolve_setup_binary docker env false 2>/dev/null; then
DOCKER_BINARY="$ABXPKG_LIB_DIR/env/bin/docker"
fi
if [ -n "$DOCKER_BINARY" ] && "$DOCKER_BINARY" compose version > /dev/null && docker_pull_archivebox; then
DOCKER_IMAGE_READY="false"
if [ -n "$DOCKER_BINARY" ] && docker_pull_archivebox; then
DOCKER_IMAGE_READY="true"
fi
if [ "$DOCKER_IMAGE_READY" = "true" ] && "$DOCKER_BINARY" compose version > /dev/null; then
resolve_setup_curl
echo "[+] Initializing an ArchiveBox data folder at $ARCHIVEBOX_DATA_DIR using Docker Compose..."
ensure_archivebox_data_dir || exit 1
@ -367,16 +377,16 @@ if [ -n "$DOCKER_BINARY" ] && "$DOCKER_BINARY" compose version > /dev/null && do
echo
echo "[√] Server started on http://127.0.0.1:8000 and data directory initialized in $ARCHIVEBOX_DATA_DIR. Usage:"
echo " cd $ARCHIVEBOX_HOME_DIR"
echo " docker compose ps"
echo " docker compose down"
echo " ARCHIVEBOX_IMAGE=$ARCHIVEBOX_IMAGE docker compose pull"
echo " docker compose up"
echo " docker compose run --rm archivebox manage createsuperuser"
echo " docker compose run --rm archivebox add 'https://example.com'"
echo " docker compose run --rm archivebox list"
echo " docker compose run --rm archivebox help"
echo " ${FOLLOWUP_SUDO}docker compose ps"
echo " ${FOLLOWUP_SUDO}docker compose down"
echo " ${FOLLOWUP_SUDO}env ARCHIVEBOX_IMAGE=$ARCHIVEBOX_IMAGE docker compose pull"
echo " ${FOLLOWUP_SUDO}docker compose up"
echo " ${FOLLOWUP_SUDO}docker compose run --rm archivebox manage createsuperuser"
echo " ${FOLLOWUP_SUDO}docker compose run --rm archivebox add 'https://example.com'"
echo " ${FOLLOWUP_SUDO}docker compose run --rm archivebox list"
echo " ${FOLLOWUP_SUDO}docker compose run --rm archivebox help"
exit 0
elif [ -n "$DOCKER_BINARY" ] && docker_pull_archivebox; then
elif [ "$DOCKER_IMAGE_READY" = "true" ]; then
resolve_setup_curl
echo "[+] Initializing an ArchiveBox data folder at $ARCHIVEBOX_DATA_DIR using Docker..."
ensure_archivebox_data_dir || exit 1
@ -394,23 +404,23 @@ elif [ -n "$DOCKER_BINARY" ] && docker_pull_archivebox; then
echo
echo "[√] Server started on http://127.0.0.1:8000 and data directory initialized in $ARCHIVEBOX_DATA_DIR. Usage:"
echo " cd $ARCHIVEBOX_DATA_DIR"
echo " docker ps --filter name=archivebox"
echo " docker rm -f archivebox"
echo " docker pull $ARCHIVEBOX_IMAGE"
echo " docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -d -p 8000:8000 --name=archivebox $ARCHIVEBOX_IMAGE"
echo " docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE manage createsuperuser"
echo " docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE add 'https://example.com'"
echo " docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE list"
echo " docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE help"
echo " ${FOLLOWUP_SUDO}docker ps --filter name=archivebox"
echo " ${FOLLOWUP_SUDO}docker rm -f archivebox"
echo " ${FOLLOWUP_SUDO}docker pull $ARCHIVEBOX_IMAGE"
echo " ${FOLLOWUP_SUDO}docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -d -p 8000:8000 --name=archivebox $ARCHIVEBOX_IMAGE"
echo " ${FOLLOWUP_SUDO}docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE manage createsuperuser"
echo " ${FOLLOWUP_SUDO}docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE add 'https://example.com'"
echo " ${FOLLOWUP_SUDO}docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE list"
echo " ${FOLLOWUP_SUDO}docker run $DOCKER_PLATFORM_ARGS -v $PWD:/data -it $ARCHIVEBOX_IMAGE help"
exit 0
fi
echo
echo "[!] It's highly recommended to use ArchiveBox with Docker, but Docker wasn't found."
echo "[!] It's highly recommended to use ArchiveBox with Docker, but Docker is unavailable (not installed, not running, or not accessible to this user)."
echo
echo " ⚠️ If you want to use Docker, press [Ctrl-C] to cancel now. ⚠️"
echo " Get Docker: https://docs.docker.com/get-docker/"
echo " After you've installed Docker, run this script again."
echo " Check 'docker info'. Start Docker Desktop on macOS, or rerun this script with sudo on Ubuntu if Docker reports a socket permission error."
echo " Install Docker if needed: https://docs.docker.com/get-docker/"
echo
echo "Otherwise, install will continue with uv in 12s... (press [Ctrl+C] to cancel)"
echo
@ -459,11 +469,11 @@ open_archivebox
echo
echo "[√] Server started on http://127.0.0.1:8000 and data directory initialized in $ARCHIVEBOX_DATA_DIR. Usage:"
echo " cd $ARCHIVEBOX_DATA_DIR # see your data dir"
echo " archivebox server --quick-init 0.0.0.0:8000 # start server process"
echo " archivebox manage createsuperuser # add an admin user+pass"
echo " ${FOLLOWUP_SUDO}archivebox server --quick-init 0.0.0.0:8000 # start server process"
echo " ${FOLLOWUP_SUDO}archivebox manage createsuperuser # add an admin user+pass"
echo " ps aux | grep archivebox # see server process pid"
echo " pkill -f archivebox # stop the server"
echo " curl -fsSL 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/bin/setup.sh' | bash # update versions"
echo " archivebox add 'https://example.com'" # archive a new URL
echo " archivebox list # see URLs archived"
echo " archivebox help # see more help & examples"
echo " ${FOLLOWUP_SUDO}pkill -f archivebox # stop the server"
echo " curl -fsSL 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/bin/setup.sh' | ${FOLLOWUP_SUDO}bash # update versions"
echo " ${FOLLOWUP_SUDO}archivebox add 'https://example.com'" # archive a new URL
echo " ${FOLLOWUP_SUDO}archivebox list # see URLs archived"
echo " ${FOLLOWUP_SUDO}archivebox help # see more help & examples"