IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Gitolite 客户端发起安装模式被取消

    Jiang Xin (worldhello.net@gmail.com)发表于 2011-11-30 00:00:00
    love 0

    说明:正如 Gitolite 官网所言,虽然从客户端发起安装很酷,也曾经是唯一的安装方式, 但是管理员维护两套不同公钥让技术支持不堪重负,最终在 Gitolite 2.1 版本取消了这种由客户端发起安装的安装方式, 这也让书中近三页纸(P415-P417)报废。本篇博客对 Gitolite 的安装过程做了更新,将在《Git权威指南》第二版中替换原有内容。


    安装Gitolite(2.1版本)对服务器的要求是:

    • Git版本为1.6.6或以上。
    • Unix或类Unix(Linux, MacOS等)操作系统。
    • 服务器开启SSH服务。

    和其他Unix上软件包一样Gitolite既可通过操作系统本身提供的二进制发布包方式安装,也可通过克隆Gitolite源码库从源代码安装Gitolite。

    注意:老版本的Gitolite提供了一种从客户端发起安装的模式,但该安装模式需要管理员维护两套不同公钥/私钥对(一个公钥用于无口令登录服务器以安装和更新软件,另外一个公钥用于克隆和推送 gitolite-admin 版本库),稍嫌复杂,在2.1之后的Gitolite取消了这种安装模式。

    安装之前

    Gitolite搭建的Git服务器是以SSH公钥认证为基础的,无论是普通Git用户还是Gitolite的管理员都通过公钥认证访问Gitolite服务器。在Gitolite的安装过程中需要提供管理员公钥,以便在Gitolite安装完毕后管理员能够远程克隆 gitolite-admin 版本库(仅对管理员授权),对Gitolite服务器进行管理——添加新用户和为用户添加授权。

    为此在安装Gitolite之前,管理员需要在客户端(用于远程管理Gitolite服务器的客户端)创建用于连接Gitolite服务器的SSH公钥(如果尚不存在的话),并把公钥文件拷贝到服务器上。

    1. 在客户端创建SSH公钥/私钥对。

      如果管理员在客户端尚未创建公钥/私钥对,使用下面的命令会在用户主目录下创建名为 ~/.ssh/id_rsa 的SSH私钥和名为 ~/.ssh/id_rsa.pub 的公钥文件:

       $ ssh-keygen
      
    2. 将公钥文件从客户端复制到服务器端,以便安装Gitolite时备用。

      可以使用 ftp 或U盘拷贝等方式从客户端向服务器端传送文件,不过用 scp 命令是非常方便的,例如服务器地址为 server ,相应的拷贝命令为:

       $ scp ~/.ssh/id_rsa.pub server:/tmp/admin.pub
      

    以发布包形式安装

    常见的Linux发行版都包含了Gitolite软件包,安装Gitolite使用如下命令:

    • Debian/Ubuntu:

      $ sudo aptitude install gitolite
      
    • RedHat:

      $ sudo yum install gitolite
      

    安装完毕后会自动创建一个专用系统账号如 gitolite 。在Debian平台上创建的 gitolite 账号使用 /var/lib/gitolite 作为用户主目录,而非 /home/gitolite 。

    $ getent passwd gitolite
    gitolite:x:114:121:git repository hosting,,,:/var/lib/gitolite:/bin/bash
    

    安装完毕,运行如下命令完成对Gitolite的配置:

    1. 切换至新创建的 gitolite 用户账号。

      $ sudo su - gitolite
      
    2. 运行 gl-setup 命令,并以客户端复制过来的公钥文件路径作为参数。

      $ gl-setup /tmp/admin.pub
      

    Debian等平台会在安装过程中(或运行 sudo dpkg-reconfigure gitolite 命令时),开启配置界面要求用户输入Gitolite专用账号、Git版本库根目录、管理员公钥文件名,然后自动执行 gl-setup 完成设置。

    从源代码开始安装

    如果想在系统中部署多个Gitolite实例,希望部署最新的Gitolite版本,或者希望安装自己或他人对Gitolite的定制版本,就要采用从源代码进行Gitolite部署。

    1. 创建专用系统账号。

      • 首先需要在服务器上创建Gitolite专用帐号。因为所有用户都要通过此帐号访问Git版本库,为方便易记一般选择更为简练的 git 作为专用帐号名称。

           $ sudo adduser --system --group --shell /bin/bash git
        
      • 注意添加的用户要能够远程登录,若系统只允许特定用户组(如 ssh 用户组)的用户才可以通过 SSH 协议登录,就需要将新建的 git 用户添加到该特定的用户组中。执行下面的命令可以将 git 用户添加到 ssh 用户组。

           $ sudo adduser git ssh
        
      • 取消 git 用户的口令,以便只能通过公钥对 git 账号进行认证,增加系统安全性。

           $ sudo passwd --delete git
        
    2. 切换到专用账号。

      切换到新创建的专用账号,后续的安装都以该用户身份执行。

       $ sudo su - git
      
    3. 在服务器端下载 Gitolite 源码。

      一个更加“Git”的方式就是克隆Gitolite的版本库。

      • 克隆官方的Gitolite版本库如下:

           $ git clone git://github.com/sitaramc/gitolite.git
        
      • 也可以克隆定制后的Gitolite版本库,如我在GitHub上基于Gitolite官方版本库建立的分支版本:

           $ git clone git://github.com/ossxp-com/gitolite.git
        
    4. 安装Gitolite。

      • 若Gitolite安装到 ~/bin 目录下(即没有安装到系统目录下),需要设置 PATH 环境变量以便安装过程中调用 gl-setup 时能够正常运行。

           $ export PATH=~/bin:$PATH
        
      • 运行源码目录中的 src/gl-system-install 执行安装。

           $ cd gitolite
           $ src/gl-system-install
        
      • 如果像上面那样不带参数的执行安装程序,会将Gitolite相关命令安装到 ~/bin 目录中,相当于执行:

           $ src/gl-system-install $HOME/bin $HOME/share/gitolite/conf $HOME/share/gitolite/hooks
        
    5. 运行 gl-setup 完成设置。

      安装完毕运行 gl-setup 命令,并以客户端复制过来的公钥文件路径作为参数。

       $ gl-setup /tmp/admin.pub
      

    不带参数运行 gl-setup 命令会检查 Gitolite 维护的 Git 版本库是否正确设置了钩子脚本,以及正确设置了配置文件等。对于通过服务器端拷贝方式导入 Gitolite 中的 Git 版本库,只有经过此操作才能正确运行。



沪ICP备19023445号-2号
友情链接