在 ubuntu 搭建基于 Gitolite 的 Git 服务器

在 ubuntu 搭建基于 Gitolite 的 Git 服务器

Sep 26, 2017

工作需要搭建一个支持 Repo 管理的私有 Android 源码镜像,因为 Repo 工具是基于 Git 服务器的,所以也实践了一下 Git 服务器的安装。

Git 服务器的选择

搭建 Git 服务器有多个选择,除了 Gitolite,还有 Gitosis,GerritGitlab 等等。

Gitolite 使用纯文本配置文件(plain text config file),这一点和 Gitosis 一样(如果我没理解错的话),网上也有不少基于文章介绍如何基于 Gitosis 建立 Android 源码镜像。不过,Gitosis 自 2015 年之后已经没再更新了,相当于遗弃了,所以不建议使用 Gitosis。

Gerrit 和 Gitlab 使用数据库保存数据,Gerrit 支持 Code Review,Google 管理 Android 源码正是使用 Gerrit。Gitlab 还有基于 Web 的 GUI,都很强大,也是不错的选择。

此外,流行的 Git 服务器还有 Gogs,同样提供可视化的 web GUI,曾作公司内部的 Git 服务器使用,体验不错。

搭建 Gitolite 的系统环境

官方文档 给出非常详细的指引。

这里准备了一台计算机作为服务器安装 gitolite ,一台计算机作为管理服务器的客户端。

  • 服务端 ubuntu 16.04 LTS, IP: 192.168.8.4
  • 客户端 MacOS Sierra,IP: 192.168.3.35

先在服务器上安装 gitperlopenssh,可以使用 root 用户进行操作:

apt-get install git perl openssh-server

创建 git 用户

安装完成后,创建用户 git,并建立家目录 /home/git :

useradd -md /home/git/ git

有关不少文章在创建用户 git 之后,会使用 passwd git 来设置该用户的密码。
个人不建议这样做,因为不设置密码的话,只有 root 才可以使用 su - git 登录 git,这样可以避免服务器上的其它用户登录 git 这个账户。

客户端传送公钥

在客户端计算机(192.168.3.35)生成公钥和私钥:

ssh-keygen

各种选择都按回车跳过,最后会在 ~/.ssh/ 目录生成 id_rsa 和 id_rsa.pub

将 id_rsa.pub 发送到服务端(192.168.8.4):

scp ~/.ssh/id_rsa.pub root@192.168.8.4:~/

id_rsa.pub 将在安装 gitolite 时使用,他可以将客户端计算机注册为 gitolite 的管理员。

服务端安装 gitolite

在服务端(192.168.8.4),把 id_rsa.pub 转移到 git 的 $HOME 目录

mv id_rsa.pub /home/git/

使用 su - git 登录 git。确认 ~/.ssh/authorized_keys 不存在或者内容是空的,否则把它删除。

下载 gitolite 到服务端:

git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

安装 gitolite 使用,并将客户端计算机作为 gitolite 的管理员:

gitolite setup -pk YourName.pub

这样就算安装完成了。

曾经在安装 gitolite 时遇到 FATAL: split conf set, gl-conf not present for.... 的错误,反复重试之前的步骤都没能解决。

后来怀疑应该是之前装了 gitosis,存在冲突。

最后使用 userdel -r git,删掉 git 账户,重新按上述步骤操作一遍才安装成功。

gitolite 的管理

gitolite 添加新的仓库和用户时,不能在服务器上直接操作。

所有 gitlote 的用户、仓库和访问规则,都由一个特殊的仓库 gitolite-admin 来管理,将这个仓库 clone 到你的客户端计算机(192.168.3.35),即生成 id_rsa.pub 的那部计算机:

git clone git@192.168.8.4:gitolite-admin

上述操作应该是直接将 gitolite-admin 下载到客户端计算机上的,如果出现请求输入密码的情况,那就说明安装过程出错了,需要重新安装。

cd gitolite-admin ,里面有两个子目录 “conf” 和 “keydir”。

添加新成员和新仓库

假设你要往 gitolite 服务器添加新成员 alice,bob, carol,操作流程如下:

首先,让三人各自在其计算机上使用ssh-keygen生成 id_rsa 和 id_rsa.pub(注意,一直使用回车就好,不要改名字),把各自的 id_rsa.pub 发送到客户端计算机(192.168.3.35) gitolite-admin/keydir 目录下,并重命名为 alice.pub,bob.pub,carol.pub 。

假设要添加新的仓库名为 “foo”,并给予上述三人不同权限,在 gitolite-admin/conf/gitolite.conf 添加下列代码:

repo foo
    RW+                     =   alice
    RW                      =   bob
    R                       =   carol

RW+ 表示 alice 有权限对 foo 做任何操作,包括创建、读写、删除、push、rewind 等。
RW 表示 bob 可以对 foo 有读写的权限。
R 表示 carol 可以对 foo 有只读权限,可以 clone/fetch。

SSH 和 Git Daemon

Gitolite 没有提供公开访问仓库的方法,所有的访问都必须通过 SSH ,也就是说,每个用户要 clone 或者修改托管在 Gitolite 上的仓库,都必须先在 gitolite-admin 仓库里存放上自己 SSH 公钥。

那如果真的有需要公开某个仓库的权限要怎么办,许多文章都提到了 git-daemon 。不过,我个人在 ubuntu 和 centos 上都尝试过 git-daemon 来公开仓库权限,但都没有成功。因为不是项目必须,所以也没有再深入研究。

Reference

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值