Add post-installation testing menu with options to: 1) Test RDP mode activation 2) Test Shell mode activation 3) Skip testing This allows users to immediately test API functionality after installation without manually typing curl commands. The menu uses the installed API to toggle modes and displays current status after each action. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
170 lines
5.0 KiB
Bash
Executable File
170 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# RDP Toggle API 설치 스크립트
|
|
# curl -fsSL https://git.0bin.in/thug0bin/pve9-repo-fix/raw/branch/main/RDP/install-rdp-api.sh | bash
|
|
|
|
set -e
|
|
|
|
echo "RDP Toggle API 설치 시작..."
|
|
|
|
# IP 주소 가져오기 (Headscale 우선, 없으면 로컬 IP)
|
|
get_primary_ip() {
|
|
# Headscale VPN IP 확인 (100.64.x.x 대역)
|
|
local headscale_ip=$(hostname -I | tr ' ' '\n' | grep '^100\.64\.' | head -n1)
|
|
|
|
if [ -n "$headscale_ip" ]; then
|
|
echo "$headscale_ip"
|
|
return 0
|
|
fi
|
|
|
|
# Headscale IP가 없으면 로컬 IP (첫 번째)
|
|
local local_ip=$(hostname -I | awk '{print $1}')
|
|
|
|
if [ -n "$local_ip" ]; then
|
|
echo "$local_ip"
|
|
return 0
|
|
fi
|
|
|
|
# 그것도 없으면 localhost
|
|
echo "127.0.0.1"
|
|
}
|
|
|
|
# 설치 디렉토리 설정
|
|
INSTALL_DIR="/opt/rdp-toggle-api"
|
|
VENV_DIR="$INSTALL_DIR/venv"
|
|
GITEA_BASE_URL="https://git.0bin.in/thug0bin/pve9-repo-fix/raw/branch/main/RDP"
|
|
|
|
# Python 및 venv 설치
|
|
echo "Python 및 필수 패키지 설치 중..."
|
|
apt update
|
|
apt install -y python3 python3-venv python3-pip curl
|
|
|
|
# 설치 디렉토리 생성
|
|
mkdir -p "$INSTALL_DIR"
|
|
|
|
# 가상환경 생성
|
|
echo "가상환경 생성 중..."
|
|
python3 -m venv "$VENV_DIR"
|
|
|
|
# 가상환경에서 패키지 설치
|
|
echo "Python 패키지 설치 중..."
|
|
"$VENV_DIR/bin/pip" install --upgrade pip
|
|
"$VENV_DIR/bin/pip" install fastapi==0.115.5 uvicorn==0.32.1 python-multipart==0.0.20 pydantic==2.10.3
|
|
|
|
# API 파일 다운로드
|
|
echo "API 서버 파일 다운로드 중..."
|
|
curl -fsSL "$GITEA_BASE_URL/rdp-toggle-api.py" -o "$INSTALL_DIR/rdp-toggle-api.py"
|
|
chmod +x "$INSTALL_DIR/rdp-toggle-api.py"
|
|
|
|
# systemd 서비스 생성
|
|
echo "systemd 서비스 생성 중..."
|
|
cat > /etc/systemd/system/rdp-toggle-api.service << EOF
|
|
[Unit]
|
|
Description=RDP Toggle API Service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=root
|
|
WorkingDirectory=$INSTALL_DIR
|
|
ExecStart=$VENV_DIR/bin/python $INSTALL_DIR/rdp-toggle-api.py
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# 서비스 활성화 및 시작
|
|
echo "서비스 활성화 및 시작 중..."
|
|
systemctl daemon-reload
|
|
systemctl enable rdp-toggle-api.service
|
|
systemctl start rdp-toggle-api.service
|
|
|
|
# 잠시 대기 후 상태 확인
|
|
sleep 2
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "RDP Toggle API 설치 완료!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "📍 API 서버: http://$(get_primary_ip):8090"
|
|
echo "📁 설치 위치: $INSTALL_DIR"
|
|
echo ""
|
|
echo "✅ 사용 방법:"
|
|
echo " 상태 확인:"
|
|
echo " curl http://localhost:8090/status"
|
|
echo ""
|
|
echo " RDP 모드 활성화:"
|
|
echo " curl -X POST http://localhost:8090/toggle \\"
|
|
echo " -H 'Content-Type: application/json' \\"
|
|
echo " -d '{\"mode\":\"rdp\"}'"
|
|
echo ""
|
|
echo " Shell 모드 전환:"
|
|
echo " curl -X POST http://localhost:8090/toggle \\"
|
|
echo " -H 'Content-Type: application/json' \\"
|
|
echo " -d '{\"mode\":\"shell\"}'"
|
|
echo ""
|
|
echo "🔧 서비스 관리:"
|
|
echo " systemctl status rdp-toggle-api"
|
|
echo " systemctl restart rdp-toggle-api"
|
|
echo " systemctl stop rdp-toggle-api"
|
|
echo ""
|
|
|
|
# 테스트 메뉴 제공
|
|
echo "=========================================="
|
|
echo "RDP API를 테스트하시겠습니까?"
|
|
echo " 1) RDP 모드로 전환 테스트"
|
|
echo " 2) Shell 모드로 전환 테스트"
|
|
echo " 3) 건너뛰기"
|
|
echo ""
|
|
echo -n "선택 [1/2/3]: "
|
|
read -r test_choice </dev/tty
|
|
|
|
case "$test_choice" in
|
|
1)
|
|
echo ""
|
|
echo "RDP 모드로 전환 중..."
|
|
if curl -s -X POST http://localhost:8090/toggle \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{"mode":"rdp"}' > /dev/null 2>&1; then
|
|
echo "✅ RDP 모드로 전환 완료!"
|
|
echo ""
|
|
echo "현재 상태:"
|
|
curl -s http://localhost:8090/status | python3 -m json.tool 2>/dev/null || curl -s http://localhost:8090/status
|
|
else
|
|
echo "❌ RDP 모드 전환 실패. 서비스 상태를 확인하세요:"
|
|
echo " systemctl status rdp-toggle-api"
|
|
fi
|
|
;;
|
|
2)
|
|
echo ""
|
|
echo "Shell 모드로 전환 중..."
|
|
if curl -s -X POST http://localhost:8090/toggle \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{"mode":"shell"}' > /dev/null 2>&1; then
|
|
echo "✅ Shell 모드로 전환 완료!"
|
|
echo ""
|
|
echo "현재 상태:"
|
|
curl -s http://localhost:8090/status | python3 -m json.tool 2>/dev/null || curl -s http://localhost:8090/status
|
|
else
|
|
echo "❌ Shell 모드 전환 실패. 서비스 상태를 확인하세요:"
|
|
echo " systemctl status rdp-toggle-api"
|
|
fi
|
|
;;
|
|
3)
|
|
echo ""
|
|
echo "테스트를 건너뜁니다."
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "잘못된 선택입니다. 테스트를 건너뜁니다."
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "설치 및 설정이 완료되었습니다!"
|
|
echo "=========================================="
|
|
echo "" |