- 모든 read 명령에 </dev/tty 추가
- curl | bash 실행 시 표준 입력 문제 해결
- 파이프로 실행해도 사용자 입력 정상 작동
- 5개 입력 포인트 모두 수정:
- RDP 서버 주소
- RDP 사용자명
- RDP 패스워드 (2회)
- 로컬 사용자명
- 설정 확인
- 네트워크 연결 실패 시 계속 진행 여부
- 재부팅 확인
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Proxmox 버전 확인 시 에러 처리 강화
- pveversion 명령 출력 형식 다양하게 지원
- 버전 확인 실패 시 경고 후 계속 진행
- 정규표현식으로 버전 번호 추출 개선
- 숫자 검증 로직 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- install-rdp-api.sh: curl 원라이너 설치 지원
- requirements.txt 의존성 제거 (패키지 버전 스크립트 내장)
- rdp-toggle-api.py Gitea에서 자동 다운로드
- 상세한 설치 완료 메시지 추가
- RDP/README.md: 완전히 재구성
- curl 원라이너 설치 가이드 추가
- API 엔드포인트 상세 설명 및 응답 예시
- React 프론트엔드 연동 예시 개선
- 문제 해결 섹션 추가
- 네트워크 설정 및 방화벽 가이드
- README.md: RDP 자동화 섹션 추가
- Proxmox RDP 초기 설정 스크립트 소개
- RDP Toggle API 설치 가이드
- API 사용 예시 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
RDP 관련 파일들을 RDP 폴더로 정리하고 API 시스템 추가
주요 변경사항:
- FastAPI 기반 RDP/Shell 모드 전환 API 서버 추가
- venv 환경을 사용하는 자동 설치 스크립트
- requirements.txt로 패키지 의존성 관리
- systemd 서비스로 자동 시작 설정
- CORS 지원으로 외부 프론트엔드 연동 가능
- 실시간 상태 모니터링 API
- 웹 기반 컨트롤 패널 포함
파일 구성:
- rdp-toggle-api.py: FastAPI REST API 서버
- install-rdp-api.sh: venv 환경 자동 설치
- requirements.txt: Python 패키지 의존성
- rdp-toggle-web.html: 웹 컨트롤 패널
- README.md: 사용 가이드
API 기능:
- GET /status: 현재 모드 확인
- POST /toggle: RDP/Shell 모드 전환
- GET /config: 설정 확인
- PUT /config: 설정 업데이트
리액트 프론트엔드에서 토글로 화면 모드 제어 가능
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## 주요 변경사항
### 1. 장비 타입 자동 감지 (detect_device_info)
- Proxmox Host, Windows PC (WSL), macOS, Linux Server 자동 구분
- 호스트명 자동 수집
- 장비명 자동 생성 (예: "테스트약국 Proxmox Host")
### 2. API 호출 개선
- farmq-admin API(/api/pharmacy)에 장비 정보 전송
- device_type: proxmox_host/windows_pc/mac/linux_server
- device_name: 자동 생성된 장비명
- hostname: 시스템 호스트명
- 응답에서 device_registered 확인 및 사용자 피드백
### 3. 출력 개선
- 장비 감지 정보 실시간 출력
- 최종 완료 메시지에 장비 정보 추가
## 백엔드 연동
- farmq-admin/app.py에서 pharmacy_devices 테이블 자동 등록
- 첫 장비는 자동으로 is_primary=TRUE 설정
- device_role: main_server로 고정
## 테스트
- 문법 검사 완료 (bash -n)
- Proxmox Host 환경에서 테스트 준비 완료
🤖 Generated with Claude Code
pbs_allinone.sh 입력 문제 수정:
- 모든 read -p 명령어에 < /dev/tty 추가
- curl | bash 실행 시 stdin 소진 문제 해결
- 사용자 입력이 정상적으로 작동하도록 수정
수정된 read 명령어:
- PBS 스토리지 재등록 확인
- 백업 타입 입력 (vm/ct)
- 백업 ID 입력
- 복구 VM/CT ID 입력
- 저장 스토리지 입력
- 복구 확인
- 기존 VM/CT 삭제 확인
- VM/CT 시작 확인
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 복구 시 사용 가능한 스토리지 목록 자동 표시
- 스토리지 존재 여부 및 VM/CT 이미지 저장 가능 여부 검증
- 잘못된 스토리지 입력 시 재입력 요청
- 스토리지 용량 및 사용률 정보 표시 (GB 단위)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 'success:true' → 'success' AND 'true' 검사로 변경
- pretty-printed JSON (공백/줄바꿈 포함) 대응
- 실제로는 성공했는데 실패로 표시되던 버그 수정
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- grep + sed 조합으로 pharmacy_code 추출 개선
- [[:space:]]로 공백 처리 추가
- 추출 실패 시 상세한 디버깅 정보 출력
- 원인 표시
- JSON 응답 내용 출력
- 추출 시도 결과 표시
- 에러 메시지 명확화 (약국 생성 API 실패 vs pharmacy_code 추출 실패)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 개선 사항:
- Python 없이 순수 bash(tr + sed)로 JSON 파싱
- 다중 라인 JSON 응답 대응 (tr -d '\n')
- pharmacy_code 추출 로직 개선
- 결과 요약 포맷 개선 (약국 코드, 약국명, 계정 정보 명확히 표시)
- VPN 정보 섹션 분리
기술적 변경:
- sed 's/.*"pharmacy_code": "\([^"]*\)".*/\1/' 패턴 사용
- Python 의존성 제거로 더 많은 환경에서 실행 가능
- 결과 출력 포맷 사용자 친화적으로 개선
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
문제:
- grep -oP '\K' 패턴이 일부 환경에서 미지원
- pharmacy_code 추출 실패로 gateway 계정 생성 안 됨
해결:
- cut -d'"' -f4로 변경하여 호환성 향상
- 모든 grep 버전에서 작동
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
문제:
- farmq API 응답에서 pharmacy_code 추출 실패
- 약국은 생성되었지만 코드를 못 가져와서 gateway 계정 생성 불가
원인:
- JSON 구조가 {"pharmacy": {"pharmacy_code": "P0005"}}인데
- 기존 패턴은 최상위 레벨만 검색
해결:
- grep -oP '"pharmacy_code":"\K[^"]+' 패턴 사용
- \K를 사용하여 매칭된 부분 이전은 제외하고 pharmacy_code 값만 추출
- success 체크 먼저 수행
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
테스트 후 생성된 데이터를 쉽게 정리할 수 있도록 문서와 스크립트 추가
추가 파일:
- CLEANUP_TEST_DATA.md: 상세한 정리 가이드
* farmq.db 약국 삭제 방법
* gateway.db 사용자 삭제 방법
* Headscale 노드 삭제 방법
* 백업 및 복구 가이드
- cleanup-test-data.sh: 대화형 정리 스크립트
* P0003 이후 약국 자동 삭제
* ID 5 이후 사용자 자동 삭제
* Headscale 노드 선택 삭제
* 백업 생성 옵션
* 안전 확인 프롬프트
변경 파일:
- README.md: Headscale 섹션 업데이트
* 자동 등록 스크립트 설명 추가
* 테스트 데이터 정리 가이드 링크 추가
사용 예시:
```bash
# 대화형 정리
bash cleanup-test-data.sh
# 원격 실행
curl -fsSL https://.../cleanup-test-data.sh | bash
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Gateway API의 비밀번호 최소 길이 검증(8자) 때문에
기존 "1234"에서 "12341234"로 변경
변경 사항:
- PASSWORD 변수: "1234" → "12341234"
- display_login_credentials 출력도 업데이트
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
curl | bash 방식으로 실행 시 read 명령어가 stdin을 읽을 수 없는 문제 수정
모든 사용자 입력을 /dev/tty에서 읽도록 변경
변경 사항:
- collect_pharmacy_info() 함수의 모든 read 명령어에 </dev/tty 추가
- 이제 스크립트를 파이프로 실행해도 사용자 입력 가능
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
문제:
- tailscale status --json으로 파싱 시도했으나 동작하지 않음
- VPN IP 할당 대기 중 10초 타임아웃 발생
해결:
- 기존 스크립트와 동일하게 'tailscale ip -4' 명령어 사용
- JSON 파싱 불필요, 직접 IPv4 주소 반환
테스트:
- tailscale ip -4 명령어로 즉시 IP 확인 가능
- 100.64.0.14 형식의 IP 정상 출력
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
변경사항:
- headscale-quick-install.sh: 기존 스크립트 유지 (단순 VPN 등록만)
- headscale-auto-register.sh: 새로운 자동 등록 스크립트 (NEW!)
headscale-auto-register.sh 기능:
- Headscale VPN 자동 등록
- VPN IP 자동 확인 (10초 재시도)
- 약국 정보 수집 (약국명 필수)
- farmq.db에 약국 자동 생성 (demo.pharmq.kr)
- gateway.db에 admin 계정 자동 생성 (gateway.pharmq.kr)
- 로그인 정보 출력 (아이디: p{code}, 비밀번호: 1234)
사용법:
# 기존 방식 (VPN만 등록)
curl -fsSL https://git.0bin.in/.../headscale-quick-install.sh | bash
# 새로운 방식 (VPN + 약국 + 계정 자동 생성)
curl -fsSL https://git.0bin.in/.../headscale-auto-register.sh | bash
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
- 약국 정보 수집 함수 추가 (collect_pharmacy_info)
- VPN IP 자동 확인 함수 추가 (get_assigned_vpn_ip)
- farmq-admin API 호출 함수 추가 (create_pharmacy_via_api)
- gateway API 호출 함수 추가 (create_gateway_user_via_api)
- 로그인 정보 출력 함수 추가 (display_login_credentials)
플로우:
1. Headscale VPN 등록
2. VPN IP 자동 확인 (최대 10초 대기)
3. 약국 정보 수집 (약국명 필수, 나머지 선택)
4. farmq.db에 약국 생성 (https://demo.pharmq.kr/api/pharmacy)
5. gateway.db에 admin 계정 생성 (https://gateway.pharmq.kr/api/auth/register)
6. 로그인 정보 출력 (아이디: p{pharmacy_code}, 비밀번호: 1234)
API 엔드포인트:
- farmq-admin: https://demo.pharmq.kr/api/pharmacy
- gateway: https://gateway.pharmq.kr/api/auth/register
백업 파일: headscale-quick-install.sh.backup
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
추가된 문서:
- SCRIPT_IMPROVEMENT_PLAN.md: 스크립트 개선 계획
- FARMQ_ADMIN_INTEGRATION_ANALYSIS.md: farmq-admin API 분석
- HEADSCALE_AUTO_REGISTER_PLAN.md: 초기 계획
주요 내용:
- Headscale VPN 등록 시 자동 DB 생성
- API 엔드포인트: demo.pharmq.kr, gateway.pharmq.kr
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
README 문서 업데이트:
- Proxmox VE 호스트명/FQDN 변경 섹션 추가
- 빠른 실행 명령어 제공
- 주요 기능 및 주의사항 안내
- 대화형 호스트명 변경 도구 소개
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Proxmox VE 호스트명/FQDN 안전 변경 스크립트 추가:
- 현재 설정 확인 및 백업 기능
- 호스트명/도메인 입력 검증
- /etc/hostname, /etc/hosts 자동 수정
- hostnamectl 적용
- Proxmox 서비스 재시작
- 인증서 자동 재발급
- 변경사항 검증 및 롤백 가이드
- 대화형 UI로 안전한 변경 지원
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
README 문서 업데이트:
- Headscale 빠른 설치 섹션 추가
- PBS 올인원 설치 섹션 추가
- 각 스크립트별 빠른 설치 명령어 제공
- 설치 내용 및 사용 방법 안내
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
헤드스케일 빠른 설치 스크립트 추가:
- Tailscale 대체 헤드스케일 클라이언트 등록
- PBS 서버 등록 전 필수 네트워크 설정
- Proxmox 환경을 위한 헤드스케일 통합
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Proxmox Backup Server 올인원 설치 스크립트 추가:
- PBS 저장소 설정
- PBS 패키지 설치
- PBS 저장소 생성 및 마운트
- 방화벽 설정
- Proxmox VE PBS 통합
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 변경사항:
- code-server 설치 명령어를 각각 분리된 코드 블록으로 구성
- URL을 현재 리포지토리(pve9-repo-fix)로 변경
- Claude Code CLI 설치 섹션 추가
📝 개선사항:
- 복사하기 버튼으로 각 명령어 개별 복사 가능
- 기본 설치 / 포트 지정 / 무인 설치 명령어 분리
- 수동 설치 가이드 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 새로운 기능:
- code-server 자동 설치 (미설치 시)
- 설정 파일 자동 생성 및 구성
- 기존 프로세스 정리 (중복 실행 방지)
- 0.0.0.0 바인딩으로 외부 접속 가능
- nohup 백그라운드 실행 (세션 종료 후에도 유지)
🛠️ 사용 방법:
- 기본 포트(8080): ./code-server.sh
- 포트 지정: PORT=8443 ./code-server.sh
- 무인 설치: PASSWORD="pass" SKIP_CONFIRM=1 ./code-server.sh
🔧 주요 기능:
- systemd 미사용 (수동 관리)
- 설정 백업 자동 생성
- 프로세스 안전 종료 후 재시작
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 새로운 기능:
- Node.js 20.x LTS 자동 설치
- npm 포함 설치
- Claude Code CLI 글로벌 설치
- 설치 확인 및 버전 출력
🛠️ 기술 스택:
- Bash script
- NodeSource repository
- npm global package
🔧 사용 방법:
./install-claude-code.sh
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 주요 기능:
- Proxmox VE 9.0에서 apt update 오류 해결
- No-subscription 저장소 자동 구성
- Enterprise 저장소 자동 비활성화
- Ceph 저장소 설정 (기본 비활성)
🛠️ 포함 파일:
- fix-pve9-repos.sh: 자동 설정 스크립트
- README.md: 한글 설치 가이드 및 사용법
📦 설치 방법:
curl -fsSL https://git.0bin.in/thug0bin/pve9-repo-fix/raw/branch/main/fix-pve9-repos.sh | bash
🔧 해결하는 문제:
- PVE 8.0 post-install 스크립트가 9.0에서 작동하지 않는 문제
- Debian 13 Trixie 기반 저장소 설정 오류
- apt update 실행 시 발생하는 인증 오류
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>