半年くらい下書きフォルダーにあったGitLabのインストール記事をサルベージしました。今回は、Amazon Linux AMIと最新のGitLab 4.1系でインストールしています。が、あまりに長く面倒くさいので、三行でまとめてみました。
- GitLabはGitHubのクローンで、セキュリティー・ポリシー的にGitHubがNGな会社に最適
- GitLabの中身は、Git + GitoliteをラッパーしたWebインターフェース
- インストールが死ぬほど面倒くさいので、後でAWSのPublic AMIとして公開
するよしたよ
以下、手順です。気が長い人は読んでください。
ライブラリのインストール
素のAmazon Linux AMIを立ち上げたら、まずライブラリをインストールしましょう。一部sudoでやっていくと詰まるところがあったので、素直にrootになってからインストールしています。
$ sudo su - # yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel # yum install -y make bzip2 openssl-devel # yum install -y gettext libcurl-devel gdbm-devel mysql-server mysql-devel git python-devel libicu-devel postfix # yum install -y python-pip redis --enablerepo=epel # yum -y install httpd httpd-devel mod_ssl # yum -y install perl-Time-HiRes
Amazon Linux AMIは、デフォルトではExtra Packages for Enterprise Linux (EPEL)のアクセスがオフになっています。そのため、python-pipとredisは --enablerepo=epelをつけてインストールしましょう。
サービスの開始
インストール終了後に、サービスを開始しましょう。特に特別なことはないです。
# chkconfig httpd on # chkconfig redis on # chkconfig mysqld on # /etc/init.d/httpd start # /etc/init.d/redis start # /etc/init.d/mysqld start
rvmのインストール
Amazon Linuxのrubyは、1.8系です。これを1.9系に変えると、awsのrubyツールが動かなくなるので、rvmで1.9系をいれることにします。
# \curl -L https://get.rvm.io | bash -s stable --ruby # echo '[[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm" # Load RVM function' >> /etc/bashrc # source /etc/bashrc
ユーザの作成
GitLabとGitolite用のユーザを作成します。Gitoliteがgitを、GitlLabがgitlabを使用します。また同じグループに属して、gitディレクトリへのグループアクセス権を付与します。
# useradd git # useradd gitlab # usermod -G git gitlab # chmod g+rx /home/git
gitlabアカウント用の鍵ファイルを作成
GitLabインストールの最大の難関である、gitlabユーザからgitへのsshでのログイン設定を行います。そもそも何故これが必要かというと、GitLabはgit及びgitoliteの薄いラッパーのWebインターフェースとして作られている為です。画面から操作を受け付けると、GitLabを動かしているgitlabユーザがssh経由で所定のコマンドを実行しています。この構造を理解していないと、GitLab動かねぇよとハマることになります。(ハマって初めて理解できました。)
手順としては、gitlabアカウントで秘密鍵・公開鍵を作成します。その後、gitアカウントのauthorized_keysにgitlabの公開鍵を追加します。
# su - gitlab $ ssh-keygen -t rsa -f ~/.ssh/gitadmin (パスフレーズは空でO.K.です) $ exit #rootに戻る # cp /home/gitlab/.ssh/gitadmin.pub /home/git
Gitoliteのインストール
ここまで設定が出来たらGitoliteのインストールです。Gitoliteは、gitユーザの管理をしてくれるアプリケーションです。GUIでのUIはいらないけど、gitのアカウント管理は面倒臭いという場合は、Git+Gitoliteでも充分重宝すると思います。
# su - git $ git clone git://github.com/sitaramc/gitolite $ gitolite/install $ gitolite setup -pk /home/git/gitlab.pub" $ vi /home/git/.gitolite.rc #UMASKの値を0077から0007 $ exit
ここでのポイントは、.gitolite.rcを編集してUMASKの値を0077から0007に変更することです。私もここでハマりました。
gitlabアカウントからgitへのログイン確認
# su - gitlab $ ssh -i .ssh/gitadmin git@localhost $ exit #ログイン出来る事を確認して、ログアウト $ vi ~/.ssh/config Host localhost HostName localhost User git IdentityFile ~/.ssh/gitadmin $ chmod 600 .ssh/config
Gitlabのインストール
遂にGitLabのインストールです。GitLabのインストール自体は難しくないのですが、動かしてみて問題点を解決するというのが何度か繰り返すことになるでしょう。
# sudo su - gitlab $ git clone https://github.com/gitlabhq/gitlabhq.git gitlab $ cd gitlab/ $ git checkout 4-1-stable $ chown -R gitlab log/ $ chown -R gitlab tmp/ $ chmod -R u+rwX log/ $ chmod -R u+rwX tmp/ $ cp config/database.yml.mysql config/database.yml $ bundle install --deployment --without development test postgres $ git config --global user.name "GitLab" $ git config --global user.email "gitlab@localhost" $ cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive # chown git:git /home/git/.gitolite/hooks/common/post-receive $ bundle exec rake gitlab:setup RAILS_ENV=production $ mysql create database gitlabhq_production CHARACTER SET utf8; # bundle exec rake db:setup RAILS_ENV=production --trace # bundle exec rake db:seed_fu RAILS_ENV=production
このメッセージが出れば、成功です。
login.........admin@local.host
password......5iveL!fe
Updating repo permissions ...
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (7/7), done.
Receiving objects: 100% (10/10), 1.30 KiB, done.
Resolving deltas: 100% (1/1), done.
remote: Total 10 (delta 1), reused 0 (delta 0)
... doneCreating satellites for ...skipping, because you have no projects
rootで起動設定も行います。
# curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-1-stable/init.d/gitlab # chmod +x /etc/init.d/gitlab # chkconfig gitlab on # /etc/init.d/gitlab start
gitlabユーザで、下記のコマンドでステータスチェックが行えます。
$ bundle exec rake gitlab:env:info RAILS_ENV=production $ bundle exec rake gitlab:check RAILS_ENV=production
passengerのインストールとapacheとの連携
passegerを使ってapacheと連携します。ポイントは、gitlabからgitへの接続の為、apacheをgitlabユーザで起動することです。
#gem install passenger --no-ri --no-rdoc #gem install charlock_holmes --version '0.6.9' #passenger-install-apache2-module
apacheの設定。インストール後のサンプルに従って、設定。/etc/httpd/conf.d/passenger.confを作成します。
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p385/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p385/gems/passenger-3.0.19
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p385/ruby
# ServerName www.yourhost.com
# !!! Be sure to point DocumentRoot to ‘public’!
DocumentRoot /home/gitlab/gitlab/public
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
apacheをgitlabユーザで動かします。(それが嫌なら、gitlabをapacheユーザで動かす必要があります。)
# vi /etc/httpd/conf/httpd.conf #User apache #Group apache User gitlab Group gitlab # cd /var/log # chown -R gitlab:gitlab httpd/ # /etc/init.d/httpd restart
トラブルシューティング
gitlabからgitへsshでログイン出来るものの、gitolite-adminがclone出来ない
git clone localhost:gitolite-admin fatal: 'gitolite-admin' does not appear to be a git repository fatal: The remote end hung up unexpectedly rake aborted! unable to clone gitolite-admin repo
試してみると、こちらのコマンドではclone出来ます。
git clone git@localhost:~/repositories/gitolite-admin.git
素のsshでログインしていて、gitoliteのコマンドが通っていなかったことが解ります。.ssh/authorized_keysを
画面からリポジトリを作成すると、"git config 'core.sharedRepository' not allowed"のエラーが出る
次のようなエラーがでたら、.gitolite.rcのGIT_CONFIG_KEYSを編集しましょう
February 11, 2013 14:22 -> ERROR -> Gitolite error -> remote: FATAL: git config 'core.sharedRepository' not allowed
remote: check GIT_CONFIG_KEYS in the rc file
To git@localhost:gitolite-admin
75dc4de..5f42c35 master -> master
下記の方法で解決です。
vi /home/git/.gitolite.rc GIT_CONFIG_KEYS => '.*',
まとめ
結論としては、GitLabのインストールはとんでもなく面倒くさいです。個人でGitHubチックに使いたいのであれば、間違いなくGitHubを使いましょう。それが、あなたの為です。GitLabは、企業ユースでGitHubがNGの場合のみ使うのが良いのではないでしょうか。インストールは面倒臭いものの、使いはじめると中々便利です。Gitの管理者の手間も少なくなり、またコードの共有も進むことでしょう。
でもやっぱり面倒くさいと思うので、Amazon Linux AMIでインストール済みのイメージを公開しようと思います。gitlabからgitへの認証キーの作成の部分を、対話式で行えるようなバッチを作ってから提供したいと思いますので、今しばらくお待ちください。
See Also:
Amazon-LinuxにRVMを利用してApache+Passenger+Railsのインストール
StatSVNのGit版 GitStatsを使ってみる
Gitのフック機能で、リポジトリをAmazon S3にバックアップする
Git+DropBoxで、プライベートリポジトリ作成。或いはGitをAmazon S3でバックアップ
GitLabのPublic AMIを公開しました。
参照:
gitlabhq/doc/install/installation.md at stable · gitlabhq/gitlabhq · GitHub
Trouble Shooting Guide · gitlabhq/gitlab-public-wiki Wiki · GitHub
CentOS6にGitLabをインストールする方法 | Ryuzee.com
CentOS6.2でGitLabのインストール - おおらかにいこう
Amazon Linux RVM/Ruby1.9/Apache2/Passenger3環境構築 - 130単位
ローカルで GitHub を構築! Git リポジトリ管理ツール「GitLab」を Mac OS X にインストールしてみた | クラスメソッド開発ブログ