Skip to content

셋업 호환성 2건: GUI Tailscale.app CLI가 relay PATH에 없음 / cmux 0.64.x socket-control-password 경로 이전 미대응 #14

Description

@ProjectORIGINAL

오늘 신규 설치하며 403 → auth_required로 이어지는 지뢰 2개를 밟아서, 원인과 검증된 해결책을 공유합니다.

1. GUI Tailscale.app의 CLI가 relay PATH에 없음 → whois 실패 → 전부 403

  • launchd plist의 PATH는 /usr/local/bin:/opt/homebrew/bin:...인데, GUI(standalone pkg) Tailscale의 CLI는 /Applications/Tailscale.app/Contents/MacOS/Tailscale에만 있고 PATH에 링크되지 않습니다.
  • LocalAPI 소켓(/var/run/tailscaled.socket)도 GUI 배포판은 만들지 않으므로 whois가 CLI 폴백까지 전부 실패 → registerNew가 무조건 403.
  • 주의: 단순 심링크는 안 됩니다 — Tailscale 바이너리가 번들 검사에서 크래시합니다 (Fatal error: The current bundleIdentifier is unknown to the registry). 래퍼 스크립트로 해결했습니다:
    printf '#!/bin/sh\nexec /Applications/Tailscale.app/Contents/MacOS/Tailscale "$@"\n' > /opt/homebrew/bin/tailscale
    chmod 755 /opt/homebrew/bin/tailscale
  • 제안: runTailscaleWhoisCLI/usr/bin/env tailscale 실패 시 /Applications/Tailscale.app/Contents/MacOS/Tailscale 절대경로를 추가 폴백으로 시도하면 GUI 설치 사용자도 바로 동작합니다.

2. cmux 0.64.x의 socket-control-password 경로 이전 미대응 → auth_required

  • cmuxSocketPassword()~/Library/Application Support/cmux/socket-control-password만 확인하는데, cmux 0.64.x는 ~/.local/state/cmux/socket-control-password에 씁니다.
  • 결과: 비밀번호를 못 찾아 socketPassword = nil → 인증 생략 → 모든 RPC가 auth_required. 부수 증상으로 events.stream이 정확히 30초마다 detach/re-attach를 반복합니다 (cmux가 미인증 구독자를 끊는 것으로 보임).
  • cmux.sock 경로는 이미 last-socket-path 마커로 최신순 추적하시니, 비밀번호 파일도 같은 순서(~/.local/state/cmux → 레거시 Application Support)로 확인하면 될 것 같습니다.
  • 임시 해결 (검증 완료):
    ln -sf ~/.local/state/cmux/socket-control-password "~/Library/Application Support/cmux/socket-control-password"
  • 참고: cmux 0.64.17 소켓에서 auth.login JSON-RPC는 정상 동작 확인했습니다 ({"result":{"authenticated":true}}).

두 개 다 적용 후 iPhone 페어링·미러링·알림 정상 동작합니다. 필요하시면 PR로도 올리겠습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions