在寫了《如何在Ubuntu Server 11.10上安裝Gitorious》這篇博文之後,很多兄弟反應這個安裝的過程過於複雜,能否找到一個在Ubuntu上安裝比較簡單的Git系統,得益於Google和百度,本人在網上找到了GitLab,正如其名字長度那樣,相對於Gitorious來說在Ubuntu上的安裝要簡單不少,故將其安裝過程記下即也可以滿足兄弟們的要求,也可以備查。

一、準備工作

根據GitLab的官方文件要求,安裝GitLab需要以下軟體:

  • ruby 1.9.2
  • sqlite
  • ubuntu/debian
  • pygments lib – sudo pip install pygments
  • gitolite

因此在安裝GitLab之前需要做一些準備工作。

1、設定安裝環境(安裝一些必要軟體)

  1. sudo apt-get update
  2. sudo apt-get dist-upgrade -y
  3. sudo apt-get install git-core openssh-server sendmail curl gcc libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev python-setuptools  

*安裝VMWare Tools(這是在虛擬機器環境下需要安裝的,如果不是的可忽略)

  1. sudo apt-get update -y 
  2. sudo apt-get dist-upgrade -y 
  3. sudo apt-get install dkms build-essential gcc linux-headers-$(uname -r) -y 
  4. sudo mkdir -p /media/cdrom 
  5. sudo mount /dev/cdrom /media/cdrom 
  6. cp /media/cdrom/VM* /tmp 
  7. sudo umount /media/cdrom 
  8. cd /tmp 
  9. tar -xzvf VMware*.gz 
  10. cd vmware-tools-distrib/ 
  11. sudo ./vmware-install.pl -d 
  12. sudo apt-get autoremove -y 
  13. sudo shutdown -r now 

上面關於虛擬機器的部分是摘抄官網的,因為沒環境測試,所以也只是原樣照搬了。:)

2、設定專門的帳號

接下來我們需要建立一個專門的gitlabhq使用者帳號來執行程式,這個帳戶需要設定密碼,因為需要將它加入到admin組來執行sudo:

  1. sudo useradd -s /bin/bash -m -G admin gitlabhq 
  2. sudo passwd gitlabhq 

現在使用gitlabhq使用者帳號登入機器:

  1. ssh gitlabhq@localhost 

3、配置git全域性變數並生成SSH金鑰

  1. git config --global user.email "admin@local.host" 
  2. git config --global user.name "GitLabHQ Admin User" 

由於gitlabhq使用者稍後要使用SSH金鑰訪問稍後建立git使用者帳號,執行git命令,所以需要生成gitlabhq使用者的SSH金鑰:

  1. ssh-keygen -t rsa 

注意:在出現提示詢問檔案儲存位置時直接回車,在要求輸入和確認passphrase時也按回車。

4、安裝Ruby 1.9.2、RubyGem和Rails

Ubuntu 11.10中的Ruby包,其版本是1.8的,所以需要安裝包ruby1.9.2。由於在Ubuntu 11.10中的Ruby1.9.1包中ruby版本實際上是Ruby1.9.2,之所以包名為Ruby1.9.1是因為該版本為1.9.1的“庫相容版本”,所以可以直接安裝包Ruby1.9.1即可,然後更新rubygem並安裝rails。

  1. sudo apt-get install ruby1.9.1-full
  2. sudo update-alternatives --config ruby
  3. sudo update-alternatives --config gem
  4. sudo gem install rails

注意兩點:1)、02-03行命令是在安裝了其他ruby版本包時使用;2)、如果在安裝rails時出現“RubyGems will revert to legacy indexes degrading performance.”之類的錯誤時,修改~/.gemrc檔案後重試(有時要試多次才進行安裝,一般來說都會3-6次之間,下面的bundle命令也是如此,不知道是不是偉大的牆在起作用,看你的運氣了!):

  1. vi ~/.gemrc 
  2. ---  
  3. :backtrace: false 
  4. :benchmark: false 
  5. :bulk_threshold: 1000 
  6. :sources:  
  7. - http://gems.rubyforge.org/ 
  8. - http://gems.github.com/ 
  9. - http://gems.rubyonrails.org/ 
  10. :update_sources: true 
  11. :verbose: true 

5、安裝和設定Gitolite

Gitolite 是一款 Perl 語言開發的 Git 服務管理工具,通過公鑰對使用者進行認證,並能夠通過配置檔案對寫操作進行基於分支和路徑的的精細授權,它是採用 SSH 協議並且使用 SSH 公鑰認證的。Gitolite開始於 2009年8月,其作者當時是受到了 Gitosis 的啟發,開發了這款功能更為強大和易於安裝的軟體。對於Gitolite的命名,作者原意是 Gitosis 和 lite 的組合,不過因為 Gitolite 的功能越來越強大,已經超越了 Gitosis,因此作者笑稱 Gitolite 可以看作是 Github-lite —— 輕量級的 Github。

安裝Gitolite也十分簡單,首先新增git使用者帳號並將其加入git組:

  1. sudo adduser  
  2.   --system  
  3.   --shell /bin/sh  
  4.   --gecos `git version control`  
  5.   --group  
  6.   --disabled-password  
  7.   --home /home/git  
  8.   git
  9. sudo usermod -a -G git `eval whoami`

然後將生成的gitlabhq使用者的公鑰拷到git使用者目錄中:

  1. sudo cp ~/.ssh/id_rsa.pub /home/git/rails.pub 

接下來以git使用者的名義將gitolite原始檔下載的git使用者家目錄中:

  1. sudo -u git -H git clone git://github.com/gitlabhq/gitolite ~git/gitolite 

再以git使用者的名義安裝gitolite

  1. sudo -u git -H /home/git/gitolite/src/gl-system-install 

在這裡該命令會提示關於目錄的警告資訊,不用理會。直接執行下列命令:

  1. sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup ~/rails.pub" 

在這裡將會出現vim文字編輯器的編輯介面,請將其中的REPO_UMASK=0077改為REPO_UMASK=0007,然後儲存退出(退出編輯狀態ESC,然後使用:x)。關於如何在vim中編輯這裡就不做說明了,我偷個懶,反正有谷歌和百度。:)

最後設定庫目錄的許可權:

  1. sudo chmod -R g+rwX ~git/repositories/ 
  2. sudo chown -R git:git ~git/repositories/ 

OK,設定完了之後,重新進入一次gitlabhq使用者,以使gitlabhq使用者生效:

  1. exit 
  2. ssh gitlabhq@localhost 

二、安裝和設定GitLab

1、安裝GitLab

  1. cd ~
  2. git clone git://github.com/gitlabhq/gitlabhq.git ~/gitlabhq
  3. cd gitlabhq
  4. sudo easy_install pygments 
  5. sudo gem install bundler
  6. sudo gem install linecache19 -- --with-ruby-include=/usr/include/ruby-1.9.1/ruby/
  7. bundle install --without development test

注意:linecache19的安裝是必須要指定with-ruby-include引數的,否則將會在後面的bundle install中出錯!

2、設定資料庫

  1. bundle exec rake db:setup RAILS_ENV=production
  2. bundle exec rake db:seed_fu RAILS_ENV=production

注意:執行01行的rake db:setup語句時,如果出現“unititialized constant Rake::DSL”,則需要在GitLab根目錄中的Rakefile檔案中新增以下語句(參見http://stackoverflow.com /questions/6268518/uninitialized-constant-rakedsl-in-ruby-gem)來解決,如未出現上述出錯資訊,可忽略:

  1. require `rake/dsl_definition` 
  2. require `rake` 

3、配置GitLab

編輯GitLab的配置程式:

  1. vi ~gitlabhq/gitlabhq/config/gitlab.yml 

將下列內容

  1. git_host: 
  2.   system: gitolite 
  3.   admin_uri: git@localhost:gitolite-admin 
  4.   base_path: /home/git/repositories/ 
  5.   host: gitlab 
  6.   git_user: git 
  7.   # port: 22 

修改為:

  1. git_host: 
  2.   system: gitolite 
  3.   admin_uri: git@localhost:gitolite-admin 
  4.   base_path: /home/git/repositories/ 
  5.   host: gitlabhq.your.domain 
  6.   git_user: git 
  7.   # port: 22 

其中03和05行中的gitlabhq.your.domain是伺服器的域名。

啟動服務

  1. cd ~gitlabhq/gitlabhq
  2. bundle exec rails s -e production 

三、測試服務

如果一切OK的話,就可以在瀏覽器上輸入:http://server.ip:3000/ 來測試該服務了,使用以下資訊登入:

  1. Email:    admin@local.host 
  2. Password: 5iveL!fe 

接下來您可以在admin中建立一個新的使用者,注意該使用者在建立時要花費一段時間,請耐心等待。在該使用者生成成功後,您需要按照前面的方法在客戶機上生成該使用者的金鑰(Windows下可以使用Git for Windows中的Git Bash來代替):

  1. ssh-keygen -t rsa -C "your_email@youremail.com" 

然後用新使用者登入,點選GitLab中My profile>Keys>Add new按鈕,將生成的SSH公鑰貼到彈出對話方塊的Key中,Title可隨便填,我一般是使用使用者_機器名這種格式,然後點選Save按鈕。

在儲存使用者公鑰之後,就可測試是否可以通過公鑰來訪問伺服器上的git使用者,執行git命令:

  1. ssh -T git@gitlabhq.your.domain 

其中,gitlabhq.your.domain是伺服器的域名。如果出現”Agent admitted failure to sign using the key”錯誤,並提示輸入git使用者密碼,那麼請在客戶機上使用以下命令將使用者私鑰加進來 (根據個人的密匙命名不同更改 id_rsa):

  1. ssh-add   ~/.ssh/id_rsa
  2. ssh -T git@gitlabhq.your.domain
  3.  hello your_email_youremail_com_1324608633, this is gitolite v2.2-11-g8c4d1aa  running on git 1.7.5.4 the gitolite config gives you the following access: @R_ @W_ testing 

 再次訪問git,如出現類似02行資訊時,則表明設定成功。

四、安裝和配置 Nginx和Passenger

1、解除安裝Apache2

  1. sudo apt-get autoremove apache2* 
  2. sudo dpkg --purge apache2* 

2、安裝Nginx和Passenger模組

  1. sudo gem install passenger 
  2. sudo passenger-install-ngnix-module

注意:02行語句會檢查編譯Ngnix和Passenger模組所需要的工具,然後詢問你是否有Ngnix的原始碼,如果沒有的話,就選1,會自動下載,如果有的話,就選2,並告之原始碼所在位置。在這裡選擇1。

3、建立執行Nginx服務的使用者

  1. sudo adduser --system --no-create-home --disabled-login --disabled-password --group nginx 

4、將Nginx設定開機啟動指令碼

  1. wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh 
  2. sudo mv init-deb.sh /etc/init.d/nginx 
  3. sudo chmod +x /etc/init.d/nginx 
  4. sudo /usr/sbin/update-rc.d -f nginx defaults 

5、將Nginx設定為GitLab的伺服器

  1. sudo vi /opt/nginx/conf/nginx.conf 
  2.  
  3. user gitlabhq staff; 
  4. # --- 
  5. server {  
  6.   listen 80;  
  7.   server_name gitlabhq.your.domain;  
  8.   root /home/gitlabhq/gitlabhq/public;  
  9.   passenger_enabled on;  
  10. }  
  11. # ---  

 其中,07行的gitlab.yourdomain.com要改為你的域名。

6、啟動Nginx

  1. sudo /etc/init.d/nginx start 

五、測試服務

在瀏覽器中輸入http://gitlab.yourdomain.com/來測試GitLab能是否正常工作。如果一切正常的話,就可以打完收功了!