- git clone URL에 Gitea 토큰 포함 (인증 프롬프트 제거)
- gpg --batch --yes 추가 (Overwrite? y/N 프롬프트 제거)
- v1, v2 둘 다 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- VNC/pharmq-novnc-setup.sh: --pve-host, --pve-password, --pharmacy-code, --pharmacy-name 인자 추가
- 인자 있으면 대화형 입력 스킵, 없으면 기존대로 대화형
- set -euo → set -eo (unset 변수 에러 방지)
- pharmq-setup.sh Phase 9: PVE LAN IP 자동 감지 + 약국 정보 인자로 전달
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- noVNC는 Ubuntu CT(ubuntu-api)에서 돌아야 함
- pct exec로 CT 안에서 설치 스크립트 실행
- CT 내부에 이미 설치돼있으면 스킵
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- farmq-admin: GET /api/pharmacy/search?vpn_ip= 엔드포인트 추가
- pharmacy_devices + pharmacies 테이블 모두 검색
- 스크립트: 기존 복잡한 Python 파싱 → 단순 API 호출로 변경
- PVE IP, CT IP 둘 다 검색 가능
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Phase 3: PVE VPN IP로 farmq API 조회하여 이미 등록된 약국이면
약국 정보 자동 로드 + 사용자 확인 후 스킵
- Phase 7: PHARMACY_CODE가 이미 있으면 등록 스킵, hostname만 업데이트
- 재실행 시 불필요한 약국 중복 생성 방지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Phase 8: RDP 자동 연결 (xorg+openbox+freerdp+toggle API)
- VM 201(192.168.0.201) 자동 감지, rdpuser 자동 로그인
- RDP Toggle API (포트 8090) 설치
- 이미 설치돼있으면 스킵
- Phase 9: noVNC 웹 서비스 (기존 스크립트 호출)
- 이미 설치돼있으면 스킵
- Phase 10: 검증 + 결과 출력 (기존 Phase 8)
- RDP API 정보 출력 추가
- 모든 Phase 번호 /8 → /10으로 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
일반 ping은 Tailscale iptables 규칙에 의해 DROP될 수 있음.
tailscale ping으로 변경하여 실제 VPN 통신 상태를 정확히 확인.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Phase 4: VM이 이미 존재하면 PBS 복원 스킵 (qm status 체크)
- Phase 5: ubuntu-api CT가 이미 있으면 생성 스킵 (200~299 스캔)
- Phase 6: CT에 Tailscale + API 코드가 있으면 환경 구축 스킵
- PBS 인증 실패 시 exit 대신 스킵 후 계속 진행
- 상태 파일 없이 시스템 상태만 보고 판단
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Users were entering list number (e.g. 4) but script expected backup ID (e.g. 201).
Now maps selection number to actual VM ID via temp file.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
VM restore failure should not kill the entire script.
Skip to Phase 5 (CT creation) instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- set -euo → set -eo (unset var no longer fatal)
- Python snapshot lookup: catch exceptions, use || true
- Prevents script exit on empty PBS responses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Auto-selects VM backup, target VMID, storage, and auto-confirms existing VM deletion.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Allows non-interactive execution via SSH pipe or automation.
Falls back to interactive /dev/tty input when no args provided.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ping 192.168.0.100 can false-positive if external pharmacy has a device
at that IP. Now checks if 192.168.0.100:8070 actually responds like Headscale.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Same-LAN PVE hosts can't reach head.pharmq.kr via public IP (NAT hairpinning).
Script now pings 192.168.0.100 to detect LAN and uses direct IP:8070 instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Single script that handles: PVE repo fix, Tailscale/Headscale VPN registration,
PBS Windows VM restore, Ubuntu CT creation with API environment,
pharmacy + device registration in farmq.db, and gateway account creation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>