最近由于项目需要,学习搭建gitosis服务器,参考各种网络贴,踩了无数坑,终于找到一个前辈的比较完整的搭建步骤,非常感谢,附上链接
http://www.cnblogs.com/candle806/p/4064610.html
搭建环境:客户端windows,服务器Ubuntu 14.04
搭建步骤:
1、更新Ubuntu server
操作如下:
$ apt-get update
$ apt-get upgrade
2、安装openssh的server和client
其实通常情况下,Ubuntu server都默认安装了openssh。安装SSH的目的,SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务,ssh可用于远程登录,服务端需要安装openssh-server,客户端需要安装openssh-client。介绍ssh协议是因为gitolite以及gitosis都是基于ssh公钥认证的。
安装openssh之前,可以先查看是否安装过
$ ps -ef | grep ssh
如果没有,就继续如下安装步骤,
$ sudo apt-get install openssh-server openssh-client
3、安装git
$ sudo apt-get install git-core
安装完毕即可
4、配置git用户
在Ubuntu Server上新增一个git用户,用于为安装gitosis做准备
$ sudo adduser --system --shell /bin/bash --group git // 创建用户 git,并设置用户的 shell 为可登录的 shell,如 /bin/bash,同时添加同名的用户组。
$ sudo adduser git ssh // 有的系统,只允许特定的用户组(如 ssh 用户组)的用户才可以通过 SSH 协议登录,这就需要将新建的 git 用户添加到 ssh 用户组中。
$ sudo passwd git // 为 git 用户设置口令。
经过以上设置,在客户端的git bash中链接服务器时就不用输入密码了
5、创建git Server的仓库存储
$ sudo mkdir /home/git/repositories // 创建git仓库存储目录
$ sudo chown git:git /home/git/repositories // 设置只允许git用户才能访问此目录
$ sudo chmod 755 /home/git/repositories // 设置目录访问的可读写或执行的权限
初始化一下服务器的git用户,这一步其实是为了安装gitosis做准备。在任何一 台客户端机器上使用git,第一次需要初始化一下:
$ git config --global user.name "name" // 例如:james
$ git config --global user.email "name@server" // 例如:james@yahoo.com
6、获取Gitosis,并安装
Gitosis 就是一套用来管理 authorized_keys
文件和实现简单连接限制的脚本。简单地说,Gitosis就是git的权限策略控制器。
因为Gitosis源码安装方式通过python方式,所以这里要检测是否安装了python的setup tool,没有即安装此工具, 这个也是为了gitosis做准备:
$ sudo apt-get install python-setuptools
去到一个临时目录
$ cd /tmp
$ git clone https://github.com/res0nat0r/gitosis.git // 下载Gitosis的源代码
$ cd /tmp/gitosis
$ sudo python setup.py install
7、windows下安装git bashhttps://git-scm.com/download/win
系统会自动选择要安装的版本
8、生成SSH KEY
在windows客户端,进入git bash,输入
$ssh-keygen -t rsa
此时会在~/.ssh/下生成两个密钥id_rsa,id_rsa.pub
id_rsa,私钥
id_rsa.pub 公钥,这个要保存Git server上,作为访问Git server的权限。
9、初始化管理员,启动gitosis
通过命令在客户端上将公钥远程传输到线上
$ scp ~/.ssh/id_rsa.pub git@server:/tmp
此时在Git server的/tmp目录下应该就能看到这个公钥了。
在Git server上操作如下:
/tmp$ sudo chmod a+r ./id_rsa.pub //先给这个公钥所有权限
启动Gitosis命令,完成如下图:
/tmp$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
注意:这个命令要在root用户下执行,不能在git用户下面,而且Python的版本要更新(前面的步骤已经更新过),否则会报错,此处坑大!
成功截图:
权限控制在gitosis.conf,公钥SSH Key文件放在/home/git/repositories/gitosis-admin.git/gitosis-export/keydir下,以后所有的客户端用户的公钥都放在这个文件下
另外,给/home/git/repositories/gitosis-admin.git/hooks/post-update权限,如下:
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
到此管理员初始化完成,Git Server配置完成
10、从git server上克隆版本
打开gitbash,
$ git clone git@192.168.10.49:gitosis-admin.git //在本地f盘下可以看到gitosis-admin文件目录
clone完成!
11、测试系统
在Git server上新建一个版本库如下:
$ su git
$ mkdir /home/git/repositories/hello.git
$ sudo chown -R git:git /home/git/repositories/hello.git
$ cd /home/git/repositories/hello.git
$ git --bare init //初始化
切换root用户操作
cat /home/git/repositories/gitosis-admin.git/gitosis.conf
新增访问版本hello的权限,编辑gitosis.conf文件,修改如下:
[gitosis]
[group gitosis-admin]
members = Administrator@CANDLE-PC
writable = gitosis-admin
[group developers]
members = Administrator@CANDLE-PC
writable = hello
初始化完成hello版本库。然后通过windows客户端msysGit进行clone,并提交文件如下:
git clone git@192.168.10.49:hello.git
完成版本clone。
测试提交文件,如下:
【第一次提交】
git add a.txt
git commit -a -m 'add a.txt' //第一次提交时,因为当前是一个空项目,commit后面跟一个参数-a,git commit -a 提交当前repos的所有的改变,否则会在git push origin master时报错
git push origin master
【第二次提交】commit不需要加参数-a
git add a.txt
git commit -m 'add a.txt'
git push origin master
12、gitosis管理员添加用户
$cp/tmp/id_rsa.john.pubkeydir/john.pub //把用户John的公钥加入到keydir中
$ vigitosis-admin/gitosis.conf //编辑新加入用户的权限
writable 表示有写的权限,给iphone_project这个项目添加写权限;scottjohnjosiejessica等用户拥有这个项目写的权限,中间以空格隔开