服务器使用git协议
来源:互联网 发布:js显示系统时间 编辑:程序博客网 时间:2024/06/08 13:46
1. 前言
最近在服务器上搭建支持git协议的版本库,遇到了些麻烦(主要是因为对linux系统不太熟悉导致),在此小做笔记,以供自己和他人参阅。
我的环境如下表所示,我通过另一台机器克隆版本库来验证:git clone git://192.168.1.101/path/to/repos/mygit.git mygit
linux服务器系统
Ip地址
版本库路径
debian
192.168.1.101
/path/to/repos/mygit.git
2. Git协议概要
Git协议是提供git版本库只读服务的常用协议(匿名读取),该协议的缺点就是不能提供身份认证,也真是因为写操作没有授权控制,因此一般不用来提供写操作。
对于提供公共的,非授权的只读访问,Git协议在性能和速度上远比HTTP协议高效,所以对于提供只读的版本库,我们常用git协议,而不用http协议。
3. Git协议部署
3.1. 部署原理
从原理上来讲,Git 协议的配置很简单。基本上,只要以守护进程的形式运行git-daemon服务软件即可,即以守护进程的形式运行以下参数(参数何意,后面会讲):
git daemon --inetd --verbose --export-all /path/to/repos
以守护进程的形式运行该进程的方法有很多,我前后用过两种方式实现:inetd和xinetd,其实xinetd是inetd的升级版(大家用xinetd就好,我是抱着学习的态度才试着用inetd的),你可以到xinetd的官网看看它介绍就知道了:http://www.xinetd.org/,有关inetd和xinetd的细节不在本本文讨论范围内。
3.2. 部署inetd
inetd到底是什么东东,自己先问下“度娘”或者“谷歌”,要先有个简单的了解。也可以参考man inetd帮助文档(特别是学习完后再回过头来看更有效果)。
3.2.1. 安装
sudo aptitude install netkit-inetd
发现可找到,但无论如何也安装不对。提示了一个信息要指定一个确定安装软件,有一个是openbsd-inetd。继续查找:netkit-inetd已经由openbsd-inetd所替代。于是安装openbsd-inetd:
sudo aptitude install openbsd-inetd
注意:不同的linux系统,情况估计跟我的不一样。
安装成功后,先用以下命令看看inetd运行了没有:
ps ax |grep inetd
先看看openbsd-inetd支持的参数有哪些,输入/etc/init.d/openbsd-inetd –help看帮助:
# /etc/init.d/openbsd-inetd --help
Usage: /etc/init.d/openbsd-inetd {start|stop|reload|force-reload|restart|status}
常用的命令:
/etc/init.d/openbsd-inetd start
启动inetd
/etc/init.d/openbsd-inetd stop
停止inetd
/etc/init.d/openbsd-inetd restart
重启inetd
/etc/init.d/openbsd-inetd reload
修改了配置文件inetd.conf,可以通过该命令使配置立刻生效
3.2.2. 修改配置文件
注意:可以通过man inetd.conf来查看详细的参数说明。
在配置文件/etc/inetd.conf中添加如下设置:
git stream tcp nowait nobody /usr/lib/git-core/git git daemon --inetd --verbose --export-all /path/to/repos
说明:
◇在配置文件中,以上只是一行
◇/usr/lib/git-core/git是我git程序所在位置,git daemon后面是运行git的参数。
◇默认git-daemon只对包含文件git-daemon-export-ok的版本库提供服务。使用--export-all后,无论版本库是否存在标识文件git-daemon-export-ok,都对版本库提供git访问服务。
◇其中/path/to/repos是我在linux服务器上git版本库的存放目录。
◇git daemon的参数很多,这里只列出了简单的用法,有兴趣的可以通过git daemon –help或者man inetd.conf帮助慢慢研究。
3.2.3. 使配置立刻生效
修改了配置文件后,可以通过/etc/init.d/openbsd-inetd restart或者/etc/init.d/openbsd-inetd reload来使配置马上生效。我这里介绍另一种方法。
git-daemon运行时,inetd会读取它的配置文件,默认为/etc/inetd.conf。如果修改了该配置文件,给inetd进程发一个SIGHUP信号,inetd在接收到SIGHUP挂起信号后会重新读取其配置文件。按如下步骤给inetd进程发送一个SIGHUP信号:
◇找出inetd进程的process number
ps ax | grep inetd
230 ?? Ss 0:00.01 inetd
20392 std S+ 0:00.01 grep inetd
从上面可以看出,我这里的process number是'230'。
◇发送SIGHUP信号
sudo kill - SIGHUP 230
至此,你就可以通过git协议克隆版本库了。
3.3. 部署xinetd
既然xinetd是inetd的替代版,建议大家都使用xinetd,需要给你一个替代的理由?去官网看:http://www.xinetd.org/,你可以通过man xinetd来看下帮助手册。
3.3.1. 安装
sudo aptitude install xinetd
或者去官网下载最新源码进行安装。安装成功后,你可以搜索下xinetd文件,发现可执行的文件有两个:/etc/init.d/xinetd和/usr/sbin/xinetd,其他的要么是文件夹要么没有可执行的权限。(注意:不同的linux系统可能路径不太一样)。
# find / -name xinetd –exec ls -idl {} \;
665609 -rwxr-xr-x 1 root root 2063 3月 27 2008 /etc/init.d/xinetd
665608 -rw-r--r-- 1 root root 316 3月 27 2008 /etc/default/xinetd
263351 -rwxr-xr-x 1 root root 133908 3月 27 2008 /usr/sbin/xinetd
269429 drwxr-xr-x 3 root root 4096 10月 24 11:01 /usr/share/doc/xinetd
3281001 -rw-r--r-- 1 root root 28 10月 24 11:01 /var/lib/update-rc.d/xinetd
我一度没弄明白要用哪个路径下的xinetd来启动,好像两个都可以启动xinetd服务。后来才发现/usr/sbin/xinetd才是真正的执行程序,而/etc/init.d/xinetd文件是shell脚本(最终也是调用/usr/sbin/xinetd来执行)。
如果要看/usr/sbin/xinetd程序支持哪些参数,可以manxinetd查看帮助。如果要看/etc/init.d/xinetd脚本支持哪些参数,可以/etc/init.d/xinetd –help查看。是不是有点乱,不要搞混了,你可以打开/etc/init.d/xinetd脚本文件看看里面的内容应该就明白了。
可以通过以下命令查看下xinetd有没有有运行:
ps ax | grep xinetd
如果没有运行,可以通过以下命令来启动xinetd:
/etc/init.d/xinetd start
启动xinetd
/etc/init.d/xinetd stop
停止xinetd
/etc/init.d/xinetd restart
重启xinetd
另外,如果你想看xinetd运行过程中的log信息(如果你配置文件写错了,从log中就能发现错误,有助于排查问题),可以用以下命令,其中/xinetdlog.txt就是log文件。
/usr/sbin/xinetd -filelog /xinetdlog.txt
3.3.2. 修改配置文件
注意:可以通过man xinetd.conf来查看详细的参数说明。
成功安装后,可以看到/etc/xinetd.conf配置文件,这跟inetd不同,你不能在这里直接修改,你需要在/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/local/bin/git
server_args = daemon --inetd --verbose --export-all /path/to/repos
log_on_failure += USERID
}
3.3.3. 使配置立刻生效
在/etc/xinetd.d/目录里新加/修改配置文件,重启xinetd即可生效:
/etc/rc.d/init.d/xinetd restart
4. 提供简短的URL地址
我们上面使用的URL是git://192.168.1.101/path/to/repos/mygit.git,如果版本库的路径比较深,有什么办法能在用户访问时提供短一些的URL地址呢?可以为git daemon使用--base-path参数建立版本库根目录映射,如inetd.conf配置文件写成这样:
git stream tcp nowait nobody /usr/lib/git-core/git git daemon --inetd --verbose --export-all --base-path=/path/to/repos /path/to/repos
那么我们就可以用git://192.168.1.101/mygit.git来访问版本库。
5. 其他
Git协议的默认端口是9418,通过以下命令可以验证,当然你也可以不用默认端口。
# grep 9418 /etc/services
git 9418/tcp # git pack transfer service
git 9418/udp # git pack transfer service
- 服务器使用git协议
- 使用git协议的git 服务器
- Git : SSH 协议服务器
- Git协议 服务器的搭建
- DNS服务器使用协议
- GIT服务器使用基础
- Git 服务器使用基础
- GIT服务器使用基础
- GIT服务器使用基础
- git服务器的使用
- 基于SSH协议的git服务器搭建
- Git服务器四种协议比较
- 4.1 服务器上的 Git - 协议
- 创建基于本地协议的git服务器
- 4.1 服务器上的 Git - 协议
- git通过http代理使用git协议
- 架设git服务器--使用git-daemon
- 架设git服务器--使用git-daemon
- EXP-00008: 遇到 ORACLE 错误 904 ORA-01003
- 不是书评 :《我是一只IT小小鸟》
- 【转】iOS APP体验设计
- IRP结构
- 通达OA 谈谈我们公司应用通达OA工作流
- 服务器使用git协议
- Solution for<Closing socket as no data read from it on during the configured idle timeout of 5 secs
- android 图片 倒影 算法
- 对于页面分页的代码分析
- RMAN特性参数(一)exclude/skip readonly/只读表空间备份恢复
- (转)Android开发工具——ADB(Android Debug Bridge) <二>HOST端
- 8 个很有用的免费 CSS 的 UI 工具箱
- socket基础知识
- window.close(); 关闭浏览器窗口js代码的分析总结