Назад | Перейти на главную страницу

Демон Git не работает должным образом при запуске из xinetd

Я пытаюсь создать публичный репозиторий git для своей команды.

Я установил Git в Linux (RedHat 5.6).

В качестве первого шага я пытаюсь настроить Git для использования протокола git, настроив его для работы через xinetd.

Вот содержимое /etc/xinetd.d/git-daemon:

# default: off
# description: The git server offers access to git repositories
service git
{
        disable = no
        type            = UNLISTED
        port            = 9418
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/bin/git/git
        log_type = FILE /var/log/git-daemon
        server_args     = daemon --verbose --inetd --export-all --base-path=/tmp
        log_on_failure  += USERID
}

Согласно / var / log / messages служба запускается правильно.

При попытке клонировать тестовый (голый) репозиторий возникает ошибка:

C:\Users\ltal>git clone git://10.161.202.45/lior-test.git c:\liorssf
Cloning into c:\liorssf...
fatal: protocol error: bad line length character: fata

Выполнение той же команды, которая настроена для xinetd из оболочки, кажется, работает нормально:

/usr/bin/git/git daemon --verbose --export-all --base-path=/tmp &

Теперь клонирование работает.

Что я здесь делаю не так? Кажется, не могу найти решения.

«фата» - начало «фатального», git clone обрезает его, поэтому вы можете напрямую попробовать использовать nc 10.161.202.45 9418 чтобы получить полное сообщение, возвращаемое git daemon, то, если вам этого недостаточно, чтобы исправить это, вы можете временно заменить /usr/bin/git по /usr/bin/strace в поле сервера конфигурации xinetd и добавьте -f /usr/bin/git к server_args поле. Вероятно, это ошибка разрешений, возможно, у вас /.git/ владеть корнем, и git daemon скорее всего, будет работать как менее привилегированный git пользователь, давится при попытке прочитать /.git/config

Проблема была с пользователем, которого я использовал для настройки xinetd.

Я изменил его на root (на данный момент), и теперь я могу с радостью клонировать репозиторий из других клиентов.

Может быть /usr/bin/git не входит в ПУТЬ.

Добавить env += GIT_TRACE=/tmp/git-xinetd.log в /etc/xinetd.d/git-daemon и попробуйте еще раз посмотреть, что написано в журнале?