diff --git a/Makefile b/Makefile index fefd5cb..02566bc 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ help: # Setup commands check-deps: - @sh scripts/check_deps.sh + @sudo sh scripts/check_deps.sh setup: check-deps @echo "Setting up Personal Internet Cell..." diff --git a/scripts/check_deps.sh b/scripts/check_deps.sh index 241046c..3fbffd3 100755 --- a/scripts/check_deps.sh +++ b/scripts/check_deps.sh @@ -1,48 +1,56 @@ #!/bin/sh -# Install Python dependencies needed by setup_cell.py +# Install all host dependencies required by Personal Internet Cell. +# Uses apt-get (Debian/Ubuntu). Must be run with sudo or as root. set -e -echo "Checking system dependencies..." +APT_UPDATED=0 -# Ensure python3 is available -if ! command -v python3 >/dev/null 2>&1; then - echo "Installing python3..." - sudo apt-get install -y python3 || { echo "ERROR: python3 not found and could not install it."; exit 1; } +apt_install() { + PKG="$1" + if ! dpkg -s "$PKG" >/dev/null 2>&1; then + echo " Installing $PKG..." + if [ "$APT_UPDATED" = "0" ]; then + apt-get update -qq + APT_UPDATED=1 + fi + apt-get install -y -qq "$PKG" + else + echo " [ok] $PKG" + fi +} + +echo "=== Checking system dependencies ===" + +# Core tools +apt_install git +apt_install curl +apt_install openssl +apt_install python3 +apt_install python3-cryptography + +# Docker +if ! command -v docker >/dev/null 2>&1; then + echo " Installing docker..." + if [ "$APT_UPDATED" = "0" ]; then + apt-get update -qq + APT_UPDATED=1 + fi + apt-get install -y -qq docker.io +fi +echo " [ok] docker" + +# Docker Compose (v2 plugin preferred, v1 fallback) +if ! docker compose version >/dev/null 2>&1 && ! command -v docker-compose >/dev/null 2>&1; then + echo " Installing docker-compose..." + apt-get install -y -qq docker-compose +fi +echo " [ok] docker-compose" + +# Ensure current user is in docker group +if ! id | grep -q '(docker)'; then + echo " Adding $(id -un) to docker group..." + usermod -aG docker "$(id -un)" + echo " NOTE: Log out and back in (or run 'newgrp docker') for docker group to take effect." fi -# Check if cryptography is already importable -if python3 -c "import cryptography" 2>/dev/null; then - echo "Dependencies OK." - exit 0 -fi - -echo "Installing python3-cryptography..." - -# 1. Try apt (works if sudo is passwordless or interactive TTY is available) -if sudo -n apt-get install -y python3-cryptography 2>/dev/null; then - echo "Dependencies OK." - exit 0 -fi - -# 2. Try pip (module form, covers both pip3 and python3 -m pip) -if python3 -m pip install --user cryptography 2>/dev/null; then - echo "Dependencies OK." - exit 0 -fi - -# 3. Bootstrap pip via get-pip.py, then install -if command -v curl >/dev/null 2>&1; then - curl -sSL https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py 2>/dev/null \ - && python3 /tmp/get-pip.py --user -q 2>/dev/null \ - && python3 -m pip install --user cryptography 2>/dev/null \ - && { echo "Dependencies OK."; exit 0; } -fi - -# 4. No automated path worked — ask the user to install manually -echo "" -echo "ERROR: Could not install python3-cryptography automatically." -echo "Please run the following command and then retry:" -echo "" -echo " sudo apt-get install -y python3-cryptography" -echo "" -exit 1 +echo "=== All dependencies OK ==="