日ごろgithubさんにお世話になっておりますが、Gitoriousというサービスは自分のコードを公開し、個人でインストールできるようなので入れてみたメモ。

概要

ホストするOSはUbuntu 9.10。

手順は、9.04の場合のものが公式Wikiにあったりする(http://gitorious.org/gitorious/pages/UbuntuInstallation)のでそれを大幅に参照した。基本的にコレの通りで問題ないのだが、Gitorious自体のバージョンが上がったこともあって微妙に違う点もある。

以下、日本語Remix CDを入れたてのまっさらな状態からの構築を想定。

aptで入れたもの

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo aptitude install build-essential\
apache2 apache2-dev\
mysql-server mysql-client libmysqlclient15-dev\
git-core git-svn git-doc git-cvs\
apg\
geoip-bin libgeoip1 libgeoip-dev\
sqlite3 libsqlite3-dev\
imagemagick libmagickcore2 libmagickwand2 libmagickcore-dev libmagickwand-dev\
libpcre3 libpcre3-dev\
zlib1g zlib1g-dev\
libyaml-dev\
sendmail\
zip unzip\
memcached\
openssh-server

ログを見る限りこれらを入れていた。Synapticで入れてしまったものもあるかも。。デスクトップ版はデフォルトだとsshdも入ってないのよね。。

ソースインストール

onigurumaはソースインストールしないと、rubyバインディングをコンパイルできない。libonig2はヘッダが入らん。
http://www.geocities.jp/kosako3/oniguruma/

あと、sphinxという検索エンジンを使用するのでそれも入れる。
http://www.sphinxsearch.com/downloads.html

ImageMagickは、aptでMagick-configやヘッダファイルが入ってくれるのでソースは要らない。

あと、他の記事ではActiveMQを入れるとかいう手順もありますけど、今のバージョンでは使ってないようです。Rubyのstompserverとかいうものにメッセージングを任せてる、のかな。

Ruby周りとgemで入れたもの

rubyは、Ruby Enterprise Edition(http://www.rubyenterpriseedition.com/download.html)。ちょうど、1.8.7互換版が出ている。Ubuntuだとdebもあるので圧倒的に楽。

で、rubyバイナリのインストール先が /usr/local/bin になり、gem、gemで入れた実行ファイル(rake、stompserver)等もそこに行くので、実行ファイルを決め打ちにしている幾つかのスクリプトを修正する必要がある。なんかよく分からんけどコケた際はまずその辺を疑ってみよう。

gemは最終的に以下の如し。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*** LOCAL GEMS ***
 
actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
BlueCloth (1.0.1)
chronic (0.2.3)
daemons (1.0.10)
diff-lcs (1.1.2)
echoe (4.1)
eventmachine (0.12.10)
fastthread (1.0.7)
gemcutter (0.2.1)
geoip (0.8.6)
hoe (2.4.0)
json (1.2.0)
json_pure (1.2.0)
mime-types (1.16)
mysql (2.8.1)
oniguruma (1.1.0)
passenger (2.2.5)
pg (0.8.0)
plist (3.0.0)
rack (1.0.1)
rails (2.3.5)
rake (0.8.7)
rdiscount (1.3.1.1)
RedCloth (4.2.2)
rmagick (2.12.2)
rspec (1.2.9)
rspec-rails (1.2.9)
ruby-hmac (0.3.2)
ruby-openid (2.1.7)
ruby-yadis (0.3.4)
rubyforge (2.0.3)
sqlite3-ruby (1.2.5)
stomp (1.1)
stompserver (0.9.9)
textpow (0.10.1)
ultrasphinx (1.11)

service関連の設定

UbuntuInstallation」の通り。git-daemon、git-ultrasphinxの起動スクリプトのrubyの場所をなどを変更。

stompは、Wikiのスクリプトではまったく動かなかったので、やっつけで以下のようなものを作成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
# Start/stop the stompserver
#
### BEGIN INIT INFO
# Provides: stomp
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Stomp
# Description: Stomp
### END INIT INFO
 
test -f /usr/local/bin/stompserver || exit 0
 
. /lib/lsb/init-functions
 
case $1 in
start) # log_daemon_msg “Starting stompserver” “stomp”
 
     cd /var/www/gitorious && sudo -u git /usr/local/bin/stompserver &
     log_end_msg $?
    ;;
 
stop) # log_daemon_msg “Stopping stompserver” “stomp”
 
     cd /var/www/gitorious && kill -INT `cat log/stompserver.pid`
     log_end_msg $?
     ;;
 
restart) # log_daemon_msg “Restarting stompserver” “stomp”
 
    cd /var/www/gitorious && sudo -u git /usr/local/bin/stompserver &
    cd /var/www/gitorious && kill -INT `cat log/stompserver.pid`
    log_end_msg $?
    ;;
 
status)
 
    if [ -f /var/www/gitorious/log/stompserver.pid ]; then
echo "stompserver is running. pid: `cat /var/www/gitorious/log/stompserver.pid`"
    else
echo "stompserver is not running."
    fi
    ;;
 
*) # log_action_msg “Usage: /etc/init.d/stomp {start|stop|restart|status}”
 
    exit 2
    ;;
 
esac
exit 0

大変酷いスクリプトであることは自分でも知ってますが、まあ用には足ります。

gistに上げてるので、以下で落とせます。

sudo wget -O /etc/init.d/stomp http://gist.github.com/raw/269240/ce6507d4387004040e73667586ee2b1ced1de9fa/stomp.sh && sudo chown a+x /etc/init.d/stomp

そしてpollerは、起動スクリプトはもちろん動かなくて、それも上手いこと直せない。。

とにかく使いたいなら、サーバ起動直後に以下のワンライナーで手動起動する運用で、対応できるかと思う。

sudo su git -c "cd /var/www/gitorious && RAILS_ENV=production ruby script/poller start && sleep 10"

このコマンドを起動スクリプトに書いてもぜんぜんうまく行かないんだけど、何で?

Gitoriousの全機能が動く状態になっているか、各デーモンの状況を確認する際は以下のコマンドで。

ps-ef | grep git

各デーモンは「git」ユーザで動いています。なお、Passengerの仕様として、Railsのプロセスは$RAILS_ROOT/config/environment.rbのオーナーなので、こっちのプロセスもgitになっているはず。

以下の4プロセスが存在すればOK。

1
2
3
4
git       2243     1  0 22:11 ?        00:00:00 /usr/local/bin/ruby /var/www/gitorious/script/git-daemon -d
git       2547     1  0 22:12 ?        00:00:00 searchd --config /var/www/gitorious/config/ultrasphinx/production.conf
git       2925     1  0 22:18 ?        00:00:06 poller
git       3213     1  0 22:26 pts/0    00:00:00 /usr/local/bin/ruby /usr/local/bin/stompserver

上がってなかったらserviceコマンドで上げましょう(結局手動かよ!!!)。

その他

Wikiの通りやっていけば、Ubuntuならそれほど詰まらないかとは思います。

細かい点

  • どうせローカルでしか使わないのでSSL要らない

config/environment/production.rbに、

1
SslRequirement.disable_ssl_check = true

を追記する

  • cronがなんかコケる

crontab -e する際に、環境変数 PATH=/usr/local/bin:/usr/bin:/bin を設定した方がいい気がする。あとgitユーザで設定してるか確認。

  • ログインできない

gitorious.ymlでのホスト名と、実際にブラウザでアクセスするホスト名が、一致してないとダメっぽいです。なので「localhost」とかで動作検証しようとするとダメだった。/etc/hosts使うとか、192.168.hoge.fugaをgitorious.ymlにちゃんと書くとか。

  • tarballがダウンロードできない

gitorious.ymlで設定してるarchive_cache_dirの場所に、ちゃんとtarballはできてるんですけど、いざブラウザから落とそうとすると1kbの空ファイルになってしまう。。。

ソース見る限り「X-SendFile」という手段でファイルをダウンロードさせてるようなので、Apacheなら「mod_xsendfile」を入れなければいけない模様。

ちなみに個人的には「XSendFile on」の記述を忘れていたため、ダウンロードはされるが空のファイル、というみっともないハマリ方をしちゃいましたよ。ご注意あれ。

はい、私もでした。ということでソースがtarballでも落とせて便利。

未解決

  • 日本語検索できなくね

sphinx search自体が日本語対応しているか怪しい。。と思ったが。

UltraSphinxプラグインが起動する検索デーモンの共通設定は、

${RAILS_ROOR}/config/ultrasphinx/default.base

via: http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/classes/Ultrasphinx.html

見た感じ*.baseにはERB記法が使えそう。

そして、なにやら日本語対応のための記事っぽいものが英語であった。

この辺とか、あと /usr/local/etc/sphinx.conf.dist にもサンプルがあったりするのでそれを見ながら試行錯誤すれば出来るようになるのかも。でも時間無い。

取り急ぎは「カテゴリーは英語にする」とかそういう運用ルールでがんばるしかないか。

もしくは、UltraSphinx自体をハックする必要もあるかもしれない。
http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/files/README.html

まとめ

知らないライブラリを沢山使ってるので勉強になった。

日本語情報少なくて困惑する。

でも、トラブルがあるたびに、ソースを追っかけたりして対処していけば、なんとなく入れられるんではないでしょうか。というか毎日のようにPUSHがあるので、一ヵ月後ぐらいにはここに書いたtips意味無くなるんじゃあないか。

大変参考になった先達

Wikiの他、以下の方々