2026-05-09 초기 기동 openclaw onboard --install-daemon, Node 24+, PATH 위생과 launchd 로그, openclaw doctor 트리아지를 헤드리스 임대 클라우드 Mac에서 (HK / JP / KR / SG / US)
임대 빌더에서 OpenClaw 회귀 대부분은 소문만큼 복잡하지 않습니다. 대화형 SSH는 /opt/homebrew/bin/node를 보지만 launchd는 축소된 PATH를 물려받거나, 상위 프로젝트가 Node 24+를 요구하는데 Node 22로 초기 기동을 했습니다. openclaw onboard --install-daemon을 Xcode 핀과 같은 규율로 다루세요—런타임을 인프라 저장소에서 고정하고 plist EnvironmentVariables를 시크릿 가이드에 맞추며 설치 직후 상태 점검용 curl을 검증합니다. 추가로 배포 가이드, 세션 체크포인트와 재시작, 로그 회전을 위한 Mac mini M4 NVMe 여유를 확보하세요.
운영 스냅샷: Mac CI 호스트에서 초기 기동이 여전히 깨지는 이유
팀은 Xcode와 AI 자동화가 같은 플릿을 쓰기 때문에 임대 Apple Silicon 게이트웨이에 모입니다. 데몬 설치는 여러 패키지 매니저가 공존하면 충돌합니다(Homebrew npm 전역, Volta shim, pnpm 스토어 등). 초기 기동용 CLI는 Node와 패키지 매니저가 결정적으로 해석된다고 가정해 launchd 페이로드를 씁니다. 대화형과 배치에서 해석이 어긋나면 디스크의 환경 파일은 올바르게 보여도 API 키 없이 기동합니다.
launchctl print 스냅샷에서 그대로 복제합니다.
Node 24+에 고정한 런타임 전제
원본 프로젝트는 초기 기동 전에 Node.js 24 이상을 요구합니다. 이 핀을 빼면 네이티브 모듈 설치가 들쭉날쭉하고 doctor가 TLS 검증에서 실패합니다. 표준 채널(nix, asdf 핀, tarball, 통제된 brew bundle)로 Node를 두고 plist가 재사용할 단일 절대 경로에 기록합니다.
- 아키 일치 — arm64 바이너리만. 게이트웨이 계정에서는 Rosetta node를 거부합니다.
- 동시성 — 같은 UID를 건드리는 병렬 SSH에서 전역 npm 업그레이드를 동시에 돌리지 않습니다.
- 무결성 — 에어갭 지역으로 가져온 툴체인 tarball은 체크섬을 검증합니다.
설치 경로: npm, pnpm, bun
호스트 클래스당 주 인스톨러는 하나입니다. 하류 자동화가 npm 전역을 기대하면 symlink도 문서화된 경우에만 허용합니다. pnpm은 plist에서 PNPM_HOME을 명시합니다. bun은 대응되는 BUN_INSTALL 접두사가 필요합니다. 고정된 패키지 매니저 호출로 OpenClaw를 정규화해 리전 클론에서도 재현성을 유지합니다(홍콩·도쿄·서울·싱가포르·미국).
# 데몬 전 대화형 검증
hash -r
command -v node
node -v
openclaw --version
초기 기동(--install-daemon) 이후 launchd 배선
완료 시 사용자 LaunchAgents 도메인에 plist가 등록됩니다. macOS Sonoma/Sequoia에 맞는 launchctl bootstrap 시퀀스를 즉시 실행하세요—레거시 load 의미는 이미지 이전 시 혼선을 줍니다. LimitLoadToSessionType, ThrottleInterval, SoftResourceLimits를 AI 에이전트가 디스크와 네트워크에 동시에 두드리는 부하에 맞춥니다.
plist 표준 출력·표준 오류와 OpenClaw 로그 루트
StandardOutPath와 StandardErrorPath는 자바 가비지 컬렉션 로그와 같은 알림 기준이 맞습니다—비어 있으면 크래시가 소리 없이 사라집니다. ~/.openclaw/logs 아래를 하우스키핑으로 로테하는 편이 안전합니다. 대량 트랜스크립트는 토큰 마스킹 뒤에만 중앙 로그로 보냅니다. 타임스탬프는 여러 리전의 장애 분석을 위해 launchd와 대조합니다.
# 페일오버 리허설 중 두 스트림 추적
/usr/bin/log stream --predicate 'process == "node"' --level debug
openclaw doctor: 순서 있는 트리아지
초기 기동 직후, plist 수정마다, 주간 혼란 모의훈련에서도 실행합니다. 전형적인 검사는 Node ABI, 모델 도달성, 상태 디렉터리 쓰기, 플러그인 훅입니다. 경고는 후속 작업 목록으로 두고—게이트웨이 수신 엔드포인트에 프로덕션 부하를 올리기 전에는 치명 항목을 0으로 만듭니다.
- Node는 녹색·네트워크는 빨강 — 외부 TLS 가로채기 장비를 점검합니다.
- 디스크 빨강 — 정리 작업을 재실행하거나 임대 상품을 키운 뒤 설정을 다시 씁니다.
- 플러그인 실패 — 선택 패키지의 시맨틱 버전 어긋남과 대조합니다.
doctor와 로그 트리아지 매트릭스
| 증상 | doctor 신호 | 첫 수정 |
|---|---|---|
| 데몬이 즉시 종료 | 인터프리터 누락 | 절대 NODE_BINARY 주입 + plist 재로드 |
| 인증 스코프 소모 | API 로테 경고 | launchd 승인 env 리로드로 키 로테 |
| 야간 무음 크래시 | doctor 깨끗 | stderr 파일을 열고 launchd throttle 시각과 비교 |
| 배포 후 높은 CPU | 플러그인 예열 표시 | 플러그인 버전 고정과 휴지 일정 |
재현 가능한 초기 기동 7단계 운영 절차
- 업그레이드 전 ~/.openclaw와 launchd plist를 스냅샷합니다.
- Node 24+를 설치하고 패키지 매니저 접두사를 맞춥니다.
- 자동화 사용자로 openclaw onboard --install-daemon을 실행합니다.
- LaunchAgent를 재로드하고 PID가 5분 안정적인지 확인합니다.
- 차단 이슈가 없어질 때까지 doctor를 반복합니다.
- 프로브 가이드의 합성 curl과 팀 채팅 알림 경로를 때립니다.
- 장애 대응 담당자를 위해 절대 경로를 운영 문서에 기록합니다.
SLO 표: 임대 Mac에서의 데몬 신선도
| 신호 | 임계값 | 조치 |
|---|---|---|
| 배포 후 doctor 퇴보 | 치명 결과가 > 0 | 처리량 동결; 초기 기동 재실행 및 plist 비교 |
| stderr 트랜스크립트 누락 | 설명 불가 재시작이 하나라도 | StandardErrorPath ACL 수정 |
| PATH 드리프트 감사 | 분기마다 호스트 > 1% 불일치 | 골든 머신 이미지 재구축 / 프로필 복원 |
자주 묻는 질문
| 질문 | 실무 답변 (2026-05-09) |
|---|---|
| 외부 볼륨의 pnpm 스토어? | plist가 PNPM_STORE_DIR를 내고 APFS 쿼터를 모니터하면 가능—핫 게이트웨이는 NFS를 피하세요. |
| sudo로 초기 기동을 해도 되나? | 전용 자동화 사용자를 권장—sudo는 LaunchAgents 디렉터리의 소유권 함정을 키웁니다. |
OpenClaw 데몬에 Mac mini M4 물리 호스트가 맞는 이유
NVMe 꼬리 지연과 결정적인 Apple Silicon 클럭이 웹소켓 트래픽 합류를 안정화합니다—시끄러운 이웃 가상 머신보다 낫습니다. 하드웨어 결정은 지역별 요금과 짝을 이루고, 까다로운 PATH는 임대 빌더용 원격 접근 가이드로 에스컬레이션하세요.