diff --git a/docker-install-deb.sh b/docker-install-deb.sh new file mode 100644 index 0000000..f3b4b72 --- /dev/null +++ b/docker-install-deb.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +#RUN AS ROOT/SUDO + +set -euo pipefail + +# Function to print messages +info() { echo -e "\e[1;34m[INFO]\e[0m $*"; } +error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; } + +# Check if running as root +if (( EUID != 0 )); then + error "This script must be run as root (or via sudo)." + exit 1 +fi + +# Detect Debian codename automatically +DEBIAN_CODENAME=$(lsb_release -cs 2>/dev/null || grep VERSION_CODENAME /etc/os-release | cut -d= -f2) +if [ -z "$DEBIAN_CODENAME" ]; then + error "Could not detect Debian codename. Please specify manually." + exit 1 +fi +info "Detected Debian codename: $DEBIAN_CODENAME" + +# 1. Update package index +info "Updating package index..." +apt update + +# 2. Install prerequisites +info "Installing prerequisites..." +apt install -y apt-transport-https ca-certificates curl gpg lsb-release + +# 3. Add Docker GPG key +info "Adding Docker GPG key..." +curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker.gpg + +# 4. Add Docker repository for detected Debian version +ARCH=$(dpkg --print-architecture) +info "Adding Docker repository for architecture: $ARCH..." +echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian ${DEBIAN_CODENAME} stable" \ + > /etc/apt/sources.list.d/docker.list + +# 5. Update package index again to pick up Docker repo +info "Updating package index (post repo addition)..." +apt update + +# 6. Install Docker components +info "Installing Docker components..." +apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +# 7. Enable and start Docker service +info "Enabling and starting Docker service..." +systemctl enable docker +systemctl start docker + +# 8. Verify Docker is running +info "Verifying Docker status..." +if systemctl is-active --quiet docker; then + info "Docker is active." +else + error "Docker is not running!" + journalctl -u docker --no-pager | head -n 20 + exit 1 +fi + +# 9. Test Docker installation +info "Running hello-world container to test Docker..." +docker run --rm hello-world + +# 10. Add non-root user to Docker group (if applicable) +if [ -n "${SUDO_USER:-}" ]; then + info "Adding user '$SUDO_USER' to docker group..." + usermod -aG docker "$SUDO_USER" + info "You may need to logout/login or reboot for group changes to take effect." +fi + +info "Docker installation completed successfully."