File size: 4,292 Bytes
4c75661
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env bash
# ํ˜ธ์ŠคํŠธ์— Docker Engine + NVIDIA Container Toolkit ์„ค์น˜.
# sudo ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌผ์–ด๋ณด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
#   Claude Code ํ”„๋กฌํ”„ํŠธ์—์„œ:  ! bash scripts/host_install_docker.sh
set -euo pipefail

say()  { printf '\n\033[1;36m==> %s\033[0m\n' "$*"; }
ok()   { printf '\033[1;32m  โœ” %s\033[0m\n' "$*"; }
warn() { printf '\033[1;33m  ! %s\033[0m\n' "$*"; }
die()  { printf '\033[1;31m  โœ˜ %s\033[0m\n' "$*" >&2; exit 1; }

[[ $EUID -eq 0 ]] && die "root๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•˜๋ฉด sudo๋ฅผ ์•Œ์•„์„œ ์”๋‹ˆ๋‹ค."

. /etc/os-release
say "ํ˜ธ์ŠคํŠธ: $PRETTY_NAME ($VERSION_CODENAME / $(dpkg --print-architecture))"
[[ "$ID" == "ubuntu" ]] || warn "Ubuntu๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค โ€” ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” Ubuntu ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค."

command -v nvidia-smi >/dev/null || die "nvidia-smi ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. NVIDIA ๋“œ๋ผ์ด๋ฒ„๋ถ€ํ„ฐ ์„ค์น˜ํ•˜์„ธ์š”."
ok "$(nvidia-smi --query-gpu=name,driver_version --format=csv,noheader | head -1)"

say "sudo ๊ถŒํ•œ ํ™•์ธ (๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)"
sudo -v || die "sudo ์‹คํŒจ"
# ์„ค์น˜๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋™์•ˆ sudo ํƒ€์ž„์•„์›ƒ ๋ฐฉ์ง€
while true; do sudo -n true; sleep 50; kill -0 "$$" 2>/dev/null || exit; done 2>/dev/null &
SUDO_KEEPALIVE=$!
trap 'kill $SUDO_KEEPALIVE 2>/dev/null || true' EXIT

# ---------------------------------------------------------------- 1. Docker
if command -v docker >/dev/null && docker --version >/dev/null 2>&1; then
  ok "Docker ์ด๋ฏธ ์„ค์น˜๋จ: $(docker --version)"
else
  say "1/3  Docker Engine ์„ค์น˜"
  for p in docker.io docker-doc docker-compose podman-docker containerd runc; do
    sudo apt-get remove -y "$p" >/dev/null 2>&1 || true
  done
  sudo apt-get update -qq
  sudo apt-get install -y -qq ca-certificates curl gnupg
  sudo install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
    | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
  sudo chmod a+r /etc/apt/keyrings/docker.gpg
  echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable" \
    | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt-get update -qq
  sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
                          docker-buildx-plugin docker-compose-plugin
  ok "์„ค์น˜๋จ: $(docker --version)"
fi

say "Docker ๋™์ž‘ ํ™•์ธ (hello-world)"
sudo docker run --rm hello-world >/dev/null && ok "Docker ๋Ÿฐํƒ€์ž„ ์ •์ƒ"

# ------------------------------------------------- 2. NVIDIA Container Toolkit
if command -v nvidia-ctk >/dev/null; then
  ok "nvidia-container-toolkit ์ด๋ฏธ ์„ค์น˜๋จ: $(nvidia-ctk --version | head -1)"
else
  say "2/3  NVIDIA Container Toolkit ์„ค์น˜"
  curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
  curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
  sudo apt-get update -qq
  sudo apt-get install -y nvidia-container-toolkit
fi

say "docker ๋ฐ๋ชฌ์— nvidia ๋Ÿฐํƒ€์ž„ ๋“ฑ๋ก"
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
sleep 3

say "GPU ํŒจ์Šค์Šค๋ฃจ ํ™•์ธ"
sudo docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi \
  | sed -n '1,12p' && ok "์ปจํ…Œ์ด๋„ˆ์—์„œ GPU ๋ณด์ž„"

# --------------------------------------------------------- 3. docker ๊ทธ๋ฃน
say "3/3  $USER ๋ฅผ docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€"
if id -nG "$USER" | tr ' ' '\n' | grep -qx docker; then
  ok "์ด๋ฏธ docker ๊ทธ๋ฃน ์†Œ์†"
else
  sudo usermod -aG docker "$USER"
  warn "๊ทธ๋ฃน ๋ณ€๊ฒฝ์€ '์žฌ๋กœ๊ทธ์ธ' ํ›„์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค."
  warn "๊ทธ๋•Œ๊นŒ์ง€ ์ด ํ”„๋กœ์ ํŠธ ์Šคํฌ๋ฆฝํŠธ๋“ค์€ ์ž๋™์œผ๋กœ 'sudo docker' ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค."
fi

say "์™„๋ฃŒ"
cat <<'MSG'
  ๋‹ค์Œ ๋‹จ๊ณ„:
    bash scripts/build.sh     # ๊ฐœ๋ฐœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
    bash scripts/run.sh       # ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋™
    bash scripts/shell.sh     # ์…ธ ์ง„์ž…
MSG