特別注意 - 為什麼標題要特別註明是 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 再去執行動作即可。這邊為了保險起見,還是使用一般帳號進行設定。
操作步驟
-
安裝
gitolite
套件$ sudo apt-get install gitolite
此時可能會同時需要你安裝
openssh-server
跟ssh-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 再行複製。
-
-
建立 git 專用帳號 (我使用
git
而非gitolite
)$ sudo adduser --system git --shell "/bin/bash"
必須給予 git 帳號一個可以執行 command 的 shell,但可放心所有 gitolite user 都會被導向到 gl-auth-command 這個 gitolite 提供的指令去,無法真的登入。
-
將 gitolite 安裝至系統目錄
$ sudo gl-system-install
其中已包含預設路徑,若要修改預設路徑可加上
-h
參數獲得相關資訊。若以一般使用者權限進行安裝,則會將程式路徑設定在使用者家目錄下。 -
產生管理者的 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) -
設置 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。
安裝完畢!關於管理跟使用的部分將另外撰寫。
Last modified on 2012-06-18