从 xinetd 运行时,Git 守护程序无法正常工作

从 xinetd 运行时,Git 守护程序无法正常工作

我正在尝试为我的团队建立一个 git 公共存储库。

我已经在 Linux 机器(RedHat 5.6)上安装了 Git。

第一步,我尝试通过设置 Git 以通过 xinetd 运行来配置它以使用 git 协议。

以下是 /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

从 shell 运行为 xinetd 配置的相同命令似乎工作正常:

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

现在克隆可以工作了。

我做错了什么?似乎找不到解决方案。

答案1

“fata” 是“fatal”的开头,git clone将其截断,因此您可以直接尝试使用nc 10.161.202.45 9418来获取 git daemon 返回的完整消息,然后如果这不足以修复它,您可以暂时在 xinetd 配置的服务器字段中替换/usr/bin/git/usr/bin/strace并将其添加-f /usr/bin/gitserver_args字段前面。这可能是权限错误,也许您拥有/.git/root 用户,并且git daemon可能以权限较低的git用户身份运行,尝试读取时会卡住/.git/config……

答案2

可能/usr/bin/git不在 PATH 中。

添加并再试一次env += GIT_TRACE=/tmp/git-xinetd.log/etc/xinetd.d/git-daemon看看日志说了什么?

答案3

问题出在我用于设置 xinetd 的用户上。

我将其更改为 root(现在),现在我可以愉快地从其他客户端克隆存储库。

相关内容