#!/bin/bash # 팜큐(FARMQ) Headscale 클라이언트 등록 스크립트 - LIVE 서버용 # 사용법: ./register-client-pharmq-live.sh # 대상 서버: head.pharmq.kr (Live Production) set -e # 설정 HEADSCALE_SERVER="http://head.pharmq.kr" PREAUTH_KEY="b46923995afeaec90e588168f2e1bf99801775e8657ce003" # 색상 출력 함수 print_status() { echo -e "\n🔧 $1" } print_success() { echo -e "\n✅ $1" } print_error() { echo -e "\n❌ $1" } print_info() { echo -e "\n📋 $1" } # 운영체제 감지 detect_os() { if [[ "$OSTYPE" == "linux-gnu"* ]]; then if command -v apt &> /dev/null; then OS="ubuntu" elif command -v yum &> /dev/null; then OS="centos" else OS="linux" fi elif [[ "$OSTYPE" == "darwin"* ]]; then OS="macos" elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then OS="windows" else OS="unknown" fi echo $OS } # Tailscale 설치 확인 및 설치 install_tailscale() { OS=$(detect_os) if command -v tailscale &> /dev/null; then print_info "Tailscale이 이미 설치되어 있습니다." return 0 fi print_status "Tailscale 설치 중..." case $OS in "ubuntu") curl -fsSL https://tailscale.com/install.sh | sh ;; "centos") curl -fsSL https://tailscale.com/install.sh | sh ;; "macos") echo "macOS용 Tailscale을 다운로드합니다." echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/mac" exit 1 ;; "windows") echo "Windows용 Tailscale을 다운로드합니다." echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/windows" exit 1 ;; *) print_error "지원되지 않는 운영체제입니다: $OSTYPE" exit 1 ;; esac } # 기존 Tailscale 연결 해제 disconnect_existing() { if tailscale status --json &> /dev/null; then local current_status=$(tailscale status --json 2>/dev/null || echo "{}") if echo "$current_status" | grep -q '"BackendState":"Running"'; then print_status "기존 Tailscale 연결을 해제합니다..." if [ "$EUID" -eq 0 ]; then tailscale logout || true else sudo tailscale logout || true fi fi fi } # Headscale에 등록 register_to_headscale() { print_status "팜큐 Headscale 서버에 등록 중..." print_info "서버: $HEADSCALE_SERVER" # Tailscale을 Headscale 서버로 설정하고 등록 if [ "$EUID" -eq 0 ]; then tailscale up \ --login-server="$HEADSCALE_SERVER" \ --authkey="$PREAUTH_KEY" \ --accept-routes \ --accept-dns=false else sudo tailscale up \ --login-server="$HEADSCALE_SERVER" \ --authkey="$PREAUTH_KEY" \ --accept-routes \ --accept-dns=false fi } # 연결 상태 확인 check_connection() { print_status "연결 상태 확인 중..." # 잠시 대기 sleep 3 # 상태 확인 if tailscale status &> /dev/null; then local tailscale_ip=$(tailscale ip -4 2>/dev/null || echo "") if [[ -n "$tailscale_ip" ]]; then print_success "성공적으로 연결되었습니다!" print_info "할당된 IP: $tailscale_ip" print_info "네트워크 상태:" tailscale status return 0 fi fi print_error "연결에 실패했습니다." print_info "수동으로 상태를 확인해보세요: tailscale status" return 1 } # 메인 함수 main() { echo "==========================================" echo " 🏥 팜큐(FARMQ) Headscale 클라이언트 등록" echo "==========================================" # 루트 권한 확인 if [[ $EUID -ne 0 ]] && ! command -v sudo &> /dev/null; then print_error "이 스크립트는 root 권한 또는 sudo가 필요합니다." print_info "root로 실행하거나 sudo를 설치한 후 다시 시도하세요." exit 1 fi if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then print_info "sudo 권한이 필요합니다. 비밀번호를 입력해주세요." fi # 단계별 실행 install_tailscale disconnect_existing register_to_headscale if check_connection; then print_success "🎉 등록 완료!" print_info "이제 팜큐 네트워크에 연결되었습니다." print_info "문제가 있으면 관리자에게 문의하세요." else print_error "등록 과정에서 문제가 발생했습니다." exit 1 fi } # 스크립트 실행 main "$@"