Gitlab v4.2をUbuntuにインストールする

以前書いた通りGitlabは、v5.0からGitoliteに依存しなくなりGitlab Shellを使用するようになった。

だけど今まで運用してきたGitoliteを残しつつその上にGitlabを構築したほうがいいかなと思ってあえて4.2をインストールすることにしたのだけど、
結果としてかなり気持ち悪い状態に陥ってしまって、Gitoliteでの管理がかなりし辛くなった。

Gitoliteが構築済みの環境でのGitlab v4.2構築手順と面倒くさい部分について書く。


ちなみに、Gitlabのmasterブランチは既にv5系に移行しているので4.2のドキュメントは4-2-stableブランチにある。

Gitlab 4.2のドキュメント

Gitlab v4.2 インストール

基本的には上記に書いたインストールのドキュメント通りに進めていく。

必要なライブラリのインストール
$ sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev redis-server libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev

curl,git,postfixは既に入っているのでインストールせず、checkinstallは使ってるところ見当たらなかったので入れてない。特に問題はなかった様子
それとPython2系が必要だが既にインストールされていたPythonが2.7だったので問題なかった

必要なユーザの作成

gitユーザは既に作成されているのでgitlabユーザを作成する

# ユーザ作成
$ sudo adduser --disabled-login --gecos 'GitLab' gitlab

# gitグループに追加
$ sudo usermod -a -G git gitlab

# Generate the SSH key
$ sudo -u gitlab -H ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa

生成した公開鍵をGitoliteに追加しておきgitolite-adminリポジトリに対してRW+権限を与えておく。

Rubyインストール

Gitlabさえ動かせればいいのでシステムにインストールせずgitlabユーザにrbenvでインストールする。

Rbenvに関しては前に書いた通りのやり方出できたので改めて書かない

Gitlab

GitoliteとDatabaseは既に動いているので飛ばしていよいよGitlab

# clone
$ sudo -u gitlab -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd /home/gitlab/gitlab
$ sudo -u gitlab -H git checkout 4-2-stable
$ sudo -u gitlab -H cp config/gitlab.yml.example config/gitlab.yml

gitlab.ymlを書き換える。gitlabセクションのhostとportを使用する物に書き換える。
ちなみにgitoliteセクションのssh_hostはGitlabのWebUI上でのssh cloneするホストの表示に使われる。

$ sudo -u gitlab -H vim config/gitlab.yml

権限

$ sudo chown -R gitlab log/
$ sudo chown -R gitlab tmp/
$ sudo chmod -R u+rwX  log/
$ sudo chmod -R u+rwX  tmp/
# Make directory for satellites
$ sudo -u gitlab -H mkdir /home/gitlab/gitlab-satellites
$ sudo -u gitlab -H cp config/unicorn.rb.example config/unicorn.rb


unicornのtimeoutの設定値が30になっているがこの状態だと502 Bad Gatewayが返って来るので170に変更する対応をする。
参考
http://tech.lexues.co.jp/archives/1073

$ sudo -u gitlab -H vim config/unicorn.rb

MySQLを使っているので下記実行

$ sudo -u gitlab cp config/database.yml.mysql config/database.yml

Gemインストール。rbenvでインストールしたRubyGemに対してインストールするのでgitlabユーザで実行してsudoはいらない。

$ gem install charlock_holmes --version '0.6.9'
$ bundle install --deployment --without development test postgres

Gitconfig

$ sudo -u gitlab -H git config --global user.name "GitLab"
$ sudo -u gitlab -H git config --global user.email "gitlab@localhost"

Setup GitLab Hooks

$ sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
$ sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

setup
ちなみにredisが起動してないと繋げなくて落ちる

$ sudo -u gitlab -H bundle exec rake gitlab:setup RAILS_ENV=production

起動スクリプト

$ sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab
$ sudo chmod +x /etc/init.d/gitlab

Nginx

インストール済みなので設定ファイルの配置をする。

$ sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/nginx/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

gitlab.ymlで設定したポートをlistenする。

$ sudo vim /etc/nginx/sites-enabled/gitlab

これで設定したポートを指定するとGitlabが動いているはず。
f:id:arcright:20130411162041p:plain

TODOや補足など

下記コマンドを実行するとGitlabの環境設定がちゃんとできているかどうかチェックしてくれる

$ bundle exec rake gitlab:check RAILS_ENV=production

それでgitolite.rc周りでいくつかNGがでている

Allow all Git config keys in .gitolite.rc ... no
Try fixing it:
Open /home/git/.gitolite.rc
Find the "\$GL_GITCONFIG_KEYS" option
Change its value to ".*"
For more information see:
doc/install/installation.md in section "Gitolite"
Please fix the error above and rerun the checks.

下記のように変更

GIT_CONFIG_KEYS             =>  '.*',

Merge Request(GithubでいうPull Request)する際にWebUI上でマージをする為に下記を実行する。
なお、上記に書いているGIT_CONFIG_KEYSの変更を済ませてから行う事。じゃないと失敗する

$ bundle exec rake gitlab:enable_automerge RAILS_ENV=production


TODO:GitリポジトリのUMASKの設定

Repo umask is 0007 in .gitolite.rc? ... no
Try fixing it:
Open /home/git/.gitolite.rc
Find the "\$REPO_UMASK" option
Change its value to "0007"
For more information see:
doc/install/installation.md in section "Gitolite"
Please fix the error above and rerun the checks.
|

UMASKをデフォルトの状態(0077)で動かしていてGitlab上で作ったリポジトリはオーナーがgitlabになるのだけどgitoliteで使っているgitユーザでは権限がないからgitolite-adminを操作する時に怒られた。
UMASKを変更したんだけど解決してない。なんだろう

気持ち悪い事

  • Gitoliteで管理しているリポジトリをGitlab上で管理するにはルートディレクトリに同名プロジェクトを作る
    • このやり方が正しいのかどうかがわからない
  • Gitlab上で操作するとGitlabがGitoliteに対して操作を行うのでGitoliteのコミットログがすごい事になる。
  • GitlabのWebUI上で作成したアカウントに公開鍵を設定することができるがGitoliteで管理している公開鍵と同じ公開鍵を指定するとうまくいかなくなる。
    • Gitlabのアカウントに紐づく公開鍵は「アカウント名_乱数(?)」のような名前でGitoliteのkeydirに追加される
    • Gitoliteのconfファイルにもその内容が設定される
    • もし元々Gitoliteで管理していた公開鍵「arcright.pub」と「arcright_example_com_1234567890.pub」が同じ公開鍵を指定している場合どっちの公開鍵を選択するかはGitoliteのアルゴリズム次第。
    • たとえばRW+ arcright_example_com_1234567890と設定されているがGitoliteがarcright.pubを先に見つけてしまった場合権限がないと怒られる
    • GitlabとGitoliteを共存させるにはGitlabで公開鍵の管理を行わないかGitlabでのみ管理を行うかのどちらかになりそう

正直かなり面倒なのでGitolite依存をやめたくなるのもわかるしもう素直にv5系を動かしたほうがいいと思いました。