From e7d5dd02d22010ff292da18ee96fb8e71c4b4a5d Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 17 Nov 2025 03:00:55 +0000 Subject: [PATCH] Improve RDP API installer with rerun detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: - Detect if RDP Toggle API is already installed and running - Show test menu immediately on rerun (no reinstallation) - Add option 3 (status check) and option 4 (exit) to test menu - Extract test menu to reusable function show_test_menu() - Both fresh install and rerun show same interactive test menu Now users can easily test RDP toggle by simply rerunning the installer script. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- RDP/install-rdp-api.sh | 160 +++++++++++++++++++++++------------------ 1 file changed, 89 insertions(+), 71 deletions(-) diff --git a/RDP/install-rdp-api.sh b/RDP/install-rdp-api.sh index 8954313..fa12e9f 100755 --- a/RDP/install-rdp-api.sh +++ b/RDP/install-rdp-api.sh @@ -5,8 +5,6 @@ set -e -echo "RDP Toggle API μ„€μΉ˜ μ‹œμž‘..." - # IP μ£Όμ†Œ κ°€μ Έμ˜€κΈ° (Headscale μš°μ„ , μ—†μœΌλ©΄ 둜컬 IP) get_primary_ip() { # Headscale VPN IP 확인 (100.64.x.x λŒ€μ—­) @@ -29,11 +27,98 @@ get_primary_ip() { echo "127.0.0.1" } +# ν…ŒμŠ€νŠΈ 메뉴 ν•¨μˆ˜ +show_test_menu() { + echo "" + echo "==========================================" + echo "RDP APIλ₯Ό ν…ŒμŠ€νŠΈν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?" + echo " 1) RDP λͺ¨λ“œλ‘œ μ „ν™˜ ν…ŒμŠ€νŠΈ" + echo " 2) Shell λͺ¨λ“œλ‘œ μ „ν™˜ ν…ŒμŠ€νŠΈ" + echo " 3) ν˜„μž¬ μƒνƒœ 확인" + echo " 4) μ’…λ£Œ" + echo "" + echo -n "선택 [1/2/3/4]: " + read -r test_choice /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 "ν˜„μž¬ μƒνƒœ 확인 쀑..." + curl -s http://localhost:8090/status | python3 -m json.tool 2>/dev/null || curl -s http://localhost:8090/status + ;; + 4) + echo "" + echo "μ’…λ£Œν•©λ‹ˆλ‹€." + return 0 + ;; + *) + echo "" + echo "잘λͺ»λœ μ„ νƒμž…λ‹ˆλ‹€." + ;; + esac + + echo "" +} + # μ„€μΉ˜ 디렉토리 μ„€μ • 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" +# 이미 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ 확인 +if systemctl is-active --quiet rdp-toggle-api.service && [ -f "$INSTALL_DIR/rdp-toggle-api.py" ]; then + echo "" + echo "==========================================" + echo "βœ… RDP Toggle APIκ°€ 이미 μ„€μΉ˜λ˜μ–΄ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€!" + echo "==========================================" + echo "" + echo "πŸ“ API μ„œλ²„: http://$(get_primary_ip):8090" + echo "πŸ“ μ„€μΉ˜ μœ„μΉ˜: $INSTALL_DIR" + echo "" + + # λ°”λ‘œ ν…ŒμŠ€νŠΈ 메뉴 보여주기 + show_test_menu + + echo "" + echo "==========================================" + echo "μ™„λ£Œ!" + echo "==========================================" + echo "" + exit 0 +fi + +echo "RDP Toggle API μ„€μΉ˜ μ‹œμž‘..." + # Python 및 venv μ„€μΉ˜ echo "Python 및 ν•„μˆ˜ νŒ¨ν‚€μ§€ μ„€μΉ˜ 쀑..." apt update @@ -92,76 +177,9 @@ 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/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 +# ν…ŒμŠ€νŠΈ 메뉴 보여주기 +show_test_menu echo "" echo "=========================================="