gitoriousのインストール

先日、やっとの思いでgitoriousをインストールしました。


いろいろドキュメントはあるんですけど、
gitorious自体がバージョンアップしてるので
もう既に古くなってたりして、めちゃくちゃはまりました。。


以下、メモしておきます。抜けてるところあるかも。
Ubuntu Server 9.10にインストールしました。

必要なライブラリなどをインストール

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 \
g++

ソースコードからインストール

wget http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.9.1.tar.gz
tar xvfz onig-5.9.1.tar.gz 
cd onig-5.9.1
./configure && make && make install
cd ..

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz
tar xvfz sphinx-0.9.8.tar.gz
cd sphinx-0.9.8
./configure && make && make install
cd ..

wget http://rubyforge.org/frs/download.php/58679/ruby-enterprise_1.8.6-20090610_i386.deb
sudo dpkg -i ruby-enterprise_1.8.6-20090610_i386.deb

/etc/bash.bashrcを編集

export PATH=/opt/ruby-enterprise/bin:$PATH
export LD_LIBRARY_PATH="/usr/local/lib"
export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib"

/etc/ld.so.confを編集

/usr/local/lib
include ld.so.conf.d/*.conf

変更後はldconfigを忘れずに。

gemでインストール

gem install --no-rdoc --no-ri actionmailer actionpack activerecord activeresource activesupport BlueCloth chronic daemons diff-lcs echoe eventmachine fastthread gemcutter geoip hoe json json_pure mime-types mysql  passenger plist rails rake rdiscount RedCloth rmagick rspec rspec-rails ruby-hmac ruby-openid ruby-yadis rubyforge sqlite3-ruby stompserver textpow ultrasphinx oniguruma

gem install --no-rdoc --no-ri rack --version '~> 1.0.1' 
gem install --no-rdoc --no-ri stomp --version '=1.1'

ここで、以下のようにシンボリックリンクを作っておきます。

ln -s /opt/ruby-enterprise/bin/stompserver /usr/local/bin/stompserver

gitoriousのインストール

git clone git://gitorious.org/gitorious/mainline.git /var/www/gitorious
ln -s /var/www/gitorious/script/gitorious /usr/bin

adduser --system --home /var/www/gitorious/ --no-create-home --group --shell /bin/bash git
chown -R git:git /var/www/gitorious    

su - git    
mkdir .ssh    
touch .ssh/authorized_keys    
chmod 700 .ssh    
chmod 600 .ssh/authorized_keys    
mkdir tmp/pids
mkdir repositories
mkdir tarballs
mkdir /tmp/tarballs-work

cp doc/templates/ubuntu/git-daemon /etc/init.d/
cp doc/templates/ubuntu/git-ultrasphinx /etc/init.d/
cp doc/templates/ubuntu/gitorious-logrotate /etc/logrotate.d/gitorious


/etc/init.d/stompを作成

#!/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

パーミッションなど

chmod 755 /etc/init.d/git-ultrasphinx /etc/init.d/git-daemon /etc/init.d/stomp /etc/logrotate.d/gitorious

update-rc.d stomp defaults  
update-rc.d git-daemon defaults  
update-rc.d git-ultrasphinx defaults


データベース系は各自の設定で。
broker.ymlはそのままでよい。

cp config/database.sample.yml config/database.yml    
cp config/broker.yml.example config/broker.yml   


gitorious.yml

cp config/gitorious.sample.yml config/gitorious.yml 

gitorious.ymlの内容

production:
  cookie_secret: rhignonjenyiabDewnorenOsitsIkDattAlHyacGenAtEwtumJeagNactOjCawajcuibwunolthAcnoHyRiatveeswefcylg1BlovrypAthFephdatootpaunIrInriffrupKojojCenObvuzHitEcAsFeijfotIcobToujTijWoomficMygTicWipgavoj0GhoyWevCudNaifdevRicAuWebuvWiddabUlkisseimmideylluseewsepLukeoj3hipoibyidUfyucwenugjuadcufEassiacArredLymriBlajhomepviwirbEkJeg&yoathhiphGocOodPyfsirdosh5oshyisShodguldOrjEtKecOwmAfPebMotNonja
  repository_base_path: "/var/www/gitorious/repositories"
  extra_html_head_data:
  system_message:
  gitorious_client_port: 80
  gitorious_client_host: gitorious.ameba.jp
  gitorious_host: gitorious.ameba.jp
  gitorious_user: git
  exception_notification_emails:
  mangle_email_addresses: true
  public_mode: true
  locale: en
  archive_cache_dir: "/var/www/gitorious/tarballs"
  archive_work_dir: "/tmp/tarballs-work"
  only_site_admins_can_create_projects: false
  hide_http_clone_urls: true
  is_gitorious_dot_org: false

crontabの設定

 */10 * * * * cd /var/www/gitorious && /opt/ruby-enterprise/bin/rake ultrasphinx:index RAILS_ENV=production

データベースマイグレーション

rake db:create  RAILS_ENV=production
rake db:migrate  RAILS_ENV=production
rake ultrasphinx:bootstrap  RAILS_ENV=production

起動

sudo service stomp start
sudo service git-daemon start
sudo service git-ultrasphinx start
sudo service mysql start
sudo service sendmail start
sudo service memcached start
sudo su git -c "cd /var/www/gitorious && RAILS_ENV=production /opt/ruby-enterprise/bin/ruby script/poller start && sleep 10"
sudo service apache2 start

はまりポイント

・gemでインストールするプロダクトのバージョンが違うとエラーになる
・gitorious_client_host, gitorious_hostで指定したHostでアクセスしないと正常に処理されない。