Cent OS 6.5上で GitLab 6.9.2を動かす

バージョン管理システムにGitを使い始めて早1年強。研究室にGitHub風なGitのフロントエンドが欲しいなと思っているところに以下の記事を見かけたのでインストールしてみる。

環境

  • Cent OS 6.5

GitLabのインストール

GitLab Omnibus project: README.mdのインストール手順は以下のとおり。

sudo yum install openssh-server
sudo yum install postfix # sendmail or exim is also OK
sudo rpm -i gitlab-x.y.z_omnibus-x.el6.x86_64.rpm # this is the .rpm you downloaded
sudo gitlab-ctl reconfigure
sudo lokkit -s http -s ssh # open up the firewall for HTTP and SSH requests

当該パッケージがインストール済みかどうかは以下のコマンドで探す。

% yum list installed | grep パッケージ名

GitLab:DownloadからCent OS用のパッケージをダウンロードする。

% wget https://downloads-packages.s3.amazonaws.com/centos-6.5/gitlab-6.9.2_omnibus-1.el6.x86_64.rpm

インストールする。

% sudo rpm -i gitlab-6.9.2_omnibus-1.el6.x86_64.rpm
% sudo gitlab-ctl reconfigure
% sudo lokkit -s http -s ssh

Chefすげぇー。」と眺めているうちにインストール&設定終了。http://FQDN/にアクセスしたらGitLab動いている。

GitLab関連のデーモンの起動状況の確認。

 sudo gitlab-ctl status
run: nginx: (pid 22377) 234s; run: log: (pid 22376) 234s
run: postgresql: (pid 22221) 267s; run: log: (pid 22220) 267s
run: redis: (pid 22123) 273s; run: log: (pid 22122) 273s
run: sidekiq: (pid 22332) 240s; run: log: (pid 22331) 240s
run: unicorn: (pid 22303) 246s; run: log: (pid 22302) 246s
  • nginx: httpサーバ
  • postgresql: データベース管理システム
  • redis: Key-value ストア
  • sidekiq: Railsで非同期処理をする仕組み
  • unicorn: Railsを動かすためのフロントエンド

デフォルトのアカウントでGitLabにブラウザ越しにログインする。すると、パスワードの変更が求められるのでパスワードを変更する。

  • ID: root
  • パスワード: 5iveL!fe

インストール後の設定

設定ファイルは /etc/gitlab/gitlab.rb。作成する。

% cd /etc/gitlab
% sudo touch gitlab.rb
% sudo chmod 600 gitlab.rb

gitlab.rbを編集した後は、設定を反映させる。

% sudo gitlab-ctl reconfigure

アルパカDiary:続・GitHubクローンのGitLabを5分でインストールしたに従い設定ファイルを編集する。


注意:SELinuxの設定が原因で公開鍵認証ができない件

GitLabでGitリポジトリからデータをやりとりする場合は、ユーザごとに公開鍵を登録する必要がある。登録した公開鍵は /var/opt/gitlab/.ssh/authorized_keys に格納され、公開鍵認証ができるはずなのだが、CentOS 6.5の場合、SELinuxの設定が原因で、公開鍵認証できない。具体的には/var/opt/gitlab/.ssh/がSSHの公開鍵置き場として認められていない。

SSHの公開鍵置き場として認めらている場合、ls -laZで見える属性にssh_home_tという属性が表示される。たとえば、/home/john/.sshを調べると以下のような結果となる。

% ls -laZ /home/john/.ssh
drwx------. john john unconfined_u:object_r:ssh_home_t:s0 .
drwx------. john john unconfined_u:object_r:user_home_dir_t:s0 ..
-rw-------. john john unconfined_u:object_r:ssh_home_t:s0 authorized_keys

しかし、/var/opt/gitlab/.ssh/はこうなる。

% ls -laZ /var/opt/gitlab/.ssh
drwx------. git  git  unconfined_u:object_r:ssh_home_t:s0 .
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0   ..
-rw-r--r--. git  git  unconfined_u:object_r:var_t:s0   authorized_keys

そこで、/var/opt/gitlab/.ssh/authorized_keysにssh_home_tを付与する。SELinux で restorecon してあうあう。によるとsemanageコマンドで恒久的にタイプを付与することができるとのこと。でも、私の環境にはsemanageコマンドがない。

SELinux semanageの導入にしたがってなんのパッケージに含まれているのか調べる。

% yum provides *bin/semanage
〜中略〜
policycoreutils-python-2.0.83-19.39.el6.x86_64 : SELinux policy core python
                                               : utilities
Repo        : base
Matched from:
Filename    : /usr/sbin/semanage

policycoreutils-python-2.0.83-19.39.el6.x86_64をインストールする。

% sudo yum install policycoreutils-python-2.0.83-19.39.el6.x86_64

付与する。

% sudo semanage fcontext -a -t ssh_home_t "/var/opt/gitlab/.ssh"
% sudo semanage fcontext -a -t ssh_home_t "/var/opt/gitlab/.ssh/authorized_keys"
% sudo restorecon -R -v /var/opt/gitlab/.ssh restorecon reset /var/opt/gitlab/.ssh context system_u:object_r:var_t:s0->system_u:object_r:ssh_home_t:s0
restorecon reset /var/opt/gitlab/.ssh/authorized_keys context system_u:object_r:var_t:s0->system_u:object_r:ssh_home_t:s0
% ls -laZ /var/opt/gitlab/.ssh
drwx------. git  git  system_u:object_r:ssh_home_t:s0  .
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0   ..
-rw-r--r--. git  git  system_u:object_r:ssh_home_t:s0  authorized_keys

以上で無事成功。

サブディレクトリで動くように設定を変更(未処理)

デフォルトはルートパスで動くので http://FQDN/gitlab というようにサブディレクトリで動かしたい。やり方は以下のようにみつかった。

でも、 omnibus-gitlab の場合、gitlab-ctl reconfigureの度に設定ファイルが/etc/gitlab/gitlab.rbに基づき変更されるので、上の方法だとうまくいかなそう。