gem install rmagick に失敗したときの対処
CentOS 6.3 で bundler で依存パッケージのインストール時に失敗した。エラー内容は下記。
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /usr/local/rbenv/versions/1.9.3-p286/bin/ruby extconf.rb checking for Ruby version >= 1.8.5... yes extconf.rb:128: Use RbConfig instead of obsolete and deprecated Config. checking for gcc... yes checking for Magick-config... no Can't install RMagick 2.13.1. Can't find Magick-config in /usr/local/rbenv/versions/1.9.3-p286/bin:/usr/local/rbenv/libexec:/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/local/rbenv/versions/1.9.3-p286/bin/ruby Gem files will remain installed in /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/rmagick-2.13.1 for inspection. Results logged to /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/rmagick-2.13.1/ext/RMagick/gem_make.out An error occurred while installing rmagick (2.13.1), and Bundler cannot continue. Make sure that `gem install rmagick -v '2.13.1'` succeeds before bundling.
どうやら ImageMagick-devel がないことが原因らしい。下記でインストール。
# yum install ImageMagick-devel
そしてまた gem install なり bundle install なりを実行すると、インストールが成功する。
Jenkins のステータスを BuildReactor で監視する
Chrome のエクステンションで便利なのがあるので、使い方メモ。
BuildReactor - Chrome Web Store
Jenkins の設定
まず、よくわからないけど日本語にローカライズされてて動かなかった箇所があったので、Jenkins の設定を変更する。
# vim /var/lib/jenkins/config.xml
で、"すべて" とかかれているところは全部 "All" に変更
:%s/すべて/All/g
あと、各ユーザーのコンフィグもこうなってるっぽいので、それらもすべて変更
# vim /var/lib/jenkins/users/[ユーザー名]/config.xml
同じように
:%s/すべて/All/g
それで Jenkins の再起動
# /etc/init.d/jenkins restart
下記の URL にアクセスして、xml が返ってきたらOK。
http://[Jenkinsのホスト]/jenkins/view/All/cc.xml
BuildReactor のインストール/設定
Chrome で、下記のエクステンションをインストールする。
BuildReactor - Chrome Web Store
インストールしたら、下の図のようなアイコンが出てくるので、そいつをクリック、スパナみたいなアイコンクリックしてオプション画面を開く。
それから左にある Add ボタンをクリックすると下記のようになる。
ここで Jenkins を選択して、下部にプロジェクト名を入力する。mocha-test として入力したけど、多分ホスト名の方がいいかもしれない。
そして Add すると、下記の詳細設定画面になる。
URL に http://[Jenkinsのホスト]/jenkins、
アカウントを入力(認証有の場合)して、Show ボタンをクリックすると、Job一覧が出てくる。監視する Job を選択して、Save をクリックすると、監視が始まる。
動作確認
せっかくなので前回までに作った mocha-test で確認する。テストが失敗するように変更。
# test/calc.test.js
13 行目 - assert.equal(result, 4); + assert.equal(result, 3);
んで push
# git add test/* # git commit -m "modify calc.test.js to fail" # git push -u origin master
そうすると、監視インターバルが60secなので、1分位するとChromeの通知がポップアップする。
んで、また修正。
# test/calc.test.js
13 行目 - assert.equal(result, 3); + assert.equal(result, 4);
んで push
# git add test/* # git commit -m "fix test to pass" # git push -u origin master
インターバルが来ると、ビルドが直ったよ!っていう通知が来る。
GitLab の push をトリガーに Jenkins を回す
前回まで作ってた GitLab と Jenkins の連携方法のメモ。GitLab に push すると、そのプロジェクトをビルドしてメールでテスト結果を報告するようなサンプルを作る。
GitLab のリポジトリ作成
まずは CI まわしたいプロジェクトのリポジトリを作成する。このへんは普通の github とやりかたは変わらないので割愛する。今回は Node.js で mocha のテストプロジェクトをやってみたいので、「mocha-test」というプロジェクト名にした。
Jenkins の設定
Jenkins からそのプロジェクトを参照できるようにする。Jenkins は jenkins ユーザーで稼働しているため、そのままの設定だとリポジトリが見れない。GitLab 構築の際に apache ユーザーを admin にしたように、jenkins ユーザーも admin に設定する。まずは jenkins ユーザーの ssh key を生成する。
# sudo -H -u jenkins ssh-keygen -q -N '' -t rsa -f /var/lib/jenkins/.ssh/id_rsa
生成したキーを gitolite に読み込ませる。
# cd /home/git # cp /var/lib/jenkins/.ssh/id_rsa.pub jenkins.pub # chown git:git jenkins.pub # chmod 444 jenkins.pub # sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/jenkins.pub"
ここまでがうまく行っていれば、/home/git/.ssh/authorized_keys に jenkins の行が追加されているはず。
そしてまだ admin 権限は設定されていないので、まだプロジェクトはクローン出来ない。
次は gitolite-admin の設定をする。
# cd /tmp # sudo -u apache git clone git@localhost:gitolite-admin.git # 前回までの記事で apache に admin権限を渡しているので、apache で clone する。他のユーザーに管理者権限を渡している場合はそのユーザーで実行すること。 # cd gitolite-admin/
この中の設定ファイルを編集
# vim conf/gitolite.conf
repo gitolite-admin RW+ = apache repo testing RW+ = @all repo @all RW+ = apache
こんな感じになっているものに、jenkins を追加。(多分repo @allに追加するだけでいいと思うけど、一応gitolite-adminにも追加)
repo gitolite-admin RW+ = apache jenkins repo testing RW+ = @all repo @all RW+ = apache jenkins
んで、変更をコミットする。
# git add conf/gitolite.conf # git commit -m "add jenkins to admin user" # sudo -u apache git push -u origin master 用がすんだら、clone したものを消しておく # cd ../ # rm -rf gitolite-admin
これで jenkins ユーザーに管理者権限がついているはずなので、チェックする。
# cd /tmp # sudo -u jenkins git clone git@localhost:gitolite-admin.git もし localhost じゃなくて、ドメイン名をつけていたらそれでアクセスできるかをチェックすること。(known_hosts に追加する必要があるため) 成功したらディレクトリを消しておく # rm -rf gitolite-admin
Jenkins の設定
Jenkins で CI したいジョブを作成する。
ホーム画面で新規ジョブ作成をクリック。
次にジョブ名を入力して、フリースタイル・プロジェクトのビルドを選択。今回ジョブ名は「mocha-test」とした。
ソースコード管理システムに Git を選択し、リポジトリの情報を入力する。
ビルドのトリガには「SCMのポーリング」を選択する。スケジュールにはなにも記入する必要はない。
ビルドするときに実行するシェルスクリプトを設定する。入力するシェルスクリプトは下記。
export PATH=/usr/local/bin:$PATH npm install -d $WORKSPACE/node_modules/mocha/bin/mocha --reporter tap > mocha-test-results.txt
ビルド処理後にメール通知したいので、E-mail通知の設定もしておく。
すべて記入が終わったら、一番下の「保存」または「適用」をクリックして保存する。
Git の Hook の設定
ここまで設定が完了したら、プロジェクトが空の状態でビルドが開始されるか確認する。具体的には、下記のリクエストを実行するとビルドが開始されるはず。
http://[Jenkins のホスト名]/jenkins/git/notifyCommit?url=git@localhost:mocha-test.git
パラメタの url は、上記で設定したGitのリポジトリと同じ値を入力すること。
ブラウザでも curl でも良いのでリクエストを実行した後に、Jenkins のページをリロードするとビルドが開始または実行が終了しているはず。そして設定したメールアドレスにもメールが届いているはずなので、ビルドが正常に実行されたことを確認しておく。(この時点ではビルドは実行はされるが失敗になるはず)
上記のコマンドが正常に動いているようであれば、このコマンドをGitLabのHookに登録する。
# cd /home/git/repositories/mocha-test.git/hooks # rm post-receive # デフォルトのものはシンボリックリンクなので削除 # cp /home/git/.gitolite/hooks/common/post-receive . # 元の実ファイルをコピーして編集 # vim post-receive
下記のように一行加える。
#!/usr/bin/env bash # This file was placed here by GitLab. It makes sure that your pushed commits # will be processed properly. ----------------ここの一行を加える---------------------- curl http://[Jenkinsのホスト名]/jenkins/git/notifyCommit?url=git@localhost:mocha-test.git ------------------------------------------------------ while read oldrev newrev ref do # For every branch or tag that was pushed, create a Resque job in redis. pwd=`pwd` reponame=`basename "$pwd" | sed s/\.git$//` env redis-cli rpush "resque:queue:post_receive" "{\"class\":\"PostReceive\",\"args\":[\"$reponame\",\"$oldrev\",\"$newrev\",\"$ref\",\"$GL_USER\"]}" > /dev/null 2>&1 done
んで、パーミッションを整える
# chmod 770 post-receive # chown git:git post-receive
あとは git clone してチェックする。
挙動の確認
まずはローカルにプロジェクトをクローンする。
# git clone git@[Jenkins のホスト名]:mocha-test.git
前回の Node のテストを持ってくる。こんな感じのヤツ。
mochatest |- lib | |- calc.js | |- test | |- calc.test.js | |- package.json
# cd mocha-test # mkdir lib # mkdir test
それぞれのファイルを作成する。
# vim lib/calc.js
function add(x, y) { return x+y; } // このへんはおまじない if (typeof exports !== 'undefined') { exports.add = add; }
# vim test/calc.test.js
var calc = require('../lib/calc'); var assert = require("assert") describe('calc', function() { describe('.add', function() { it('should return sum of 2 arguments', function() { var result = calc.add(1, 2); assert.equal(result, 3); }); it('error', function() { var result = calc.add(1, 3); assert.equal(result, 3); }); }); });
{ "name": "mocha-test", "version": "0.0.1", "devDependencies": { "mocha": "0.7.0" } }
これで git push してJenkinsのビルドが動くかを確認する。
# git add . # git commit -m "Initial commit" # git push -u origin master
これで Jenkins のページをリロードして、ビルドが開始/完了していたら成功。新しくメールも着ているか確認する。
これだけだとちょっと気持ち悪いので、テストを変更してビルド成功するようにする。テストを書き換える。
# vim test/calc.test.js
13 行目 - assert.equal(result, 3); + assert.equal(result, 4);
んでコミット/プッシュ。
# git add test/* # git commit -m "fix test to pass" # git push -u origin master
これでまた push トリガーでビルドが走る。そして、テストがOKになってステータスが変わるはず。
とりあえずこんな感じ。
Node.js (v0.8.14-release)を CentOS 6.3 にインストール
Github の master からソースコンパイルする方法。
とりあえずソースを clone する。
# cd /usr/local/src # git clone https://github.com/joyent/node.git # cd node
stable ビルドじゃないといろいろインストールできないっぽいので、stable ブランチに切り替える。現時点では v0.8.14-release らしい。なんでmasterが前衛的なビルドなんだろうね
# git branch -r # リモートブランチを一覧する origin/HEAD -> origin/master origin/bettercla origin/blog origin/crypto-buffers origin/cryptopad origin/debugProcess origin/domains origin/domains-wip origin/domains2 origin/domains3 origin/downloadbutton origin/events-monomorphic origin/eventsource origin/fix/2746 origin/for-tomasz origin/isolates origin/issue2061 origin/json-api-docs origin/master origin/max-tick-warning origin/openssl-asm origin/openssl-exports origin/openssl-fix origin/pathfix origin/perf-reg origin/pointer_bindings origin/reload origin/reviewme origin/smartos-compile-fno-strict-aliasing origin/speed origin/streams2 origin/upgrade-gyp origin/v0.2 origin/v0.4 origin/v0.6 origin/v0.7.10-fix origin/v0.7.4-release origin/v0.8 origin/v0.8.10-release origin/v0.8.11-release origin/v0.8.12-release origin/v0.8.13-fix origin/v0.8.13-release origin/v0.8.14-release origin/v0.8.7-release origin/v0.8.8-release origin/v0.8.9-release origin/v0.9.1-release origin/v0.9.2-release origin/v0.9.3-release origin/v8-3.13.7.1 origin/v8-trunk origin/v8upgrade origin/wip origin/writev origin/writev2 # git checkout -b origin/v0.8.14-release # git branch # ブランチ確認 master * origin/v0.8.14-release
コンパイルする。
# ./configure # make # make install
これだけ。サーバーがしょぼいとmakeで30分ぐらいかかる・・・
デフォルトだとパスはこんな感じになる
# which node
/usr/local/bin/node
そして npm も勝手に入る。
# which npm
/usr/local/bin/npm
それからバージョン確認。
# node -v v0.8.14 # npm -v 1.1.65
JS のテストを BusterJS でやりたかったけど、なんだかうまく動かないので、PhantomJS+Jasmine を入れた。
# npm install -g phantomjs # npm install -g jasmine-node
そしてバージョンの確認。
# phantomjs -v 1.7.0
jasmine-node はバージョンを出力するオプションがなさそうなので、下記のパッケージファイルを覗いた。
# less /usr/local/lib/node_modules/jasmine-node/package.json "version": "1.0.26", // こんな感じの行があった
ここまで書いてなんだけど、PhantomJS + Jasmine もうまくいかなかったので、mocha にした。
# npm install mocha -g # mocha --version 1.6.0
そして mocha も should はうまく動かない。最新のmochaだと動いてなさそうでした。mocha 0.7.0 で動いてそう。should は依然動かず。動いてる人のブログは何をしたら動いてるんだろう。とりあえず assert は上手く出来てるっぽいので、こっちでどうにかすることにした。
こちらを参考にしました。mocha と Jenkins で Node.js の CI 環境を構築する - hakobera's blog
とりあえず、上記を参考にテストが動くかどうかを確認した。下のような構成を組んだ。
mochatest |- lib | |- calc.js | |- test | |- calc.test.js | |- package.json
calc.js
function add(x, y) { return x+y; } // このへんはおまじない if (typeof exports !== 'undefined') { exports.add = add; }
calc.test.js
var calc = require('../lib/calc'); var assert = require("assert") describe('calc', function() { describe('.add', function() { it('should return sum of 2 arguments', function() { var result = calc.add(1, 2); assert.equal(result, 3); }); it('error', function() { var result = calc.add(1, 3); assert.equal(result, 3); }); }); });
package.json
{ "name": "myapp", "version": "0.0.1", "devDependencies": { "mocha": "0.7.0" } }
package.json は依存を確認してくれる、Ruby でいうところの Rakefile みたいなもの。上記で mocha が 1.6.0 でインストールされているけど、npm install -d をやると、ルートディレクトリに node_module みたいなディレクトリができて、そこに必要なパッケージがインストールされ、そのディレクトリにいる場合は、そのローカルパッケージが使用されるようになる。
んで、テストは下記のようにする。
# npm install -d # mocha ․․ ✖ 1 of 2 tests failed: 1) calc .add error: AssertionError: expected {} to equal 4 at Object.Assertion.equal (/usr/local/src/mocha/node_modules/should/lib/should.js:295:10) at Context.<anonymous> (/usr/local/src/mocha/test/calc.test.js:17:21) at Test.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:200:32) at Runner.runTest (/usr/local/lib/node_modules/mocha/lib/runner.js:307:10) at Runner.runTests.next (/usr/local/lib/node_modules/mocha/lib/runner.js:353:12) at next (/usr/local/lib/node_modules/mocha/lib/runner.js:235:14) at Runner.hooks (/usr/local/lib/node_modules/mocha/lib/runner.js:244:7) at next (/usr/local/lib/node_modules/mocha/lib/runner.js:192:23) at Runner.hook (/usr/local/lib/node_modules/mocha/lib/runner.js:212:5) at process.startup.processNextTick.process._tickCallback (node.js:244:9)
こんな感じになればOK。1つめのテストは成功し、2つめのテストは失敗。これでテスト側を修正すればすべてクリアになる。
別の記事で jenkins との連携の細かい部分は書くけど、レポートが欲しい場合は、下記のように書いてテストすればOK。
# mocha --reporter tap > mocha-test-results.txt
Jenkins を CentOS 6.3 にインストール
GitLab に引き続き、Jenkins をインストールする。
Jenkins のインストールは非常に簡単なので、GitLab との連携までメモする。
Jenkins のインストール
Jenkins はレポジトリを登録して yum install するだけ。
こちらを参考にしました:さくらVPS(CentOS6.3)へJenkinsをインストールして認証つけてURLを変更する - えんたつの記録
# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo # rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key # yum install -y jenkins
ちなみに、jenkins は JDK1.6 以上が必要らしいので、入ってなければ yum install java しておく。yum じゃ入らなかったので、oracle から rpm 落としていれてください。
これでインストールは終わりで、下記がインストールされた設定やら環境やら
# Document Root /var/lib/jenkins # ログ /var/log/jenkins # 設定ファイル /etc/sysconfig/jenkins # 起動/停止 /etc/init.d/jenkins (start|stop|restart)
今回は Apache から Jenkins さんを見えるようにしたいので、設定ファイルを書き換える。
# vim /etc/sysconfig/jenkins
JENKINS_ARGS="" ↓ JENKINS_ARGS="--prefix=/jenkins"
Apache の conf も ProxyPass を記述する。今回はデフォルトの 8080 ポートで Jenkins を起動するので、そのまま 8080 にプロキシする。もし他のサービスで 8080 ポートを利用している場合は、Jenkins の設定ファイルも、apache の conf も適宜書き換えること。
# vim ${APACHE_ROOT}/conf.d/jenkins.conf
<VirtualHost *:80> ServerAdmin admin@example.com DocumentRoot "/var/lib/jenkins" ServerName jenkins.hoge.com ServerAlias jenkins.hoge.com ErrorLog "/var/log/jenkins/apache-error.log" CustomLog "/var/log/jenkins/apache-access.log" common ProxyPass /jenkins http://localhost:8080/jenkins retry=5 ProxyPassReverse /jenkins http://localhost:8080/jenkins ProxyRequests Off <Proxy http://localhost:8080/jenkins*> Order deny,allow Allow from all </Proxy> </VirtualHost>
SSLでのアクセスはちなみにこんな感じで書いた。
<VirtualHost *:443> ServerAdmin admin@example.com DocumentRoot "/var/lib/jenkins" ServerName jenkins.hoge.com:443 ServerAlias jenkins.hoge.com:443 ErrorLog "/var/log/jenkins/apache-error-ssl.log" CustomLog "/var/log/jenkins/apache-access-ssl.log" common ProxyPass /jenkins http://localhost:8080/jenkins retry=5 ProxyPassReverse /jenkins http://localhost:8080/jenkins ProxyRequests Off <Proxy http://localhost:8080/jenkins*> Order deny,allow Allow from all </Proxy> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /path/to/hoge.crt SSLCertificateKeyFile /path/to/hoge.key </VirtualHost>
これで、
# /etc/init.d/jenkins start
で Jenkins を起動して、
# /etc/init.d/httpd restart
で apache を再起動して、http://jenkinshost/jenkins にアクセスして Jenkins のホームがみえればOK。
Jenkins の設定
まずはデフォルトでは git プラグインが入っていないので git プラグインをインストールする。
上記の図のように、プラグインの管理画面へ遷移して、利用可能タブをクリックする。
するとインストールできるプラグインが一覧されるので、必要なものを入れていく。
もしプラグインが一覧されないようであれば、高度な設定タブをクリックし、一番右下の更新ボタンをクリックする。(おそらく、このへんは時間がたてば Jenkins が自動的にアップデートするかも?)
今回は Git plugin と Gitlab plugin を入れた。Gitlab Plugin いれると 503 になってブラウザでの設定ができなくなったのでいれませんでした。
上記のようにチェックを入れて、下部の再起動せずにインストールをクリック。そうすると自動的にプラグインをインストールしてくれる。
次に、設定。システムの設定画面に移動する。
そして、セキュリティの有効化とCSRF対策にチェックをいれておく。
セキュリティの有効化は、ブラウザアクセスするときにログインが必須になるというもの。最初はユーザーのサインアップを許可し、自分のアカウントを作った後にサインアップの許可を外すといいと思う。
Git の設定。
Git plugin の設定
Jenkins の URL の設定
Eメールの設定
とりあえずインストール作業としてはここまで。長くなったので GitLab との連携は別で書く。
GitLab を CentOS 6.3 にインストール
GitLab とは
GitLab は、GitHub のクローンで、GitHub みたいにパブリックにしたくない場合、自分のサーバーにプライベートサービスとして使うことができるパッケージ。自分で git のリポジトリ立てる場合、管理が大変になってくるので、ブラウザで管理できるのは非常に楽である。
事前準備
ruby
ruby が必要になるので環境をrvmかrbenvかをインストールしておく。前に rbenv の記事は書いてあるので、参考に。
rbenv を CentOS 6.3 にインストール - 俺の成長日記
DB(MySQL、PostgreSQL, SQLite3 いずれか)
GitLab のアカウント管理に RDB を利用するので、MySQL、PostreSQL、SQLite3 いずれかをインストールしておく。
MySQL のインストールは以前記事に書いてあるので、参考にする。
http://d.hatena.ne.jp/katsuren/20120919/1348067825
Redis
KVS の DB として Redis も利用しているので、これもインストールしておく。
これも以前書いてる。参考:CentOS 6.2 サーバー構築手順 - 俺の成長日記
Apache
今回はApacheを使う。GitLabはRailsで作られているので、Passenger のインストールが必要になる。Apache をコンパイルするときに、mod_proxy を有効にしておく。
Passengerのインストール
rubygems から passenger をインストールしておく。
# gem i passenger ちなみに i は install の略らしい(ドヤァ)gem install 〜 でも同じ挙動になる。 # rbenv rehash # passenger-install-apache2-module
成功したら、conf にこれを書いてね、っていうのがでてくるので、${APACHE_ROOT}/conf.d/passenger.conf あたりに指示されたものを書いとく。
The Apache 2 module was successfully installed. Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so PassengerRoot /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17 PassengerRuby /usr/local/rbenv/versions/1.9.3-p286/bin/ruby After you restart Apache, you are ready to deploy any number of Ruby on Rails applications on Apache, without any further Ruby on Rails-specific configuration!
pip のインストール
# cd /usr/local/src # curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py # python get-pip.py
下記のようなエラーがでたら setuptools が入ってない。
An error occured while trying to run get-pip.py. Make sure you have setuptools or distribute installed.
ので、yum から setuptools を入れる。
# yum install -v python-setuptools
ユーザーの作成
git / gitlab で必要なユーザーを作成しておく。あらかじめ作られている httpd ユーザーは apache とする。今回は httpd 経由で色々操作するので、gitlab ユーザーは作成せず、apache ユーザーに必要な権限を与えていく。
# useradd git httpd ユーザーを git グループに追加 # usermod -a -G git apache
# mkdir -p /home/apache/.ssh # chmod 700 /home/apache/.ssh # chmod 700 /home/apache # chown apache:apache -R /home/apache # sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /home/apache/.ssh/id_rsa
※yum パッケージで httpd をインストールしている場合は、apache ホームディレクトリが /var/www なので、上記ではなくて下記のようになる。
# mkdir -p /var/www/.ssh # chmod 700 -R /var/www/.ssh # chown apache:apache -R /var/www # sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /var/www/.ssh/id_rsa
以降、apache のホームディレクトリ関連は /var/www に置き換えて考えること。
gitolite のインストール
git の管理は、gitolite というアプリケーションで行う。
GitHub - sitaramc/gitolite: Hosting git repositories -- Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.
# cd /home/git # sudo -H -u git git clone https://github.com/sitaramc/gitolite.git # sudo -u git -H mkdir bin # sudo -u git sh -c 'echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile' # sudo -u git sh -c 'gitolite/install -ln /home/git/bin'
パス無しで操作できるように、apache ユーザーとのキー交換を行う。
# cp /home/apache/.ssh/id_rsa.pub /home/git/apache.pub # chmod 0444 /home/git/apache.pub # chown git:git /home/git/apache.pub # sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/apache.pub" # sudo -u git -H sed -i 's/0077/0007/g' /home/git/.gitolite.rc
それから、なんかこれを編集しないとプロジェクトの追加とかができなかった。
# sudo -u git vim /home/git/.gitolite.rc // この部分を GIT_CONFIG_KEYS => '', // こんな感じに変更 GIT_CONFIG_KEYS => '.*',
パーミッションを変更する。
# chmod -R g+rwX /home/git/repositories/ # chown -R git:git /home/git/repositories/
どうやらリポジトリを直に apache が見ることがあるようで、git のホームディレクトリにグループユーザーの権限も付与しておく。
# chmod g+rx /home/git
ここまできたら、gitolite が動作しているか確認する。ここで、know_hosts に追加してもよいか聞かれるので、yes にしておく。
# cd /tmp # sudo -u apache -H git clone git@localhost:gitolite-admin.git git clone に成功したら # rm -rf gitolite-admin
豆知識。gitolite は変更をすべて git 上で行う。だから、変更を /home/git/.gitolite のディレクトリに対して行っても意味が無いことが多い。上記の gitolite-admin を clone して、その中身を変更、push することで設定が反映される。
GitLab のインストール
必要なパッケージのインストール
# gem i charlock_holmes --version '0.6.8' # pip install pygments # gem i bundler # rbenv rehash
GitLab の公開用のディレクトリを作成して、gitlabhq をダウンロードする。ルートディレクトリは /home/project/gitlab とする。
# mkdir -m 775 -p /home/project/gitlab # chown apache:apache -R /home/project # cd /home/project/gitlab # sudo -H -u apache git clone -b stable https://github.com/gitlabhq/gitlabhq.git . 設定ファイルをコピーする。 # sudo -u apache cp config/gitlab.yml{.example,}
設定ファイルの中身を編集する。(gitlab.yml)
web: host: hoge.example.com port: 443 https: true
この部分を適当なドメインに設定する。今回は自分はSSLを使うので、portとhttpsを変更した。
git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ hooks_path: /home/git/.gitolite/hooks/ gitolite_admin_key: apache git_user: git upload_pack: true receive_pack: true host: hoge.example.com port: 22
あとはこのgit_hostの項目を変更する。
gitolite_admin_key が gitlab ではなく、今回は apache で設定したので、変更する。
それからhost,portに関してもコメントアウトを外して、適当なドメイン/ポートを設定する。ここに設定したドメインが GitLab に表示される、git@hogehoge:fuga.git のhogehogeの部分に反映される。
そしてデータベースの設定を行う。
データベース設定ファイルは使っている DB のものをコピーする。 MySQL # sudo -u apache cp config/database.yml{.mysql,} PostgreSQL # sudo -u apache cp config/database.yml{.postgres,} SQLite # sudo -u apache cp config/database.yml{.sqlite,} ここでconfig/database.ymlを開いて、適当な値を設定する。
使用するDBに応じたgemをインストールする。
MySQL # bundle install --without development test sqlite postgres --deployment PostgreSQL # bundle install --without development test sqlite mysql --deployment SQLite # bundle install --without development test mysql postgres --deployment
DBをセットアップする。
# sudo -u apache -H -i bundle exec rake gitlab:app:setup RAILS_ENV=production
※apache ユーザーが非アクティブの場合は、環境変数を毎回追加してあげる必要があった。他に良い方法があれば教えてください。以降、apache が非アクティブな場合で、rbenv を使う必要があれば、 'sh -c "PATH=/usr/local/rbenv:$PATH && 〜" を付けて実行してください。
# sudo -u apache -H sh -c "PATH=/usr/local/rbenv:$PATH && bundle exec rake gitlab:app:setup RAILS_ENV=production"
log, tmp ディレクトリを読み書き可能にしておく。
# chmod 777 -R log # chmod 777 -R tmp # chown apache:apache -R log # chown apache:apache -R tmp
ついでに、vendor の所有者を apache にしておく。
# chown apache:apache -R vendor
hook の設定ファイルをコピーする。
# cp -p /home/project/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive # chown git:git /home/git/.gitolite/hooks/common/post-receive
このままだと git push するときにエラーでるので、編集する。
# vim /home/git/.gitolite/hooks/common/post-receive
env 〜
っていうコマンドを実行している箇所の、-i オプションを削除する。
ここまでで、環境設定がうまくできているかをチェックする。
# sudo -u apache -i bundle exec rake gitlab:app:status RAILS_ENV=production
ここでチェックが通らない場合は、そのエラー内容を見て適切に対処する。
ここまできたらhttpdを起動する。
# /etc/init.d/httpd start
resque も起動する。
# cd /home/project/gitlab # sudo -u apache -i ./resque.sh
あとは普通に利用出来るようになってるはずなので、ブラウザから上記のvhostなんかにアクセスする。
初期設定がうまくできていれば
ID: admin@local.host
PW: 5iveL!fe
でアクセスできるはず。
ログインしたあとは、Adminのパスワードを変更して、ユーザー作成して、プロジェクト作ったり ssh キーを登録したりする。
rbenv を CentOS 6.3 にインストール
Rails とか gitlab とか使ってみたかったので、手始めに rbenv をインストールすることにした。そのときのメモ。
rbenv とは
とりあえず説明。ruby をサーバーで利用するときに、バージョンの問題が出てくる。ruby の 1.8系と1.9系でも扱えるパッケージに差がでたりする。それを解決するのが rbenv。同じパッケージ管理ツールに rvm というものもあるが、今回は手軽らしい rbenv をインストールすることにする。ちなみに、rb(ruby)のenv(環境)っていう名前っぽい。恥ずかしながら、この文字の羅列は覚えられなかったけど、意味がわかって間違えなくなった。
インストール
※これらの作業は全部 root でやった。
とりあえず epel と remi レポジトリをいれる。
# cd /usr/local/src/ # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
remi レポはデフォルトで enabled=0 になっているので、1にする。
# vim /etc/yum.repos.d/remi.repo
んで、適当に tmux と git をインストールする。
# yum -y install tmux git
他、ruby のビルドに必要なパッケージをインストールする。
# yum -y install gcc
rbenv のインストール。
# cd /usr/local/ # git clone https://github.com/sstephenson/rbenv.git # mkdir rbenv/shims rbenv/versions # groupadd rbenv # chgrp -R rbenv rbenv # chmod -R g+rwxXs rbenv
ruby-build のインストール。
# cd /usr/local/src/ # git clone https://github.com/sstephenson/ruby-build.git # cd ruby-build # ./install.sh
環境変数を通す(全ユーザーに適用する)。下記のコードを /etc/profile.d/rbenv.sh に書く。
export RBENV_ROOT="/usr/local/rbenv" export PATH="/usr/local/rbenv/bin:$PATH" eval "$(rbenv init -)"
このへんはもっと詳しく書いている人がいるので、もう少し詳しく知りたい人はそちらへ。
全ユーザーで共通のrbenv+ruby-buildを使用する環境を構築する - 一分一秒真剣勝負!
そして visudo で sudo したときでも PATH を引き継ぐようにしておく。
# visudo
こんな感じのブロックを探して
Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
下記の1行を追加する。
Defaults env_keep += "PATH"
rubyの設定
いったん環境整えたら、再ログインして環境がロードされるか確認しておく。
# which rbenv
とかして、rbenv が使えるようになってればOK。
現在使える ruby は、下記のコマンドで一覧される。
# rbenv versions
今インストールしたばかりなので、もちろん何も出ない。
なので、ruby をインストールする。インストール可能なバージョンの一覧は下記のコマンドを実行する。
# rbenv install -l
2012/10/27 時点では下記が有効になってる。
Available versions: 1.8.6-p383 1.8.6-p420 1.8.7-p249 1.8.7-p302 1.8.7-p334 1.8.7-p352 1.8.7-p357 1.8.7-p358 1.8.7-p370 1.9.1-p378 1.9.2-p180 1.9.2-p290 1.9.2-p318 1.9.2-p320 1.9.3-dev 1.9.3-p0 1.9.3-p125 1.9.3-p194 1.9.3-p286 1.9.3-preview1 1.9.3-rc1 2.0.0-dev jruby-1.5.6 jruby-1.6.3 jruby-1.6.4 jruby-1.6.5 jruby-1.6.5.1 jruby-1.6.6 jruby-1.6.7 jruby-1.6.7.2 jruby-1.6.8 jruby-1.7.0 jruby-1.7.0-preview1 jruby-1.7.0-preview2 jruby-1.7.0-rc1 jruby-1.7.0-rc2 maglev-1.0.0 maglev-1.1.0-dev rbx-1.2.4 rbx-2.0.0-dev ree-1.8.6-2009.06 ree-1.8.7-2009.09 ree-1.8.7-2009.10 ree-1.8.7-2010.01 ree-1.8.7-2010.02 ree-1.8.7-2011.03 ree-1.8.7-2011.12 ree-1.8.7-2012.01 ree-1.8.7-2012.02
この中から stable の一番新しいのをインストールする。今回は 1.9.3-p286。
インストールは下記のコマンドを実行する。
# rbenv install 1.9.3-p286
インストールしたら、デフォルトでこのバージョンを使うように設定する。
# rbenv global 1.9.3-p286 # rbenv rehash
一応 ruby のバージョンを確認する。
# ruby -v ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
アップデートとかをする場合には、ruby-build のソースコードを git pull で更新して、install.sh を実行し、rbenv install をして、global で設定する。