akishin999の日記

調べた事などを書いて行きます。

CentOS 6.2 に gitolite v3.03、GitLab v2.6.2 をインストールする

前回 試した時から結構バージョンが上がったようなので、gitolite 3.03 & GitLab 2.6.2 をインストールしてみました。

2013.08.16 追記
新しいバージョンについて記事を書いています。
こちらも参照してください。
GitLab 5.4.0 を CentOS 6.4 にインストールする

環境

使用した各ソフトウェアのバージョンは以下になります。

CentOS 6.2(x86_64)、Minimal
Git 1.7.1
Ruby ruby 1.9.3p194
gitolite 3.03
GitLab 2.6.2

事前準備

Ruby 1.9 系のインストールに関してはここでは完了しているものとして解説を省きます。

開発パッケージをインストールします。

# yum groupinstall -y "Development Tools"

これで git もインストールされます。

また、CentOS 6.2 を Minimal でインストールすると wget も入っていないので、その場合はインストールしておきます。

# yum install -y wget

私の環境では SELinux が有効になっている場合、 GitLab からの公開鍵の追加に失敗してしまいました。
そのため、ここでは SELinux を無効にしています。

# setenforce 0

実際に運用する場合は再起動しても無効になったままになるよう、/etc/sysconfig/selinux を編集する必要があります。

ここまでで事前準備は完了です。

ユーザの作成と公開鍵の準備

gitolite 管理用ユーザ git と gitlab 実行用ユーザ gitlabhq ユーザを作成します。
また、gitlabhq ユーザは git グループにも所属させておきます。

# useradd git
# useradd -G git gitlabhq

グループに所属するユーザからリポジトリを参照できるように、/home/git にグループに対するパーミッションを設定します。

# chmod g+rx /home/git

gitolite へ登録するための管理ユーザ用公開鍵を作成するため gitlabhq ユーザになり、gitolite 管理用の公開鍵を作成します。

# su - gitlabhq
$ ssh-keygen -t rsa -P "" -f ~/.ssh/gitadmin

また、 ssh-keyscan コマンドを実行し、localhost を ~/.ssh/known_hosts に追加しておきます。

$ ssh-keyscan localhost >> ~/.ssh/known_hosts

root ユーザに戻り、先ほど作成した公開鍵を git ユーザのホームディレクトリに移動させておきます。

$ exit     # root に戻ります
# mv /home/gitlabhq/.ssh/gitadmin.pub /home/git

gitolite のインストール

git ユーザになり、gitolite を github から ダウンロードします。

# su - git
$ wget --content-disposition https://github.com/sitaramc/gitolite/tarball/v3.03

ダウンロードが完了したら、展開して $HOME/bin にインストールします。

$ tar xzf sitaramc-gitolite-v3.03-0-g75387fd.tar.gz
$ mkdir $HOME/bin
$ sitaramc-gitolite-b8bd7f5/install -ln

install -ln の実行時、下記のようなエラーメッセージが表示されました。

fatal: Not a git repository (or any of the parent directories): .git

このメッセージは install スクリプト内の 64 行目付近の以下の行によって出力されているようです。

 my $version = `git describe --tags --long --dirty=-dt`;

どうやら install スクリプトが git clone してきた gitolite を前提として書かれているようです。
メッセージは出るものの、$HOME/bin 以下へのシンボリックリンクはちゃんと作成してくれているようなので、ここでは無視して進めることにします。

設定ファイル /home/git/.gitolite.rc を作成して UMASK を変更しておきます。

$ sh -c "PATH=$HOME/bin:$PATH; gitolite print-default-rc >> ~/.gitolite.rc"
$ sed -i 's/0077/0007/g' ~/.gitolite.rc

先ほど作成した公開鍵を引数に gitolite setup を実行します。

$ sh -c "PATH=$HOME/bin:$PATH; gitolite setup -pk /home/git/gitadmin.pub"
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one

gitlabhq ユーザでの SSH 設定

gitlabhq ユーザになり、~/.ssh/config を以下のように作成します。

$ exit     # gitlabhq ユーザに su するため root に戻る
# su - gitlabhq
$ cat > ~/.ssh/config <<'_EOF_'
Host localhost
  HostName localhost
    User git
    IdentityFile ~/.ssh/gitadmin
_EOF_

作成したら権限を変更しておきます。

$ chmod 0600 ~/.ssh/config

また、gitlabhq ユーザでの git の初期設定を行っておきます。
メールアドレスなどは環境に合わせ適宜変更してください。

$ git config --global user.email "[email protected]"
$ git config --global user.name "gitadmin"

GitLab のインストール

root ユーザになり、EPEL リポジトリを追加します。

$ exit     # root に戻ります
# rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm

必要なライブラリをインストールします。

# yum install -y python-devel python-pip redis libicu-devel mysql-devel sqlite-devel
# pip-python install pygments
# gem install bundler --no-rdoc --no-ri

インストールが完了したら Redis を起動しておきます。

# service redis start

gitlabhq ユーザになり、v2.6.2 の tarball を取得し展開します。

# su - gitlabhq
$ wget --content-disposition https://github.com/gitlabhq/gitlabhq/tarball/v2.6.2
$ tar xzf gitlabhq-gitlabhq-v2.6.2-0-g39fecb5.tar.gz
$ ln -s gitlabhq-gitlabhq-98c9231 gitlabhq

GitLab をセットアップしていきます。
bundle install は --deployment オプション付きで実行することに注意して下さい。

$ cd $HOME/gitlabhq
$ bundle install --deployment --without development test

設定ファイルの雛形をコピーします。

$ cp config/gitlab.yml.example config/gitlab.yml

環境に合わせてサーバ設定を変更します。

$ vi config/gitlab.yml

ここでは host をサーバの IPアドレスに変更しました。

 # Gitlab application config file
 
 # Email used for notification
 # about new issues, comments
 email:
   from: [email protected]
   host: gitlabhq.com
 
 # Git Hosting congiguration
 git_host:
   system: gitolite
   admin_uri: git@localhost:gitolite-admin
   base_path: /home/git/repositories/
   host: 192.0.2.0
   git_user: git
   # port: 22
 
 # Git settings
 # Use default values unless you understand it
 git:
   # Max size of git object like commit, in bytes
   # This value can be increased if you have a very large commits
   git_max_size: 5242880 # 5.megabytes
   # Git timeout to read commit, in seconds
   git_timeout: 10

次に DB 設定を変更します。
ここではテストなので sqlite を使います。

$ cp config/database.yml.sqlite config/database.yml

ファイル内容は変更しなくても問題ありませんが、もし必要があれば環境に合わせて変更してください。

設定ファイルの準備が出来たら、以下を実行して初期データを投入します。
gitlab:app:setup タスクが失敗するのを防ぐため、tmp ディレクトリを作成してから実行しています。

$ mkdir tmp
$ bundle exec rake gitlab:app:setup RAILS_ENV=production

実行後にデフォルトの管理者アカウント情報が表示されるのでメモしておきます。

ここまでの設定に問題がないか、以下を実行して確認します。

$ bundle exec rake gitlab:app:status RAILS_ENV=production

この rake タスクで GitLab が環境設定のチェックを行ってくれるのですが、何故か UMASK の部分のみ、実際には変更しているにも関わらず常に NG となってしまいました。

UMASK for .gitolite.rc is 0007? ............NO

どうも GitLab の「lib/tasks/gitlab/status.rake」内の 52行目付近、.gitolite.rc 内の UMASK 指定行を grep している箇所の正規表現が古いことが原因のようです。~
以下のように「lib/tasks/gitlab/status.rake」を修正するとちゃんと変更をチェックしてくれるようになります。

 unless open("#{GIT_HOST['base_path']}/../.gitolite.rc").grep(/UMASK\s*=>\s*0007/).empty?

環境チェックまで問題なく完了したら、サーバを起動します。

$ bundle exec rails s -e production

サーバが起動したらブラウザからアクセスし、リポジトリの作成や clone、push などを試してみて下さい。
問題なく動作していれば GitLab の構築は完了です。


※ 先ほども書きましたが、もしブラウザ上から公開鍵を登録しても追加されない方は、サーバの SELinux を無効にしてみてください。
私の環境では SELinux が有効だと鍵が追加されず、確認のため gitolite sshkeys-lint してみると Permission denied になっている、という現象が発生しました。