2012年6月18日 星期一

Gitolite 2.2 安裝筆記

特別注意 - 為什麼標題要特別註明是 Gitolite 2.2?因為文章已經寫好之後才發現作者已經大幅更新版本。新版有文件在此。本文是以 ubuntu 12.04 套件庫中的 gitolite 2.2 作為安裝目標。
Gitolite 是一個持續開發中的 git server 套件,本來還在糾結要玩 gitolite 或是 gitosis,決定兩個都嘗試看看後,發現本來打算先嘗試的 gitosis 很難找到來源,唯一找到的是原作者(吧)在 github 上的 repo,已經有 3 年沒更新了,於是決定直接嘗試 gitolite。搜尋了一下發現,原來 gitolite 是作者從 gitosis 的想法發展而來,本來是 gitosis + lite,但現在已經發展得比 gitosis 還強大了。而且從 gitolite 作者的 github repo 發現,上次更新是一週前,這表示它現在還是一個活躍且成長中的專案,當然就決定是他了! (但其實後來才發現上次更新的是第 3 版,第 2 版現在只會修 bug 而已)
我的安裝過程主要是參考 Tsung's Blog 的這篇文章而成,但不曉得原因為何,我這邊碰到的狀況跟作者不太一樣,我想也許是他使用的是 Debian (?) 或者他用 Ubuntu 但是版本跟我不同吧。我還另外參考了這篇文章,裡面寫的東西滿豐富的。同時這裡也附上作者提供的文件
我的操作環境是:
  • Ubuntu 12.04
  • Git version 1.7.9.5
  • Gitolite version: 2.2-1
本文章假設使用者已經具備 git 的基本知識與操作技能,不再贅述。另外如果是大部分其他系統的管理者,可能不習慣用 sudo,那麼就先切換到 root 再去執行動作即可。這邊為了保險起見,還是使用一般帳號進行設定。

操作步驟

  1. 安裝 gitolite 套件
    $ sudo apt-get install gitolite
    
    此時可能會同時需要你安裝 openssh-serverssh-import-id。另外在這個時候,除了 /usr/share/gitolite/usr/share/doc/gitolite 還有兩個 vim 用的 syntax 跟 indent 檔案以外,系統還沒被裝上任何東西,所以這時候 /etc 底下沒有設定檔,查詢 /etc/passwd 也沒有 gitolite 這個帳號...orz 總而言之,在這裡我們必須自力更生!
    • 這邊如果不是用 Debian/Ubuntu,或是想要取得最新版本,或是有其他考量的話,可以直接從作者的 repo 抓:
      $ git clone https://github.com/sitaramc/gitolite.git
      $ cd gitolite
      $ git checkout g2
      $ sudo cp -r src /opt/gitolite && sudo ln -s /opt/gitolite /usr/share/gitolite
      
      由於作者已經更新他的 master 為 g3 版本,所以我們必須抓出 g2 branch 再行複製。
  2. 建立 git 專用帳號 (我使用 git 而非 gitolite)
    $ sudo adduser --system git --shell "/bin/bash"
    
    必須給予 git 帳號一個可以執行 command 的 shell,但可放心所有 gitolite user 都會被導向到 gl-auth-command 這個 gitolite 提供的指令去,無法真的登入。
  3. 將 gitolite 安裝至系統目錄
    $ sudo gl-system-install
    
    其中已包含預設路徑,若要修改預設路徑可加上 -h 參數獲得相關資訊。若以一般使用者權限進行安裝,則會將程式路徑設定在使用者家目錄下。
  4. 產生管理者的 ssh key (此 key 將專門提供給 gitolite 管理者使用)
    $ ssh-keygen -t rsa -f <key_filename>
    
    舉例:
    $ ssh-keygen -t rsa -f ~/admin
    
    會產生 ~/admin~/admin.pub 兩個檔案,分別是 private key 與 public key。
    建議不輸入 passphrase,這樣每次 push/pull 的時候才不需要輸入 passphrase。但如果相當注重安全性的話當然還是可以輸入的。(當然也可以配合 ssh-add 來避免每次都要打 passphrase)
  5. 設置 gitolite (須使用 git 帳號)
    $ /usr/share/gitolite/gl-setup /PATH/TO/admin.pub
    The default settings in the rc file (/home/git/.gitolite.rc) are fine for most
    people but if you wish to make any changes, you can do so now.
    
    
    hit enter...
    creating gitolite-admin...
    Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
    creating testing...
    Initialized empty Git repository in /home/git/repositories/testing.git/
    [master (root-commit) 104e5b2] start
     2 files changed, 6 insertions(+)
     create mode 100644 conf/gitolite.conf
     create mode 100644 keydir/admin.pub
    
    這表示 admin.pub 這把公鑰所對應的私鑰擁有者就是 gitolite 的管理者,同時管理者的帳號即為 admin。 另外,如果 ~/.ssh 底下的 authorized_keys 已經有相同的 public key 的話,會出現 FATAL error:「admin.pub maps to shell access, not admin.」由於 gitolite 透過使用的 key 來決定使用者是不是管理者,故不可以使用本來已可連線取得 shell 的 key。
安裝完畢!關於管理跟使用的部分將另外撰寫。

沒有留言:

張貼留言