#!/bin/sh # Install all host dependencies required by Personal Internet Cell. # Uses apt-get (Debian/Ubuntu). Must be run with sudo or as root. set -e APT_UPDATED=0 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 the invoking user is in the docker group (use SUDO_USER if available) TARGET_USER="${SUDO_USER:-$(id -un)}" if ! groups "$TARGET_USER" 2>/dev/null | grep -q '\bdocker\b'; then echo " Adding $TARGET_USER to docker group..." usermod -aG docker "$TARGET_USER" echo " NOTE: Log out and back in (or run 'newgrp docker') for docker group to take effect." fi echo " [ok] docker group ($TARGET_USER)" echo "=== All dependencies OK ==="