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 "gitadmin@example.com" $ 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: notify@gitlabhq.com 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 になっている、という現象が発生しました。