Запуск git-daemon в OS X с помощью launchd - PullRequest
4 голосов
/ 22 марта 2011

Я пытаюсь настроить внутренний git-сервер, используя мой рабочий стол OS X (в основном в качестве тестового примера).Все работает, когда задействованы ключи SSH, но в настоящее время я пытаюсь использовать git-daemon для клонирования только для чтения.Если я запускаю 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, сколько с любыми сетевыми настройками, которые могли измениться.Любой совет будет принят с благодарностью.

Извинения, если это больше вопрос системного администратора, но я подумал, что разработчики могут иметь некоторый опыт здесь.

Обновление: консоль сообщает о следующей ошибке, еслирепо существует:

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

Ответы [ 2 ]

6 голосов
/ 23 марта 2011

Проблема в том, что git-daemon не может найти исполняемый файл git ни в одном из каталогов в ПУТИ, которые он унаследовал от процесса launchd . Он работает, когда вы запускаете его из своей оболочки, потому что PATH, унаследованный от оболочки, включает соответствующий каталог.

Обычно команды Git вызываются основной командой git (например, git commit, а не (больше) git-commit). Помимо прочего, основная команда git добавляет встроенный «путь exec» к переменной среды PATH, которую «наследуют» подкоманды.

Ваша конфигурация launchd напрямую вызывает «внутреннюю» программу - git-daemon - вместо того, чтобы позволить обычной программе верхнего уровня вызывать ее (после расширения PATH она наследуется) .

Используйте следующие ProgramArguments :

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

где /path/to/git - это то, что which git сообщает в обычном сеансе оболочки.

0 голосов
/ 22 марта 2011

Вы не говорите ему бежать.Попробуйте взять OnDemand и добавить это:

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

В качестве альтернативы, вы можете использовать inetdCompatibility (см. Также: Sockets) и git-daemon 's --inetd, чтобы сделать процесстолько начать при подключении.Скорее всего, это будет лучшая конфигурация для вас, хотя, возможно, потребуется немного больше работы.

Страница man launchd.plist (5) содержит все подробности.

...