CentOS下编译安装git服务器

好久不写博客,实在是因为没有时间。现在得空了,开始记录问题。

之前在服务器上架设了svn服务器,但自从用过了git,发现svn实在是弱暴了,于是想把服务器上的svn换成git。于是有了这篇文章。

直接切入正题:开始安装git

1、在官网上下载最新版git服务器源码包(https://www.kernel.org/pub/software/scm/git/),目前最新版为2.9.5。

wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

2、编译安装。

./configure --prefix=/opt/soft/git-2.9.5
make
make install

在执行make时出现错误:
Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed–compilation aborted at Makefile.PL line 3.
make[1]: *** Error 2
make: *** Error 2

原因是编译FCGI的时候报错了,执行“yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker”即可。
之后再次运行make,发现出现新的错误:
GITGUI_VERSION = 0.20.GITGUI
* new locations or Tcl/Tk interpreter
GEN git-gui
INDEX lib/
* tclsh failed; using unoptimized loading
MSGFMT po/bg.msg make[1]: *** [po/bg.msg] Error 127
make: *** [all] Error 2

执行“yum install tcl tk gettext”后,再次make,成功!

make install

3、查看/opt/soft/git-2.9.5目录是否存在。

[zoutuo@zousServer git-2.9.5]$ ls /opt/soft/git-2.9.5/
bin  lib64  libexec  share
[zoutuo@zousServer git-2.9.5]$ 

4、创建软连接。

[root@zousServer ~]# ln -s /opt/soft/git-2.9.5/bin/git* /usr/bin/

5、查看git版本。

[zoutuo@zousServer git-2.9.5]$ git --version
git version 2.9.5

6、创建第一个git库

[zoutuo@zousServer git-2.9.5]$ git --bare init /opt/gitdata/test.git

至此git主程序已经安装完毕,要正常使用git,除了主程序,还需要安装一个名为“Gitosis”的程序。
关于Gitosis,大家可以简单了解下:
Git是非常著名的分布式版本控制系统。
Gitosis是方便通过Git与ssh架设中央服务器的软件。(原文链接:http://www.jiangmiao.org/blog/1600.html

下面开始安装Gitosis
1、安装python

[root@zousServer ~]# yum install python python-setuptools

2、clone gitosis

[zoutuo@zousServer setup]$ git clone https://github.com/tv42/gitosis.git
[zoutuo@zousServer setup]$ cd gitosis/
[zoutuo@zousServer gitosis]$ python setup.py install

出现错误:[Errno 13] Permission denied: ‘/usr/lib/python2.6/site-packages/test-easy-install-529.write-test’
分析为权限错误,因为自己用的不是超级用户,所以切换到root后执行,一切OK。

至此Gitosis安装成功。下面进行密钥管理设置。密钥管理,需要有一个密钥管理员。我们暂且把服务器上的git用户作为管理者。
1、创建git用户

[root@zousServer gitosis]# useradd -c "git version manager" -m -d /home/git -s /bin/bash git
[root@zousServer gitosis]# passwd git
Changing password for user git.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

2、切换到git,创建公钥

[zoutuo@zousServer gitosis]$ su - git
[git@zousServer ~]$ ssh-keygen -t rsa

至此git用户与公钥都已经创建成功。下面开始Gitosis初始化

[git@zousServer ~]$ gitosis-init < .ssh/id_rsa.pub

至此git服务端部分已经成功搭建。正常使用git clone git@127.0.0.1:gitosis-admin.git就可以进行clone操作,但是因为本人使用的linux禁止ssh密码登录,所以会出现下面的错误:
ssh: connect to host 127.0.0.1 port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所以需要使用http协议,80端口来实现对git的管理。上网查了下资料,发现多种方案:
Git – Smart HTTP。此方案建立在apache基础上。虽然在我的服务器上存在apache服务,但并不是用于转发请求。我的转发请求应用服务器为nginx,所以排除
nginx git-http-backend。此方案比较适合我现有服务,于是着手开始设置:

1、安装fcgi-devel、spawn-fcgi
正常这两个包,系统自带源找不到。所以需要先安装epel源,方法如下:

yum -y install epel-release

安装后检查下是否成功:
yum repolist
如果出现“epel Extra Packages for Enterprise Linux 6 – x86_64 10,023”则说明成功。
然后安装fcgi-devel、spawn-fcgi:

yum install fcgi-devel spawn-fcgi

2、安装fcgiwrap

cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd /usr/local/src/fcgiwrap
autoreconf -i
./configure
make
mv fcgiwrap /usr/local/bin/

3、在启动脚本中加入fcgiwrap

#!/usr/bin/perl
use strict;
use warnings FATAL =&gt; qw( all );

use IO::Socket::UNIX;

my $bin_path = '/usr/local/bin/fcgiwrap';
my $socket_path = $ARGV[0] || '/tmp/cgi.sock';
my $num_children = $ARGV[1] || 1;

close STDIN;

unlink $socket_path;
my $socket = IO::Socket::UNIX-&gt;new(
    Local =&gt; $socket_path,
    Listen =&gt; 100,
);

die "Cannot create socket at $socket_path: $!\n" unless $socket;

for (1 .. $num_children) {
    my $pid = fork;
    die "Cannot fork: $!" unless defined $pid;
    next if $pid;

    exec $bin_path;
    die "Failed to exec $bin_path: $!\n";
}

4、分配权限
chmod +x /etc/init.d/fcgiwrap
5、将配置加入启动文件

cat /etc/init.d/fcgiwrap &gt;&gt; /etc/rc.local

6、配置nginx

server {
    listen       80;
    server_name  git.zous-windows.com;

    auth_basic            "Restricted";
    auth_basic_user_file  /opt/svndata/pwdfile;

    location ~ /git(/.*) {
        # fcgiwrap is set up to listen on this host:port
        fastcgi_pass unix:/tmp/cgi.sock;
        include       fastcgi_params;
        fastcgi_param SCRIPT_FILENAME  /opt/soft/git-2.9.5/libexec/git-core/git-http-backend;
        # export all repositories under GIT_PROJECT_ROOT
        fastcgi_param GIT_HTTP_EXPORT_ALL "";
        fastcgi_param GIT_PROJECT_ROOT    /opt/gitdata;
        fastcgi_param PATH_INFO           $1;
        fastcgi_param   REMOTE_USER     $remote_user;

    }
}

注意:server_name、auth_basic_user_file、SCRIPT_FILENAME、GIT_PROJECT_ROOT需要修改为自己对应的路径。

至此服务端全部服务均已安装并且配置完毕,我们可以通过git clone http://git.zous-windows.com/git/test来验证。然后通过命令commit、push等。这时会出现几个小问题,但是每个问题都会给你建议提示,按照提示去做就好了。之后通过idea的git clone即可更新、提交、创建分支等操作。如有不明白处可以留言。

参考资料:
http://yanliu.org/2015/08/20/Centos-6-4搭建git服务器/
https://www.yvanz.com/2016/06/01/Git-server-with-http(s)-protocol.html
https://doomzhou.github.io/git/linux/2016/03/30/git-over-http-by-nginx.html
https://www.awaimai.com/1712.html

Submit comment

Allowed HTML tags: <a href="http://google.com">google</a> <strong>bold</strong> <em>emphasized</em> <code>code</code> <blockquote>
quote
</blockquote>