Linux
從 xinetd 執行時,Git 守護程序無法正常工作
我正在嘗試為我的團隊建立一個 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/strace
xinetd 配置的 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
並再次嘗試查看日誌說什麼?