Ubuntu Lucid (10.04) に gitorious を載せるメモ

社内で使ってる仮想環境に gitorious ののっけてみるテスツをしてみたので以下にメモを投入しておきます。

とりあえず apt-line から lenny-backports を削除。
以降は UbuntuInstallation の記述に沿って進めていきます。
以下を順に実行。

$ sudo aptitude update
$ sudo aptitude install build-essential zlib1g-dev tcl-dev libexpat-dev \ 
 libcurl4-openssl-dev postfix apache2 mysql-server mysql-client \ 
 apg geoip-bin libgeoip1 libgeoip-dev sqlite3 libsqlite3-dev \ 
 imagemagick libpcre3 libpcre3-dev zlib1g zlib1g-dev libyaml-dev \ 
 libmysqlclient15-dev apache2-dev libonig-dev ruby-dev rubygems \ 
 libopenssl-ruby phpmyadmin libdbd-mysql-ruby libmysql-ruby \ 
 libmagick -dev zip unzip memcached git-core git-svn git-doc \ 
 git-cvs irb

で、ruby 関連パケジを一旦削除して

$ sudo aptitude remove irb rdoc libruby libruby1.8 ruby1.8 rubygems rubygems1.8

デフォで導入されている puppet も削除されるんですね、ruby が削除されるので当たり前っちゃ当たり前ですが。で、Installing RVM の記述に沿って rvm を導入してきます。

$ sudo bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

かくにん (一度ログアウトしてから

$ type rvm | head -1
rvm is a function

以下は rvm notes にて入れれ、と言われるソレ達ですので案内に沿って導入。

$ sudo aptitude install build-essential bison openssl libreadline6 \
libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev \
libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf \
libc6-dev ncurses-dev

導入後に rvm install 1.8.7 します。

$ sudo su -
# rvm install 1.8.7
# rvm use 1.8.7 --default

use しないと使えない、というあたりがナニ。
あとは gem update --system したり (1.8.5 になります) 以下を入れたりなど。

$ sudo aptitude install libmysql-ruby libdbd-mysql-ruby libopenssl-ruby libyaml-ruby

この時点でようやくドキュメントの Install Ruby gems の項に戻れます。ちなみに rake も stompserver もパスが通っているので ln -s する必要はありません。rvm 素晴しい。
で、次は Install Sphinx ですが、--prefix は /usr/local で configure します。導入成功を確認したら次は Fetch Gitorious ですが詳細は略。

Congigure Service

gitorious を git clone したら script/gitorious を /usr/local/bin あたりに symlink しといて doc/templates/ubuntu 配下の startup script を云々とのこと。

  • まず各スクリプトの ruby などの path 修正
  • /etc/init.d 配下とかにコピィ
  • updata-rc.d default するなど

Configure Apache

Install Passenger はインストーラにパスが通ってますので楽ちん。ごそごそ make が動いてます。
あとは以下の内容で /etc/apache2/mods-available/passenger.load を作成とのこと。

 LoadModule passenger_module /usr/local/rvm/gems/ruby-1.8.7-p352/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
 PassengerRoot /usr/local/rvm/gems/ruby-1.8.7-p352/gems/passenger-3.0.7
 PassengerRuby /usr/local/rvm/bin/ruby

Add a git user to MySQL: browse to https://server/phpmyadmin, to Privileges, 
and create a new “git” user with global create privileges. 
Also give it all privileges on gitorious_production.

な記述ですが、phpmyadmin から mysql の root でログインして privileges タブから add a new user リンクをクリックしてユーザ名とかを入力して global な create の項目にチェックを入れて一旦登録。
データベースはまだ作成していないので Also 以降は別途設定となります。
Finish の直前、ラストの Run the following な以下で

$ rake db:create
rake aborted!
Bundler couldn"t find some gems. Did you run `bundle install`?

失敗。そして前回のログによるとここからが導入作業の本番開始でした。対処としては git ユーザで

 $ bundle install --path .bundle

実行とのこと。

再度 rake db:create してみます。

$ rake db:create
rake aborted!
You have already activated rake 0.9.2, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

rake を 0.8.7 に downgrade とのこと。とりあえず

# gem install rake --version 0.8.7

で云々、した後に

# gem uninstall rake --version 0.9.2

You have requested to uninstall the gem:
 rake-0.9.2
echoe-4.6.1 depends on [rake (>= 0.9.2)]
gemcutter-0.7.0 depends on [rake (>= 0)]
hoe-2.10.0 depends on [rake (~> 0.8)]
passenger-3.0.7 depends on [rake (>= 0.8.1)]
rack-1.3.1 depends on [rake (>= 0)]
rack-1.2.3 depends on [rake (>= 0)]
railties-3.0.9 depends on [rake (>= 0.8.7)]
thor-0.14.6 depends on [rake (>= 0.8)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn] 
Successfully uninstalled rake-0.9.2

#

とりあえず途中の云々は気にせず続行。

$ rake db:create --trace
(in /var/www/gitorious)
rake aborted!

で、gem を downgrade

# gem update --system 1.3.7 --remote

その後 rake db:create しましたが

$ rake db:create --trace
(in /var/www/gitorious)
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:create
rake aborted!

また失敗。うう、出口が見えん。、って RAILS_ENV 設定してなかったよ、と思って以下を実行してみましたが

$ export RAILS_ENV=production
$ rake casino online  db:create
(in /var/www/gitorious)
Couldn"t create database for {"encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql", "database"=>"gitorious_production", "host"=>"localhost", "password"=>nil}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)

これって、config/database.yml だな。password なナニに事前に設定したナニを入力して上書き保存してリトライ。

$ rake db:migrate
(in /var/www/gitorious)
rake aborted!
Secret should be something secure, like "abc887383b73b75c43ae9f57c7673b05". The value you provided, "ssssht", is shorter than the minimum length of 30 characters

あー、これ、前回見たなぁ。でも cookie_secret 云々な記録が無い。
とりあえず apg -m 64 なコマンドを実行して出力を設定ファイル (config/gitorious.yml の cookie_secret) に貼って、vi の J コマンドで末端の改行を消しました。
これで rake db:create と rake db:migrate が成功。
なので phpmyadmin で権限のチェックをしてみます。gitorious_production に all privileges を、ってことなのでその通りに設定。
で、つぎに sphinx 云々ってことなのですが、記録が微妙。

$ bundle exec rake ultrasphinx:bootstrap
(in /var/www/gitorious)
Rebuilding configurations for production environment
Available models are Comment, Repository, MergeRequest, and Project
Generating SQL
mkdir -p /var/www/gitorious/db/sphinx/
$ indexer --config "/var/www/gitorious/config/ultrasphinx/production.conf" --all
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file "/var/www/gitorious/config/ultrasphinx/production.conf"...
indexing index "main"...
ERROR: index "main": sql_range_query: Unknown column "base_tags.name" in "field list" (DSN=mysql://root:***@localhost:3306/gitorious_production).
total 0 docs, 0 bytes
total 0.037 sec, 0.00 bytes/sec, 0.00 docs/sec
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file "/var/www/gitorious/config/ultrasphinx/production.conf"...
creating server socket on 0.0.0.0:3312
WARNING: index "main": preload: failed to open /var/www/gitorious/db/sphinx//sphinx_index_main.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve
Failed to start
Done
Please restart your application containers
$

ログと同じ出力なのでそのまま進めます。って base_tags.name 云々って記述が記憶にあったので記録を確認。

の以下の投稿だったはず。

try this:

vi /home/git/gitorious/config/ultrasphinx/production.conf
 # replace base_tags with tags

bundle exec rake ultrasphinx:index RAILS_ENV=production 

で、何すれば良いのかな。

$ bundle exec rake ultrasphinx:bootstrap
(in /var/www/gitorious)
Rebuilding configurations for production environment
Available models are Comment, Repository, MergeRequest, and Project
Generating SQL
$ indexer --config "/var/www/gitorious/config/ultrasphinx/production.conf" --all
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file "/var/www/gitorious/config/ultrasphinx/production.conf"...
indexing index "main"...
ERROR: index "main": sql_range_query: Unknown column "base_tags.name" in "field list" (DSN=mysql://root:***@localhost:3306/gitorious_production).
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file "/var/www/gitorious/config/ultrasphinx/production.conf"...
creating server socket on 0.0.0.0:3312
Started successfully
Done
Please restart your application containers

あるいは以下?

indexer --config "/var/www/gitorious/config/ultrasphinx/production.conf" --all

駄目っぽいので mysql なコンソールから drop database して rake db:create からリトライしてます。

$ rake db:create
$ rake db:migrate
$ bundle exec rake ultrasphinx:bootstrap
$ indexer --config "/var/www/gitorious/config/ultrasphinx/production.conf" --all

このあたりはスルーで違う部分の対応を優先して様子を見てみます。

ええとその上で、

$ vi config/ultrasphinx/production.conf
# replace base_tags with tags 
$ bundle exec rake ultrasphinx:index RAILS_ENV=production 

すればなんとかなってるのかな。。OK でした。
あとは gem のバージョンが微妙なソレがあったはず。それとサービス起動してないナニがあるので起動させなきゃ。
gem で入れたナニのバージョンが微妙なのは以下。

  • rake は 0.8.7
  • daemons は 1.1.0
  • geoip が 0.8.9

スデに導入済みなバージョンは削除が必要なはず。

$ gem install rake --version 0.8.7 --remote

入れた後、不要なバージョンは削除しておきます。

$ sudo gem uninstall daemons --version 1.1.4

で、サービス起動の確認をして

$ sudo /etc/init.d/stomp start
Starting stompserver: Success

$ sudo /etc/init.d/git-daemon start
Starting git-daemon: success

$ sudo /etc/init.d/git-poller start
Starting poller: Success

$

ちなみにgit-ultrasphinx は起動済みでした。
で、続きを。あとは Finish のみかな。

$ sudo /etc/init.d/apache2 restart
 * Restarting web server apache2
 ... waiting ...done.
$ env RAILS_ENV=production ruby script/create_admin
Type in Administrator"s e-mail: 
hoge
Type in Administrator"s password: 
fuga
Admin user created successfully.
$

でブラウザでアクセスしてみます。あ、postfix の設定が必要だな。詳細は略しますが、localhost 発なナニを転送する null な smtp サーバを作ってあげれば OK です。

null な postfix

ええと、

$ sudo cp /usr/lib/postfix/main.cf /etc/postfix/.
$ vi /etc/postfix/main.cf

で、ざっくり以下を盛り込めば OK かな。

myhostname = fuga
myorigin = $myhostname
inet_interfaces = 127.0.0.1
mynetworks = 127.0.0.0/8
relayhost = [fuga.com]
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/main
sample_directory = /usr/lib/postfix
readme_directory = /usr/share/doc/postfix

で以下の確認コマンドでメイル送付の確認をして

$ /usr/sbin/sendmail xxx@fuga.com
From: git@localhost
Subject: test

test test test
.
$

これ大丈夫か、と思いきやログイン時に InvalidAuthenticityToken でオチる現象が出ました。ググッてもワケワカらんので、正常稼動しているホストと config 配下のファイルを見比べてみたら config/gitorious.yml の gitorious_host な設定値が名前になってて、正常稼動してる方が IP だったので、IP にしてみたら正常動作。
これもある意味第六感デバッグですな。

導入手順

手順を以下に纏めておきます。

  • 基本的には UbuntuInstallation の記述に沿って導入をすすめれば大丈夫です
  • 今回、rvm を使用したので gem のあたりでドキュメントと異なる方法で導入をすすめました
  • config/gitorious.yml の cookie_secret は最初にちゃんと値を盛り込んでおくこと
  • gem で導入するもののうちバージョン依存なものがいくつかある
    • rake が 0.8.7
    • rake は 0.8.7
    • daemons は 1.1.0
    • geoip が 0.8.9
  • RAILS_ENV=production も事前に export しておきましょう
    • git ユーザの .bashrc に盛り込んでおくべき?

ぶっちゃけ最初に git ユーザ作って gitorious を git clone した後は ruby 関連って git ユーザローカルな rvm 環境をこさえて云々な方が話が早い気がしてきたので、そちらの手順も別途確認してみたいと思います。
あまりきちんと纏めきれてなくて申し訳ないですが、どなたかの一助となれば幸いです。

確認できてる問題

chrome なブラウザで InvalidAuthenticityToken でオチる現象を確認してます。どうしたものやら。

解決

ええと Chrome 系のブラウザでアクセスすると InvalidAuthenticityToken でオチるという現象ですが、http://goo.gl/C9MKF を発見できたおかげで解決できました。

I figured out what I was doing wrong. I was using the local IP address 
to log on to the site. But in the config I actually had another 
setting for gitourious_host. Using the right address when accessing 
gitorious solved it. 

とのことで当初 config/gitorious.yml の gitorious_host なエントリはローカル IP アドレスを指定してブラウザからもローカル IP アドレスでアクセスしていたのですが、設定値もアクセス方法も名前ベースに変更したところ、目出度く Chrome 系のブラウザからもアクセス可能になりました。
moleculezz さんありがとうございました。

もひとつ不具合

push 時に以下なメセジが出てますが、との FB が着信。

remote: /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require": no such file to load -- stomp (LoadError)

どうも stomp という gem を導入せねば、な模様。参考にした ML のスレッドによれば以下な出力らしいです。

$ git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 264 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: /opt/ruby-enterprise/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:29:in `gem_original_require": no such file to load
-- stomp (LoadError)
remote: from /opt/ruby-enterprise/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:29:in `require"
remote: from ./hooks/messaging.rb:23
remote: from hooks/post-receive:23:in `require"
remote: from hooks/post-receive:23
To git@192.168.0.2:test/test.git
291a4f6..a3f3a26 master -> master

どうも stomp という gem の導入が必要だったみたいでして、導入したら上記エラーは出なくなりました。