← 목록
기타 2026-07-07 4KB 읽기 4분

게이트웨이Q 설치 패키지

개요

다른 컴퓨터/가상서버/최종사용자 노드에 한선게이트웨이(순수 한선씨 HTTP 게이트웨이)+ Q감독(다중워커 감독자)+Q피어(P2P 노드 메시)를 옮겨 심을 수 있는 자기완결 배포 번들을 만들었다. tar.gz 하나만 옮기면 대상 머신에서 Q설치.sh 한 번으로 빌드+컴파일+기동까지 끝난다.

무엇을 했는지

  1. Q패키지생성.sh (/Users/ef/crowny-gateway/게이트웨이Q/Q패키지생성.sh)
- crownyc.c/hanseonc_high.c C 소스, 이 맥(arm64) 바이너리 사본, 한선게이트웨이 소스 8개(게이트웨이통합.한선 + 컴파일 의존 6종 + 관리자.한선), Q감독.sh/Q피어.한선/Q피어.sh/ Q트러블3단계.한선/피어목록.psv.example, gateway.example.yaml, stunnel 예시(자리표시자 인증서경로), Q설치.sh, 설치.md를 스테이징 후 tar.gz로 봉인. - 하드코딩된 /Users/ef/crowny-gateway/... 절대경로는 @@GWQ_ROOT@@ 등 토큰으로 치환해 담는다(원본 라이브 파일은 건드리지 않음 — 스테이징 사본만 치환). - 실행 검증: /tmp/게이트웨이Q-패키지-테스트.tar.gz 생성(648K) + tar -tzf로 27개 엔트리 확인.

  1. Q설치.sh (패키지 루트에 동봉)
- ①경로 토큰 역치환(최초 1회) ②crownyc/hanseonc_high 확보(동봉 바이너리 아키텍처 일치 시 재사용, 아니면 cc로 재빌드 — macOS `-framework Security -framework CoreFoundation, Linux -lm -lpthread`) ③게이트웨이 컴파일 ④gateway.yaml 준비 안내 ⑤Q감독 기동(GWQ_WORKERS) ⑥피어목록 자기 노드 등록 안내. - 실측 함정 발견+수정: set -euo pipefail 상태에서 [ -z "$X" ] && Y=... 패턴이 X가 비어있지 않을 때(즉 정상 케이스) 스크립트를 조용히 종료시킴(고전적 && 쇼트서킷 + -e 함정) → if 문으로 교체. 또한 hostname -I | awk ... 파이프가 macOS에선 hostname -I 자체가 무효 옵션이라 실패하는데 pipefail이 그 실패를 파이프 전체 실패로 전파해 스크립트가 죽음 → || true로 흡수. 두 함정 모두 이 세션에서 실제로 재현(exit 1)한 뒤 수정 확인(exit 0).

  1. 설치.md (설치 안내서)
- 노드 유형별(가상서버 Linux/타 맥/최종사용자 엣지) 절차, P2P 역할분담(피어목록.psv 수동 동기화 + 하트비트 확인 절차), DNS 다중 A레코드 전환 절차(hosting.kr 수동 콘솔 조작 — 존재하지 않는 API 가정하지 않음) 수록.

실증 (스크래치 디렉토리에 자기 자신 설치 시뮬)

GWQ_WORKERS=2 GWQ_PORT=8098 bash Q설치.sh
→ 워커1/워커2 모두 LISTEN 확인
→ curl -H "Host: test.example.com" http://127.0.0.1:8098/ → HTTP/1.1 404 (X-Gateway-Phase: Um)
→ Q피어.sh probe(경로 토큰 정상 치환된 사본으로 컴파일+실행) 정상 동작
→ 종료 후 8098/스크래치 디렉토리 정리, 라이브 8080/8443/9100 LISTEN 각 1개 그대로 무영향 확인

관련 파일

  • /Users/ef/crowny-gateway/게이트웨이Q/Q패키지생성.sh
  • /Users/ef/crowny-gateway/게이트웨이Q/Q설치.sh
  • /Users/ef/crowny-gateway/게이트웨이Q/설치.md
  • /tmp/게이트웨이Q-패키지-테스트.tar.gz (검증용 산출물)

잔여 이슈

  • 동봉 바이너리는 macOS arm64 전용 참고본 — Linux/타 아키텍처는 항상 C 소스 재빌드
경로(자동 판단, 문제 없음).
  • 피어목록 동기화는 수동(자동 gossip 없음) — 노드 수 증가 시 중앙 레지스트리 방식으로
확장 검토 필요(설치.md 6절에 명시).
  • systemd/launchd 상시화 유닛 미포함 — Q감독.sh는 foreground 감독 루프이므로 운영체제별
서비스 매니저로 감싸는 건 각 배포 환경의 운영자 몫.
  • stunnel 예시 conf는 인증서 경로가 자리표시자 — 실 도메인 발급은 각 노드에서 별도
진행 필요.