AI μ›Œν¬μŠ€ν…Œμ΄μ…˜ λ°±μ„œ Β· μ™„κ²°νŒ Β· 2026-08-09

πŸ“± 폰 ν•˜λ‚˜λ‘œ AI μ›Œν¬μŠ€ν…Œμ΄μ…˜ μ§“κΈ°

Termux β†’ proot Ubuntu β†’ Claude Code + DeepSeek
μ²˜μŒλΆ€ν„° λκΉŒμ§€, μ—λŸ¬ μ—†λŠ” μˆœμ„œ β€” 10단계
10
μ„€μΉ˜ 단계
6
λ°œκ²¬Β·μˆ˜μ •λœ 버그
3
μ€€λΉ„λ¬Ό
~15λΆ„
μ†Œμš” μ‹œκ°„
v1.0
μ™„κ²°νŒ
πŸ“’ 이 λ¬Έμ„œλŠ” μ—¬λŸ¬ λŒ€μ˜ 폰(S21, ν˜Έμ•Όλ‹Ή 아저씨, 친ꡬ)에 μ‹€μ œλ‘œ μ„€μΉ˜ν•˜λ©΄μ„œ λ‚˜μ˜¨ 사고듀을 μ „λΆ€ λ°˜μ˜ν•΄ 고친 μ΅œμ’… 버전이닀. μ•žμœΌλ‘œλŠ” 이 μˆœμ„œ κ·ΈλŒ€λ‘œ κ°€λ©΄ 였늘 κ²ͺ은 μ—λŸ¬λ“€μ„ ν•˜λ‚˜λ„ λ‹€μ‹œ μ•ˆ λ§Œλ‚œλ‹€.
πŸ”‘ 원칙 ν•˜λ‚˜λ§Œ κΈ°μ–΅: μ–΄λ–€ μŠ€ν¬λ¦½νŠΈλ„ 토큰을 μ±„νŒ…μ— 적으라고 μš”κ΅¬ν•˜μ§€ μ•ŠλŠ”λ‹€. μ „λΆ€ read둜 κ·Έ μžλ¦¬μ—μ„œ 직접 μž…λ ₯λ°›λŠ”λ‹€.

πŸ“¦ μ€€λΉ„λ¬Ό β€” 미리 λ°œκΈ‰λ°›μ•„λ‘˜ 것

λ³€μˆ˜μ–΄λ””μ„œν•„μˆ˜ μ—¬λΆ€
DeepSeek API ν‚€platform.deepseek.com β†’ API Keysν•„μˆ˜
GitHub 아이디 + 개인 μ•‘μ„ΈμŠ€ 토큰 (ghp_...)github.com β†’ Settings β†’ Developer settings (repo κΆŒν•œ)ν•„μˆ˜
ν…”λ ˆκ·Έλž¨ 봇 ν† ν°ν…”λ ˆκ·Έλž¨ @BotFather β†’ /newbot선택

1️⃣ μš°λΆ„νˆ¬ μ„€μΉ˜ β€” 겉, Termux ~ $

1
νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ + proot-distro μ„€μΉ˜
Termux μ„Έμ…˜ (ν”„λ‘¬ν”„νŠΈ: ~ $)
pkg update -y && pkg upgrade -y
pkg install -y proot-distro
proot-distro install ubuntu
proot-distro login ubuntu
βœ… ν”„λ‘¬ν”„νŠΈκ°€ root@localhost:~#둜 λ°”λ€Œλ©΄ 톡과.
⚠️ proot-distro install ubuntuλ₯Ό μ‹€μˆ˜λ‘œ 두 번 치면 "container already exists" λœ¬λ‹€ β€” μ—λŸ¬ μ•„λ‹ˆλ‹€, κ·Έλƒ₯ proot-distro login ubuntu둜 λ°”λ‘œ λ„˜μ–΄κ°€λ©΄ λœλ‹€.

2️⃣ κΈ°λ³Έ 도ꡬ + Claude Code β€” 속, root@

2
apt νŒ¨ν‚€μ§€ + Node.js + Claude Code μ„€μΉ˜
μš°λΆ„νˆ¬ λ‚΄λΆ€ (ν”„λ‘¬ν”„νŠΈ: root@)
apt update && apt install -y curl git nano nodejs npm python3 python3-venv
npm install -g @anthropic-ai/claude-code
claude --version
βœ… 버전 번호(2.x.x) 찍히면 톡과.

3️⃣ DeepSeek μ—”μ§„ λ°°μ„  β€” λŒ€ν™”ν˜•

3
ν™˜κ²½λ³€μˆ˜ μ„€μ •
API ν‚€λ₯Ό μ•ˆμ „ν•˜κ²Œ μž…λ ₯λ°›μ•„ μ €μž₯
read -p "DeepSeek API ν‚€ μž…λ ₯: " DEEPSEEK_API_KEY
cat >> ~/.bashrc << EOF
export DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY"
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=\$DEEPSEEK_API_KEY
export ANTHROPIC_MODEL=deepseek-v4-pro
EOF
grep -E 'DEEPSEEK_API_KEY|ANTHROPIC_' ~/.bashrc >> ~/.profile
source ~/.bashrc
echo $ANTHROPIC_BASE_URL
βœ… https://api.deepseek.com/anthropic 좜λ ₯되면 톡과.
❗ λͺ¨λΈλͺ…은 deepseek-v4-pro κ³ μ •. deepseek-chat은 2026λ…„ 7μ›” 24μΌλΆ€λ‘œ μ™„μ „νžˆ 폐기된 이름이라 μ ˆλŒ€ μ“°μ§€ μ•ŠλŠ”λ‹€.

4️⃣ 과금 μ•ˆμ „μž₯치 β€” ⚠️ μ—¬κΈ°μ„œ κ±΄λ„ˆλ›°μ§€ 말 것

4
DeepSeek μΊμ‹œ 과금 λ°©μ§€ + μ˜¨λ³΄λ”© 우회
이 단계λ₯Ό 빼먹으면 λ©°μΉ  λ§Œμ— μž”μ•‘ 증발
πŸ”₯ μ™œ ν•„μš”ν•œκ°€: Claude Codeκ°€ λ§€ μš”μ²­λ§ˆλ‹€ 랜덀 식별값을 헀더에 λ°•μ•„ λ„£λŠ”λ°, 이게 DeepSeek의 μΊμ‹œ ν”„λ¦¬ν”½μŠ€λ₯Ό 맀번 κΉ¨λœ¨λ €μ„œ μ •μƒκ°€μ˜ μ΅œλŒ€ 50배둜 κ³ΌκΈˆλ˜λŠ” μ•Œλ €μ§„ λ¬Έμ œκ°€ μžˆλ‹€. 미리 λ§‰λŠ”λ‹€.
mkdir -p ~/.claude
cat > ~/.claude/settings.json << 'EOF'
{
  "env": {
    "CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "ENABLE_TOOL_SEARCH": "true",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro"
  }
}
EOF

python3 -c "
import json, os
p = os.path.expanduser('~/.claude.json')
try:
    with open(p) as f: d = json.load(f)
except FileNotFoundError:
    d = {}
d['hasCompletedOnboarding'] = True
d['primaryApiKey'] = os.environ.get('DEEPSEEK_API_KEY','')
with open(p,'w') as f: json.dump(d, f, indent=2)
print('patched:', p)
"
βœ… patched: /root/.claude.json 좜λ ₯되면 톡과.

5️⃣ λ°œμ‚¬ ν…ŒμŠ€νŠΈ

5
Claude Code 첫 μ‹€ν–‰ 확인
μš°λΆ„νˆ¬ μ•ˆμ—μ„œ
mkdir -p ~/work && cd ~/work
IS_SANDBOX=1 claude --dangerously-skip-permissions
βœ… λ™μ˜ν™”λ©΄ 뜨면 ν™”μ‚΄ν‘œλ‘œ 2. Yes, I accept 선택 β†’ μ—”ν„°.
βœ… 둜그인 μš”κ΅¬ 없이 λ°”λ‘œ 메인 ν™”λ©΄ 뜨고, λ°°λ„ˆμ— deepseek-v4-pro ν‘œμ‹œλ˜λ©΄ 톡과. hey처럼 아무 λ§μ΄λ‚˜ μ³μ„œ 응닡+Cost ν‘œμ‹œκΉŒμ§€ λ‚˜μ˜€λ©΄ μ™„μ „ 확인.

6️⃣ 두 κΈ€μž μ§„μž…λ‘œ β€” ⚠️ λ°˜λ“œμ‹œ κ²‰μœΌλ‘œ λ‚˜μ˜¨ λ’€

6
cc μ•Œλ¦¬μ•„μŠ€ 등둝
Termux 겉(~ $)으둜 λ‚˜μ™€μ„œ μ‹€ν–‰
⚠️ μ€‘μš”ν•œ μˆœμ„œ:
1. Claude Code μ•ˆμ΄λ©΄ /exit둜 λ¨Όμ € λ‚˜μ˜€κ³ 
2. κ·Έ λ‹€μŒ μ…Έμ—μ„œ exit ν•œ 번 더 β€” ν”„λ‘¬ν”„νŠΈκ°€ ~ $인지 λ°˜λ“œμ‹œ 확인

root@ μƒνƒœμ—μ„œ λ‹€μŒ 쀄을 치면 μ•Œλ¦¬μ•„μŠ€κ°€ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ— λ°•ν˜€μ„œ "proot-distro should not be executed under PRoot" μ—λŸ¬κ°€ λ‚œλ‹€ β€” 였늘 두 번 κ²ͺμ—ˆλ˜ 사고닀.
echo "alias cc='proot-distro login ubuntu -- bash -lc \"cd ~/work && IS_SANDBOX=1 claude --dangerously-skip-permissions\"'" >> ~/.bashrc
source ~/.bashrc
cc
βœ… 겉(~ $)μ—μ„œ cc 두 κΈ€μžλ‘œ λ°”λ‘œ Claude Code 뜨면 μ™„λ£Œ.

7️⃣ GitHub 연동 β€” λŒ€ν™”ν˜•

7
레포 생성 + Pages 배포
μš°λΆ„νˆ¬ μ•ˆμ—μ„œ
proot-distro login ubuntu

read -p "GitHub 아이디: " GITHUB_USER
read -sp "GitHub 토큰(ghp_...): " GITHUB_TOKEN; echo
read -p "μƒˆ 레포 이름: " REPO_NAME

git config --global user.name "$GITHUB_USER"
git config --global user.email "$GITHUB_USER@users.noreply.github.com"
git config --global credential.helper store

curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/user/repos -d "{\"name\":\"$REPO_NAME\"}"

cd ~/work
git init 2>/dev/null
git remote remove origin 2>/dev/null
git remote add origin "https://$GITHUB_USER:$GITHUB_TOKEN@github.com/$GITHUB_USER/$REPO_NAME.git"
git branch -M main
echo "<!DOCTYPE html><html><body><h1>Workstation Live</h1></body></html>" > index.html
git add -A && git commit -m "init: workstation"
git push -u origin main

curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
  -H "Accept: application/vnd.github+json" \
  "https://api.github.com/repos/$GITHUB_USER/$REPO_NAME/pages" \
  -d '{"source":{"branch":"main","path":"/"}}'
βœ… push 성곡 + Pages ν™œμ„±ν™” 응닡 였면 톡과. 2λΆ„ λ’€ https://<아이디>.github.io/<레포>/ 접속 확인.

8️⃣ ν…”λ ˆκ·Έλž¨ 보고 νšŒμ˜μ‹€ β€” 선택, λŒ€ν™”ν˜•

8
tg.sh 보고 슀크립트 μ„€μΉ˜
ν…”λ ˆκ·Έλž¨ λ΄‡ν•œν…Œ λ¨Όμ € λ©”μ‹œμ§€ 1개 λ³΄λ‚΄λ‘˜ 것 (ν•„μˆ˜ μ„ ν–‰ 쑰건)
read -sp "ν…”λ ˆκ·Έλž¨ 봇 토큰: " TG_TOKEN; echo
TG_CHAT=$(curl -s "https://api.telegram.org/bot$TG_TOKEN/getUpdates" \
  | grep -o '"chat":{"id":[0-9-]*' | head -1 | grep -o '[0-9-]*$')

echo "export TG_TOKEN=\"$TG_TOKEN\"" >> ~/.bashrc
echo "export TG_CHAT=\"$TG_CHAT\"" >> ~/.bashrc
source ~/.bashrc

cat > ~/work/tg.sh << 'EOF'
#!/bin/bash
curl -s -X POST "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \
  -d chat_id=$TG_CHAT -d text="$1" >/dev/null
EOF
chmod +x ~/work/tg.sh
bash ~/work/tg.sh "🟒 μ›Œν¬μŠ€ν…Œμ΄μ…˜ κ°œν†΅ μ™„λ£Œ"
βœ… ν…”λ ˆκ·Έλž¨μ— λ©”μ‹œμ§€ λ„μ°©ν•˜λ©΄ 톡과.

9️⃣ λ‚˜λ¨Έμ§€λŠ” μ—μ΄μ „νŠΈν•œν…Œ μžμ—°μ–΄λ‘œ μœ„μž„

9
MCPΒ·YouTube λ“± β€” ν•˜λ“œμ½”λ”©ν•˜μ§€ μ•Šκ³  말둜 μ‹œν‚¨λ‹€
μ ˆμ°¨κ°€ 자주 λ°”λ€ŒλŠ” 것듀은 ccμ—κ²Œ μžμ—°μ–΄λ‘œ μœ„μž„
πŸ“± phone-mcp-server
"phone-mcp-server μ„€μΉ˜ν•΄μ€˜. 순수 Termux:API κΈ°λ°˜μΈμ§€, 루트/Shizuku ν•„μš” μ—†λŠ”μ§€ λ¨Όμ € ν™•μΈν•˜κ³  μ§„ν–‰ν•΄."
▢️ YouTube 연동
"YouTube 채널 μ—°λ™ν•˜κ³  μ‹Άμ–΄. μ½˜μ†”μ—μ„œ 뭘 λˆŒλŸ¬μ•Ό ν•˜λŠ”μ§€ μˆœμ„œλŒ€λ‘œ μ•Œλ €μ£Όκ³ , ν΄λΌμ΄μ–ΈνŠΈID/μ‹œν¬λ¦Ώ λ°›μœΌλ©΄ Device Code Flow둜 μΈμ¦κΉŒμ§€ μ§„ν–‰ν•΄μ€˜."

πŸ”Ÿ ν—Œλ²• 씨앗 β€” λ§ˆμ§€λ§‰

10
CONSTITUTION.md 생성
cc μ•ˆμ—μ„œ μžμ—°μ–΄λ‘œ μ‹œν‚¨λ‹€
CONSTITUTION.md λ§Œλ“€μ–΄μ€˜. μ΅œμ†Œ 3μ›μΉ™λ§Œ:
1) λ£¨νŒ…/Shizuku κΈˆμ§€
2) 토큰은 μ ˆλŒ€ λŒ€ν™” λ‘œκ·Έμ— ν•˜λ“œμ½”λ”©ν•˜μ§€ 말 것 β€” read ν”„λ‘¬ν”„νŠΈλ‚˜
   ν™˜κ²½λ³€μˆ˜ νŒŒμΌμ—μ„œλ§Œ 읽을 것
3) μƒˆ μ„Έμ…˜μ€ 이 λ¬Έμ„œλΆ€ν„° 읽고 μ‹œμž‘ν•  것

πŸ› 였늘 발견된 버그 μš”μ•½ (참고용)

39컀밋 Β· 102파일 Β· 15,874μ€„μ§œλ¦¬ μ‚½μ§ˆμ΄ μœ„ 10λ‹¨κ³„λ‘œ 압좕됐닀. λ‹€μŒ ν°λΆ€ν„°λŠ” 이거 ν•˜λ‚˜λ©΄ λλ‚œλ‹€.

pip/numpy λΉŒλ“œ μ—λŸ¬
원인: 겉(Termux)μ—μ„œ pip 직접 μ„€μΉ˜ μ‹œλ„
반영: 1~2λ‹¨κ³„μ—μ„œ μ²˜μŒλΆ€ν„° μš°λΆ„νˆ¬ μ•ˆμ—μ„œλ§Œ μ„€μΉ˜
proot-distro should not be executed under PRoot
원인: μ•Œλ¦¬μ•„μŠ€λ₯Ό 속(root@)μ—μ„œ 등둝
반영: 6단계 경고문으둜 λͺ…μ‹œ
/login μš”κ΅¬, "Opus 5" λ°°λ„ˆ
원인: μ„œλ“œνŒŒν‹° λ°±μ—”λ“œ μ‚¬μš© μ‹œ μ˜¨λ³΄λ”© ν”Œλž˜κ·Έ λ―Έμ„€μ •
반영: 4단계 .claude.json 패치둜 사전 차단
λ©°μΉ  λ§Œμ— μž”μ•‘ 증발
원인: attribution 헀더가 μΊμ‹œ ν”„λ¦¬ν”½μŠ€λ₯Ό 맀번 깨뜨림
반영: 4λ‹¨κ³„μ—μ„œ μ²˜μŒλΆ€ν„° 차단
deepseek-chat κ΄€λ ¨ 400 μ—λŸ¬
원인: 폐기된 λͺ¨λΈλͺ… μž¬μ‚¬μš©
반영: μ „ ꡬ간 deepseek-v4-pro둜 κ³ μ •