[[どぶお/開発しよう!]]
 #floatcontents
 * GitLab 5.1.0をRVM環境でインストールする -- Vine 6.1 [#nc402373]
 * GitLab 5.1.0をRVM環境で構築する -- Vine 6.1 [#nc402373]
 #anno1(2013-05-14 : 作成)
 
 ** 概要 [#ad82a96c]
 ~以前からGitLab 2.1.0を使っていましたが、久しぶりに最新版にしようとしたらいつの間にか5.1.0まで進んでいました。HTTP(S)によるアクセスにも標準で対応しているので、これだけでSSHおよびHTTP(S)が使えるようになっているみたいです。
 ~公式サイトのインストールドキュメントによると、過去とは手順も全く違うようだったので、まっさらな状態からインストールしてみたので記録しておきます。2.1.0と比べるとgitoliteのインストールが不要になったり、Apacheと使う場合にpassengerを使わずにリバースプロキシを使うようになったなどの変更が見受けられました。手順はだいぶスッキリしましたが、相変わらず敷居は高いと思います。Linuxによるサーバ管理の基礎知識ぐらいは必要かもしれません。
 ~大まかな流れは以下のようになります。
 + 前提条件の準備
 ++ aptによる必要なプログラムのインストール
 ++ Vine 6で不足しているredisパッケージのインストール(作成)
 ++ Gitのバージョンアップ(1.7.12.4)
 + GitLabと依存プログラムのインストール
 ++ GitLab実行ユーザー(git)の作成
 ++ RVM環境の構築(Ruby 1.9.3のインストール)
 ++ GitLab Shellのインストール
 ++ データベースの作成(PostgreSQL)
 ++ GitLabのインストールとセットアップ
 ++ 初期化スクリプトの設定
 
 ~なお、使用環境はVine Linux 6.1で、RVM(Ruby Version Manager)環境を用いて構築します。設定が少し増えますがVirtualHostを使うことでGitLab 2.1との共存も可能です。
 
 ** 前提条件の準備 [#je6a1e1c]
 ビルドに必要なライブラリなどをインストールします。ほとんどはaptでインストール可能ですが、redis-serverおよびgitは別途インストールが必要です。
 
 *** aptによる必要なプログラムのインストール [#j515131b]
 自動解決されるためインストールする順番は特にありませんが、これらをすべてインストールします。
  # apt-get install build-essential zlib-devel libyaml-devel openssl-devel gdbm-devel \
  readline-devel ncurses-devel libffi-devel sqlite3-devel libxml2-devel libxslt-devel
  # apt-get install libicu-devel
  # apt-get install postgresql-server postgresql-devel
 libicu-develはRubyモジュールのcharlock_holmesのインストールに必要です。
 
 *** RedisおよびGitのインストール [#l6896e6e]
 ~セッション管理などに使用されるRedisサーバはVineの標準リポジトリに収録されていないので手動でインストールします。また、Vine6のGitは1.7.4ですが、GitLabに使うには古いので最新版である1.8.2.3にアップグレードします(1.7系の最新版である1.7.12.4でも動作しましたが、日常的なコマンドとして使用する際にgit clone https://〜で通信できなかったので、1.8のほうが良さそうです)。
 ~以下のページからダウンロードしてインストールします。
 - [[Vine6 RPMパッケージ/git 1.7.12.4-1vl6]] -- 1.8.2.3は近々アップ予定
 - [[Vine6 RPMパッケージ/redis 2.4.6-1vl6]]
 
  # apt-get install perl-Git-1.7.12.4-1vl6.x86_64.rpm git-1.7.12.4-1vl6.x86_64.rpm
  # apt-get install redis-2.4.6-1vl6.x86_64.rpm
 
 *** Pythonの別名シンボリックリンクをはる [#ka999d17]
 /usr/bin/pythonに対してpython2という名前のシンボリックリンクを作成します。これはファイル内容を表示する際に使用されるため、リンクしないとInternal server errorが出ます。
  # cd /usr/bin
  # ln -s python python2
 
 ** GitLabのインストール [#t7e42619]
 *** 実行ユーザーの作成 [#l727dac7]
 GitLabを実行するユーザーgitを作成します。ホームディレクトリは/home/gitにします。公式ドキュメントではnologin設定で作るように書いてありますが、初期設定を行いやすくするためログイン可能とします。
  # groupadd -g 600 git                         <-- GID:600で作成
  # useradd -m -g 600 -u 600 git                <-- UID:600で作成
  # passwd git                                  <-- シェルで作業するのでパスワードを設定しておく
  # su - git                                    <-- ユーザー'''git'''で作業
  % git config --global user.name "GitLab"
  % git config --global user.email "git@localhost"
 user.nameとuser.emailを設定しておかないとGitLabでの動作の時にエラーが発生します。~
 以降、インストールはユーザー'''git'''で行います。
 
 *** RVM環境の構築 [#m74fdfbd]
 ~GitLabはRuby 1.9.2以降が必要なので、異なるバージョンのRubyを使用するためのRVM環境を構築します。この環境で使用することでRubyのモジュール等をシステムにインストールすることなく、ホームディレクトリだけで完結させることができます。この作業はユーザー'''git'''で行います。
 ~cURLでファイルを取得する際に証明書のエラーが出るので、insecureを.curlrcに書き込んでから作業を行います。作業が終わったらinsecureを解除してください。なお、Ruby 1.9のインストールはビルドが行われるため10分ほど時間がかかります。
  $ cd /home/git
  $ echo insecure >> ~/.curlrc
  $ \curl -L https&#058;//get.rvm.io | bash -s stable
  $ rvm install 1.9          <-- 1.9系の最新が入る(2013年5月14日の時点では1.9.3p392)
  $ rvm use 1.9              <-- インストールした1.9系を選択
  $ gem install bundler
  $ gem install charlock_holmes --version '0.6.9.4'
 
 *** GitLab Shellのインストール [#m0713068]
 ~GitLab ShellはGitLab用のSSHアクセスおよびリポジトリ管理用プログラムだそうです。
  $ cd /home/git
  $ git clone https&#058;//github.com/gitlabhq/gitlab-shell.git
  $ cd gitlab-shell
  $ git checkout v1.3.0
  $ cp config.yml.example config.yml
 設定ファイルconfig.ymlをエディタで開いてgitlab_urlの値を修正します。
  # Url to gitlab instance. Used for api calls. Should be ends with slash.
  &color(red){''gitlab_url: "http&#058;//gitlab.example.co.jp/"     <-- 適切なURLにします''};
 修正後インストールします。
  $ ./bin/install
 この時、リポジトリ用の/home/git/repositoriesディレクトリが作成されます。
 
 *** データベースの作成 [#e023ce23]
 GitLabで使用するデータベースを作成します。ここではPostgreSQLを使いましたが、MySQLも使えます(公式ドキュメント参照)。
  # service postgresql start
  $ psql -U postgres
  psql> CREATE USER git WITH PASSWORD '$password';
  psql> CREATE DATABASE gitlabhq_production OWNER git;
  psql> \q
 ここの''$password''は使用するパスワードを指定してください。GitLab設定の際に必要になるので忘れないようにしてください。以下のコマンドで開けるかどうかを確認してください。抜けるときは''\q''です。
  $ psql -d gitlabhq_production
 
 *** GitLabのインストール [#c380f373]
 GitLabを取得し、必要な手順を行います。これもすべてユーザー'''git'''で行います。
  $ cd /home/git
  $ git clone https&#058;//github.com/gitlabhq/gitlabhq.git gitlab
  $ cd gitlab
  $ git checkout 5-1-stable      <-- 5.1.0をチェックアウトします
  $ cp config/gitlab.yml.example config/gitlab.yml
 config/gitlab.ymlの編集
  $ mkdir /home/git/gitlab-satellites
  $ mkdir tmp/pids
  $ mkdir tmp/sockets
  $ mkdir public/uploads
  $ cp config/puma.rb.example config/puma.rb
  $ cp config/database.yml.postgresql config/database.yml
  $ bundle install --deployment --without development test mysql
 :config/puma.rbの修正|
 Apacheで使うために、pumaのバインド先をlocalhostのTCPポートにします。
   61: bind 'tcp&#058;//127.0.0.1:9292'                                   <-- localのみ
   62: #bind "unix&#058;//#{application_path}/tmp/sockets/gitlab.socket"  <-- コメントアウト
 
 :config/database.ymlの修正|
 ユーザー名とパスワードを適切に指定します。
 
 *** GitLabのセットアップと初期化スクリプト [#h0147924]
 :GitLabのデータベースの初期化|
 この段階でRedisを起動します。
  # service redis start
  $ cd /home/git/gitlab
  $ bundle exec rake gitlab:setup RAILS_ENV=production
 
 :ユーザー'''git'''の設定|
 初期化スクリプトでのsudoおよびSSHでのpushに対応するために.bashrcにRVMの設定を書き込みます。インストール時に自動でPATHの設定は追加されますがsource設定が書き込まれないので末尾に追加します。
  PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting  <-- 自動で追加されている
  &color(red){[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"}; <-- 追加
 
 :初期化スクリプトの設定|
 初期化スクリプトをインストールします。この作業はrootで行います。
  # curl --output /etc/init.d/gitlab https&#058;//raw.github.com/gitlabhq/gitlabhq/master/lib/support/init.d/gitlab
  # chmod +x /etc/init.d/gitlab
 chkconfigで登録できるように/etc/init.d/gitlabの内容を修正します。
   3: # GITLAB
   4: # Maintainer: @randx
   5: # App Version: 5.1
   6: &color(red){# chkconfig: 2345 21 80};                         <-- 追加
   7: &color(red){# description: GitLab git repository management}; <-- 追加
 chkconfigに登録します。
  # chkconfig --add gitlab
 
 *** Apacheの設定 [#a7f001f4]
 Apacheの詳細な設定については述べません。最低限の設定は以下になります。
 :/etc/apache2/conf.d/gitlab.conf|
  ProxyPass / http&#058;//127.0.0.1:9292/
  ProxyPassReverse / http&#058;//127.0.0.1:9292/
  ProxyPreserveHost On
 このように設定すればhttp&#058;//gitlab.example.co.jp/という感じでGitLabにアクセスできるはずです。~
 なお、HTTPSを使う場合は、VirtualHostの中に以下の行を追加します。
  RequestHeader set X-Forwarded-Proto "https"
 このパラメータがないとページ遷移の際にHTTPに飛ばされてしまうことがあります。
 
 *** chkconfigの設定 [#tefe607a]
 必要に応じて設定します。
  # chkconfig postgresql on
  # chkconfig redis on
  # chkconfig gitlab on
  # chkconfig apache2 on
 
 お疲れ様でした。これで(たぶん)使えるはずです!~
 問題はRVM周りで起こりやすいので、エラーが発生した場合はRVMの内容を調べてみてください。
 
 * トラブルシューティング [#p19f53a8]
 とりあえず気づいたことをメモしておきます。
 ** SSHでpushできない [#m4fddc2b]
 :問題|
 SSH経由でpushするときに以下のエラーが出ました。
  [dobuo@localhost exam]$ git push git&#064;192.168.0.201:dobuo/exam.git
  Enter passphrase for key '/home/dobuo/.ssh/id_rsa':
  &color(red){/home/git/gitlab-shell/bin/gitlab-shell:8: undefined method `require_relative' for main:Object (NoMethodError)};
  &color(red){fatal: Could not read from remote repository.};
  
  Please make sure you have the correct access rights
  and the repository exists.
 
 :原因|
 これはRubyのバージョンが1.9.2以上になっていないことが原因で、RVMを使って構築した時に起こるようです。私の環境では標準のRuby(aptでインストールされるRuby)は1.8のためエラーが出るようです。なお、標準のRubyをインストールしていない場合はうまくいくため、パスの順序を変えれば解決できるようです。
 
 :解法|
 [[ユーザー'''git'''の設定>#h0147924]]のように修正します。別の方法としてPATHの設定を以下のようにしても解決しました。
  PATH=$HOME/.rvm/bin:$PATH    <-- 標準パスよりも$HOME/.rvm/binを先にする
 状況に合わせて対応してください。
 
 ** ファイル内容が表示されない [#z4579e40]
 :問題|
 ファイル内容を表示させた時何も表示されない。production.logを見ると以下のメッセージが出力されている。
  Started GET "/dobuo/chocolat-wiki/blob/master/code/myrpc.js?_=1368612329078" for 192.168.155.109 at 2013-05-15 19:05:32 +0900
  &color(red){''Processing by BlobController#show as JS   <-- この行がポイント''};
    Parameters: {"_"=>"1368612329078", "project_id"=>"dobuo/myrpc", "id"=>"master/code/myrpc.js"}
    Rendered blob/_actions.html.haml (36.1ms)
    Rendered blob/_text.html.haml (292.4ms)
    Rendered blob/_blob.html.haml (339.9ms)
    Rendered blob/show.js.haml (343.3ms)
  Completed 500 Internal Server Error in 488ms
  
  ActionView&#058;&#058;Template&#058;&#058;Error (EPIPE):
      9:   .file_content.code
      10:     - unless blob.empty?
      11:       %div{class: user_color_scheme_class}
      12:         = raw blob.colorize(formatter: :gitlab)
      13:     - else
      14:       %p.nothing_here_message Empty file
    app/views/blob/_text.html.haml:12:in `_app_views_blob__text_html_haml___691087839_78158170'
    app/views/blob/_blob.html.haml:23:in `_app_views_blob__blob_html_haml___344748651_79771910'
    app/views/blob/show.js.haml:3:in `_app_views_blob_show_js_haml__1016274567_81034620'
 
 :原因|
 コードのシンタックスハイライトをPythonで処理しているようで、そのため/usr/bin/python2が存在しないとレンダリングされないようです。赤字の部分のように''#show as '''書式'''''が判断のポイントかも。そのため''show as HTML''などの場合もあるようです。
 
 :解法|
 /usr/bin/pythonに/usr/bin/python2という名前でリンクを張ります。[[上記>#ka999d17]]参照。
 
 ----
 コメントなどありましたらどうぞ。
 #comment