我尝试使用 ssh 和 http 安装 gitolite3。
我主要关注的是gitolite3 官方指南,但我又遇到了三个剩余的问题。
当我 时
$ git clone http://florian@server/git/testing
,这会正确创建 repo。我添加并提交一个新的文本文件,然后$ git push http://florian@server/git/testing
。事情是,它只给我一条消息:Everything up-to-date
这很奇怪。我
$ rm -rf testing
再次克隆了 repo,但我的文本文件不见了。似乎读取没有问题,但写入却在某处丢失了。/etc/httpd/logs/suexec.log、error_log、access_log 中都没有任何可疑内容,它们都表明用户身份验证和连接成功。此外,用于测试的 ./gitolite-admin/conf/gitolite.conf 的内容为:repo testing RW+ = @all RW+ = daemon
虽然gitolite3 官方指南没有提到为测试仓库添加 W+。我有点困惑,我应该去哪里查看才能让 http 推送正常工作?
为了达到这一步,我不得不
echo 0 > /selinux/enforce
(禁用 selinux),我想再次启用它。重新启用后,每次我尝试上述操作时,httpd error_log 都会出现以下几行$ git clone http://florian@server/git/testing
,并且命令本身会失败(当然):[Sun Aug 04 00:19:34 2013] [error] [client 10.42.43.1] FATAL: errors found but logfile could not be created [Sun Aug 04 00:19:34 2013] [error] [client 10.42.43.1] FATAL: /var/lib/gitolite3/.gitolite/logs/gitolite-2013-08.log: Permission denied [Sun Aug 04 00:19:34 2013] [error] [client 10.42.43.1] FATAL: warn\tUse of uninitialized value $rc{"UMASK"} in umask at /usr/share/gitolite3/gitolite-shell line 95, <DATA> line 1.<<newline>> [Sun Aug 04 00:19:34 2013] [error] [client 10.42.43.1] Premature end of script headers: gitolite-suexec-wrapper.sh
...所以我现在遇到了 selinux 难题。运行以下行显示:
# ll -Z /var/lib/gitolite3/.gitolite/logs/gitolite-2013-08.log -rw-rw-rw-. gitolite3 gitolite3 unconfined_u:object_r:gitosis_var_lib_t:s0 /var/lib/gitolite3/.gitolite/logs/gitolite-2013-08.log
...这让我更加困惑。我知道 gitolite3 正在遵循 gitosis,但似乎我的操作系统 CentOS6.4 实际上正在快速修复,使用旧的 gitosis 标签而不是新的 gitolite 标签来标记文件上下文。这很公平,但现在我想问社区这里有什么最佳实践,我应该启用哪些权限来解决这个访问问题?
抱歉,如果这些问题太多了,我不知道安装 gitolite3 对于 http 来说并不那么简单。但我决心要让它启动并运行,而且我知道距离目标已经不远了。