2011-03-22 3 views
4

OS X 데스크탑 (주로 테스트 케이스로 사용)을 사용하여 내부 자식 서버를 설정하려고합니다. SSH 키가 포함될 때 모든 것이 작동하지만 현재 읽기 전용 복제에 git-daemon을 사용하려고합니다. 터미널에서 git-daemon을 시작하면 :OS X에서 launchd를 사용하여 git-daemon 시작하기

sudo -u git git-daemon --basepath=/Users/git/repos/ --export-all 

등 모든 것이 정상적으로 작동합니다.

git clone git://localhost/My_Project.git 

하지만 launchd를 사용하여 설정하려고하면 모든 요청을 거부합니다. 나는이 PLIST 파일을 사용하고 있습니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Label</key> 
     <string>git</string> 
     <key>UserName</key> 
     <string>git</string> 
     <key>OnDemand</key> 
     <false/> 
     <key>ProgramArguments</key> 
     <array> 
       <string>/path/to/git-daemon</string> 
       <string>--base-path=/Users/git/repos/</string> 
       <string>--export-all</string> 
     </array> 
</dict> 
</plist> 

을 내가 My_Project를 복제하려고하면 다음과 같은 오류가 나타날 수

Cloning into My_Project... 
fatal: The remote end hung up unexpectedly 

낙심되는 것은 내가이 일을하는 데 사용 믿는, 그래서 문제가있을 수 있다는 것입니다 내 plist 파일이나 launchd 사용과 관련이 없으며 변경되었을 수있는 모든 네트워크 설정을 수행 할 수 있습니다. 모든 조언을 크게 주시면 감사하겠습니다.

이것이 더 많은 sysadmin 질문 일 경우 사과드립니다.하지만 개발자들이 여기에 약간의 경험이있을 것이라고 생각했습니다.

업데이트는 다음의 repo가있는 경우 콘솔은 다음과 같은 오류를보고합니다

git[431] 
error: cannot run upload-pack: No such file or directory 

답변

6

문제는 자식 - 데몬 그것이 launchd에 과정에서 상속 된 PATH에있는 디렉토리의에서 자식 실행 파일을 찾을 수 있다는 것입니다. 쉘에서 상속 된 PATH가 적절한 디렉토리를 포함하기 때문에 쉘에서 시작할 때 작동합니다.

일반적으로, 망할 놈의 명령은 주요 자식 명령을 통해 호출됩니다 (예를 들어 git commit,하지 (더 이상) git-commit). 무엇보다도, 메인 git 명령은 "서브 명령"이 상속하는 PATH 환경 변수에 기본 "exec 경로"를 추가합니다. 자식 - 데몬 - -

귀하의 launchd에 구성은 직접 "내부"프로그램을 호출하는 대신 일반 최상위 프로그램이 (가 상속 경로를 확장 후)를 호출 댄다.

사용 ProgramArguments 다음 /path/to/git는 일반 쉘 세션에서 어떤 which git 보고서입니다

 <array> 
       <string>/path/to/git</string> 
       <string>daemon</string> 
       <string>--base-path=/Users/git/repos/</string> 
       <string>--export-all</string> 
     </array> 

.

+0

그게 다야! 고마워, 크리스 –

0

당신은 그것을 실행하는 말 아닙니다. (참조 : Sockets)을

<key>KeepAlive</key> 
<true/> 
<key>RunAtLoad</key> 
<true/> 

다른 방법으로, inetdCompatibility을 사용할 수 있습니다 다음 OnDemand을 복용이 추가 시도하고 git-daemon--inetd 플래그는 프로세스는 연결을 시작하도록. 아마도 더 나은 설정이 될 것입니다.

launchd.plist(5) 맨 페이지에는 모든 세부 사항이 있습니다.

+0

지금까지 'OnDemand'를 제안한 것으로 대체하는 것은 아무런 변화가 없었습니다. 'git-daemon'은 plist 키 세트를 사용할 때 시작됩니다. ps -A로 볼 수 있기 때문에, 위의 오류 메시지가 나타납니다. 명령 행에서'git-daemon' 만 시작하면됩니다. –