์ฝ˜ํ…์ธ ๋กœ ์ด๋™

Linux

์ง€์› ํ™˜๊ฒฝ: ์ปค๋„ 4.4 ์ด์ƒ, systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” glibc ๊ธฐ๋ฐ˜ ๋ฐฐํฌํŒ. Ubuntu 22.04+, Debian 12, Fedora 39+์—์„œ ํ…Œ์ŠคํŠธ๋จ. ์•„ํ‚คํ…์ฒ˜: amd64, arm64.

  1. ์…ธ์„ ์—ฝ๋‹ˆ๋‹ค.

  2. ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

    Terminal window
    curl -sSL https://proxy.sotatek.works/releases/download/latest/install.sh | bash
    export PATH="$HOME/.local/bin:$PATH" && hash -r

    ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ SHA256 ์ฒดํฌ์„ฌ์„ ๊ฒ€์ฆํ•˜๊ณ  /usr/local/bin/sotatek-proxy์— ๋ฐฐ์น˜ํ•œ ๋’ค, ์‹œ์Šคํ…œ ์ „์—ญ systemd ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค(์ด ๋‹จ๊ณ„์—์„œ sudo๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค). ์„œ๋น„์Šค๋Š” ์ฆ‰์‹œ ์‹œ์ž‘๋˜๋ฉฐ ๋ถ€ํŒ… ์‹œ์—๋„ ์ž๋™ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

  3. ๋ฐ๋ชฌ์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

    Terminal window
    sudo sotatek-proxy status
    curl http://127.0.0.1:3817/_proxy/healthz

๋ฐ๋ชฌ์€ ๊ฐ ์š”์ฒญ์„ ๋ณด๋‚ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ทธ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฝ์€ ๋’ค, ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ uid๋กœ ๊ถŒํ•œ์„ ๋‚ฎ์ถฐ git remote -v๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์‚ฌ์šฉ์ž์˜ ์ €์žฅ์†Œ๋ฅผ ๊ทธ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ๋งŒ ์ฝ์œผ๋ฉฐ, ์ƒ์Šน๋œ ๊ถŒํ•œ์œผ๋กœ๋Š” ์ ˆ๋Œ€ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” X-Git-Remote ํ—ค๋”๋กœ ์—…์ŠคํŠธ๋ฆผ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์„œ๋น„์Šค๋Š” CAP_SYS_PTRACE, CAP_SETUID, CAP_SETGID๋ฅผ ๋ณด์œ ํ•˜๋ฉฐ, root๊ฐ€ ์•„๋‹Œ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž๋กœ ์ƒŒ๋“œ๋ฐ•์Šค(NoNewPrivileges, ProtectSystem=strict, ProtectHome=read-only) ์•ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ๊ฒฝ๋กœ
๋ฐ”์ด๋„ˆ๋ฆฌ/usr/local/bin/sotatek-proxy
์„ค์ •/etc/sotatek-proxy/config.yaml (์„ ํƒ)
๋กœ๊ทธ/var/log/sotatek-proxy/sotatek-proxy.log
์œ ๋‹›/etc/systemd/system/sotatek-proxy.service
์‹คํ–‰ ๊ณ„์ •์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž sotatek-proxy (nologin)
Terminal window
sudo sotatek-proxy status # running / stopped
sudo sotatek-proxy start # ์ฆ‰์‹œ ์‹œ์ž‘
sudo sotatek-proxy stop # ์ค‘์ง€ (์žฌ๋ถ€ํŒ… ํ›„์—๋„ ์ค‘์ง€ ์ƒํƒœ ์œ ์ง€)
sotatek-proxy logs # ์ตœ๊ทผ 100์ค„ ํ™•์ธ
sudo sotatek-proxy uninstall # ์„œ๋น„์Šค, ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž, ์„ค์ •, ๋กœ๊ทธ ์ œ๊ฑฐ

systemd๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

Terminal window
systemctl status sotatek-proxy
journalctl -u sotatek-proxy -f

systemd๋‚˜ useradd๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค ์„ค์น˜๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ํ”„๋ก์‹œ๋ฅผ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜์„ธ์š” โ€” ์‚ฌ์šฉ์ž๋ณ„ ๊ฒฝ๋กœ(~/.config/sotatek-proxy/config.yaml, ~/.local/state/sotatek-proxy/)๋กœ ๋Œ€์ฒด๋˜๋ฉฐ root ๊ถŒํ•œ์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค:

Terminal window
sotatek-proxy daemon

sotatek-proxy status๊ฐ€ command not found๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด /usr/local/bin์ด PATH์— ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์…ธ rc ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•œ ๋’ค ๋‹ค์‹œ ๋กœ๋“œํ•˜์„ธ์š”:

Terminal window
case "$(basename "${SHELL:-bash}")" in
zsh) RC="$HOME/.zshrc" ;;
*) RC="$HOME/.bashrc" ;;
esac
LINE='export PATH="/usr/local/bin:$PATH"'
grep -qxF "$LINE" "$RC" 2>/dev/null || echo "$LINE" >> "$RC"
source "$RC"
Terminal window
sudo sotatek-proxy uninstall
sudo rm /usr/local/bin/sotatek-proxy