Linux

從 xinetd 執行時,Git 守護程序無法正常工作

  • August 21, 2016

我正在嘗試為我的團隊建立一個 git 公共儲存庫。

我已經在 linux 機器(RedHat 5.6)上安裝了 Git。

作為第一步,我試圖將 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

從 shell 執行為 xinetd 配置的相同命令似乎工作正常:

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

現在複製工作。

我在這裡做錯了什麼?似乎找不到解決辦法。

“fata” 是 “fatal” 的開頭,git clone將其截斷,所以你可以直接嘗試使用nc 10.161.202.45 9418獲取 git daemon 返回的完整消息,如果這還不足以修復它,你可以暫時替換/usr/bin/git/usr/bin/stracexinetd 配置的 server 欄位,並-f /usr/bin/git添加到該server_args欄位的前面。這可能是一個權限錯誤,也許你有一個/.git/自己的root使用者,並且git daemon可能以較低權限的git使用者身份執行,嘗試閱讀時窒息/.git/config……

也許/usr/bin/git不在PATH中。

添加env += GIT_TRACE=/tmp/git-xinetd.log/etc/xinetd.d/git-daemon並再次嘗試查看日誌說什麼?

引用自:https://serverfault.com/questions/301949