#!/usr/bin/env bash
#
# Afimon — Docker Engine install for Astra Linux (1.8+, SE/CE).
#
# Astra 1.8 базируется на Debian 12 (bookworm, glibc 2.36) и содержит актуальный
# Docker 25 в родных репозиториях (download.astralinux.ru). Поэтому, в отличие от
# Debian/Ubuntu, НЕ подключаем download.docker.com — он может быть недоступен из РФ,
# а родной docker.io 25.x + docker-compose-v2 полностью покрывают потребности
# Klavdii (compose plugin, network_mode: host, secrets — всё поддерживается).
#
# Ставим: docker.io (engine+cli+containerd+runc) + docker-compose-v2 (compose plugin).

set -euo pipefail

if [[ "${EUID}" -ne 0 ]]; then
    echo "Запустите от root: sudo $0"
    exit 1
fi

if [[ ! -r /etc/os-release ]]; then
    echo "Не удалось определить ОС (нет /etc/os-release)."
    exit 1
fi

source /etc/os-release

# Принимаем Astra Linux. VERSION_ID у Astra вида «1.8_x86-64» — парсим мажор/минор.
# Astra 1.8 = Debian 12 base (glibc 2.36) → поддерживается. Astra 1.7 = Debian 10 — слишком старая.
if [[ "${ID:-}" != "astra" ]]; then
    echo "Этот скрипт предназначен для Astra Linux. Обнаружено: ${PRETTY_NAME:-unknown}"
    exit 1
fi

# Мажор/минор из «1.8_x86-64» → 1 / 8.
ASTRA_MAJOR="${VERSION_ID%%.*}"                 # «1»
ASTRA_MINOR_FULL="${VERSION_ID#*.}"              # «8_x86-64»
ASTRA_MINOR="${ASTRA_MINOR_FULL%%_*}"            # «8»
ASTRA_MAJOR="${ASTRA_MAJOR//[!0-9]/}"
ASTRA_MINOR="${ASTRA_MINOR//[!0-9]/}"

ok_astra=0
if (( ASTRA_MAJOR >= 2 )); then
    ok_astra=1
elif (( ASTRA_MAJOR == 1 )) && (( ASTRA_MINOR >= 8 )); then
    ok_astra=1
fi
if [[ $ok_astra -ne 1 ]]; then
    echo "Поддерживается Astra Linux 1.8+ (Debian 12 base). Обнаружено: ${PRETTY_NAME:-unknown} (VERSION_ID=${VERSION_ID:-?})"
    echo "Astra 1.7 (Debian 10) слишком старая — обновите до 1.8+."
    exit 1
fi

echo "Astra Linux ${VERSION_ID:-?} (VARIANT=${VARIANT_ID:-?}) — Debian 12 base, glibc 2.36. Поддерживается."

export DEBIAN_FRONTEND=noninteractive

echo "[1/5] apt-get update…"
apt-get update

echo "[2/5] Установка Docker Engine + Compose plugin из репозиториев Astra…"
# docker.io — engine, cli, containerd, runc. docker-compose-v2 — compose plugin
# (ставит /usr/libexec/docker/cli-plugins/docker-compose → `docker compose`).
apt-get install -y docker.io docker-compose-v2

echo "[3/5] Проверка наличия compose plugin…"
if ! docker compose version >/dev/null 2>&1; then
    echo "docker-compose-v2 установлен, но `docker compose` недоступен — пробую docker-compose-plugin."
    apt-get install -y docker-compose-plugin 2>/dev/null || true
fi
docker compose version >/dev/null 2>&1 || {
    echo "ОШИБКА: compose plugin не установлен. Установите docker-compose-v2 вручную."
    exit 1
}

echo "[4/5] Запуск и включение сервиса docker…"
systemctl enable --now docker

echo "[5/5] Проверка…"
docker --version
docker compose version
docker info >/dev/null 2>&1 || {
    echo "ОШИБКА: docker daemon не отвечает (docker info failed). Проверьте: journalctl -u docker."
    exit 1
}

echo
echo "Docker установлен успешно."
