#!/bin/bash
set -e

# ================== НАСТРОЙКИ ==================
NODE_IP="192.168.1.232"
NODE_PORT="7108"
IMAGE_NAME="starmark-ccminer"
CONTAINER_NAME="starmark-miner"
# ===============================================

echo "=== [0] Проверка root ==="
if [ "$(id -u)" -ne 0 ]; then
  echo "Запусти так: sudo bash install_starmark_miner.sh"
  exit 1
fi

echo "=== [1] Удаление конфликтующих пакетов Docker ==="
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  apt-get remove -y "$pkg" >/dev/null 2>&1 || true
done

echo "=== [2] Установка Docker (официальный репозиторий) ==="
apt-get update -y
apt-get install -y ca-certificates curl wget gnupg lsb-release

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

UBUNTU_CODENAME=$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
 https://download.docker.com/linux/ubuntu $UBUNTU_CODENAME stable" \
  > /etc/apt/sources.list.d/docker.list

apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

systemctl enable docker
systemctl restart docker

echo "=== Docker установлен ==="
docker --version || true

echo "=== [3] Установка NVIDIA Container Toolkit ==="
# GPG ключ и репозиторий для toolkit (универсальный deb repo)
mkdir -p /etc/apt/keyrings

wget -qO /etc/apt/keyrings/nvidia-container-toolkit.asc \
  https://nvidia.github.io/libnvidia-container/gpgkey

echo "deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.asc] \
https://nvidia.github.io/libnvidia-container/stable/deb/amd64 /" \
  > /etc/apt/sources.list.d/nvidia-container-toolkit.list

apt-get update -y
apt-get install -y nvidia-container-toolkit

echo "=== [4] Конфигурация Docker на использование GPU ==="
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

echo "=== [5] Тест GPU внутри Docker (nvidia-smi) ==="
docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi

echo "=== [6] Подготовка директории для майнера ==="
mkdir -p /opt/starmark-ccminer
cd /opt/starmark-ccminer

echo "=== [7] Создание Dockerfile для майнера ==="
cat > Dockerfile <<'EOF'
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC

RUN apt-get update && apt-get install -y \
    libcurl4 libcurl4-openssl-dev libssl-dev libjansson-dev \
    automake autotools-dev build-essential git wget gpg-agent && \
    rm -rf /var/lib/apt/lists/*

# CUDA 11.8 репозиторий
RUN wget -q https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin && \
    mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
    wget -q https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb && \
    dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb && \
    apt-key add /var/cuda-repo-ubuntu2204-11-8-local/*.pub && \
    cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/ && \
    apt-get update && \
    apt-get install -y cuda-toolkit-11-8 cuda-cudart-11-8 libnvidia-compute-520 && \
    rm -f *.deb && \
    rm -rf /var/lib/apt/lists/* && \
    ldconfig

# Сборка starmark-ccminer
RUN git clone https://bitbucket.org/starmark-cash/starmark-ccminer.git /ccminer
WORKDIR /ccminer
RUN git checkout main && \
    ./build.sh && \
    strip -s ccminer && \
    make install && \
    make clean

ENTRYPOINT ["/usr/local/bin/ccminer"]
EOF

echo "=== [8] Сборка Docker-образа майнера: ${IMAGE_NAME} ==="
docker build --network=host -t "$IMAGE_NAME" .

echo "=== [9] Запуск контейнера майнера ==="
docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true

docker run -d \
  --name "$CONTAINER_NAME" \
  --gpus all \
  --network host \
  "$IMAGE_NAME" \
  --debug -a sha256t \
  --url=${NODE_IP}:${NODE_PORT} \
  --user=staruser \
  --pass=starsecret

echo "=== ГОТОВО ==="
echo "Майнер запущен в контейнере: $CONTAINER_NAME"
echo "Логи смотреть так:"
echo "  sudo docker logs -f $CONTAINER_NAME"
