日ごろ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」を入れなければいけない模様。
- http://tn123.ath.cx/mod_xsendfile/
- http://packages.debian.org/ja/squeeze/i386/libapache2-mod-xsendfile/download (debもあった)
- http://www.ideaxidea.com/archives/2009/11/mod_xsendfile_installed.html
ちなみに個人的には「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記法が使えそう。
そして、なにやら日本語対応のための記事っぽいものが英語であった。
- http://crunchytoast.com/2009/04/14/sphinx-search-in-japanese/
- http://crunchytoast.com/2009/05/01/japanese-sphinx-explained/
この辺とか、あと /usr/local/etc/sphinx.conf.dist にもサンプルがあったりするのでそれを見ながら試行錯誤すれば出来るようになるのかも。でも時間無い。
取り急ぎは「カテゴリーは英語にする」とかそういう運用ルールでがんばるしかないか。
もしくは、UltraSphinx自体をハックする必要もあるかもしれない。
http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/files/README.html
まとめ
知らないライブラリを沢山使ってるので勉強になった。
日本語情報少なくて困惑する。
でも、トラブルがあるたびに、ソースを追っかけたりして対処していけば、なんとなく入れられるんではないでしょうか。というか毎日のようにPUSHがあるので、一ヵ月後ぐらいにはここに書いたtips意味無くなるんじゃあないか。
大変参考になった先達
Wikiの他、以下の方々
- http://d.hatena.ne.jp/bannyan/20090131/1233399237
- http://d.hatena.ne.jp/Hirohiro/20090522/1243016921
- http://www.araki.net/wiki/araki-wiliki.cgi?araki%3AGitorious





Pingback: Tweets that mention Gitorious入れたメモ « **deadwinter** -- Topsy.com