k4200’s notes and thoughts

Programmer side of k4200

Gitorious on Ubuntu

Ubuntu 10.04にGitoriousをインストール

背景

Ubuntu 10.04にGitoriousをインストールした。Gitoriousとは、どうやらGithubみたいなのを構築できるソフトらしい。RoRで出来ている。

勉強がてら作ってるLifthubではgitosisというのを使ってたんだけど、Lifthubのサーバーの移行をする事になったので、せっかくなら違うのを使ってみようと言うことでGitoriousを使う事にした。

自分の作業ログから書き起こしているので、無駄な作業とかがあるかも・・・

環境はUbuntu 10.04。Apacheではなく、nginxと一緒に動作させる。

参考にした情報

こちらのページの内容がかなり参考になって、8割方はそのページの手順でOK。ここでは異なる部分を重点的に説明する。

なお、GitoriousのページにもUbuntuでのインストール手順があるが、Ubuntuのバージョンが違うためあまり参考にならない。

必要なパッケージをインストール

aptitudeで入れるもの

これは、ほぼ先ほどのページ通り。但し、Ruby関連は後から入れ直す羽目になったので、この時点で入れなくても良いはず。

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
sudo aptitude install irb sphinxsearch uuid uuid-dev openjdk-6-jre
ActiveMQのインストール

インストールは解凍するだけ。

$ wget 'http://(適当なミラーサイト)/mirror/apache/dist/activemq/apache-activemq/5.5.0/apache-activemq-5.5.0-bin.tar.gz'
$ sudo tar zxvf apache-activemq-5.5.0-bin.tar.gz -C /usr/local/

設定ファイルは /etc の直下ではなく、/etc/default の下に置く。

$ sudo sh -c 'echo "export ACTIVEMQ_HOME=/usr/local/apache-activemq-5.5.0" >> /etc/default/activemq.conf'
$ sudo sh -c 'echo "export JAVA_HOME=/usr/" >> /etc/default/activemq.conf'

その他細々とした内容。この辺は先ほどのページ通り。

$ sudo adduser --system --no-create-home activemq
$ sudo chown -R activemq /usr/local/apache-activemq-5.5.0/data

/usr/local/apache-activemq-5.5.0/conf/activemq.xml を修正。ここで結構時間がかかった。バージョンによって違うみたいだけど、5.5.0ではとりあえず以下のようにして動いている模様。

        <transportConnectors>
            <transportConnector name="stomp" uri="stomp://127.0.0.1:61613"/>
        </transportConnectors>

起動スクリプトの設定。先ほどのページだと http://launchpadlibrarian.net/15645459/activemq から取得すると書いてあるが、これは不要。配布されてるパッケージにあるスクリプトをそのまま使用。

$ sudo ln -sf /usr/local/apache-activemq-5.5.0/bin/activemq /etc/init.d/
Ruby関連のインストール

Ruby本体はRuby Enterprise Editionというのを入れると良いらしいので、そうする。

$ sudo dpkg -i ruby-enterprise_1.8.7-2011.03_i386_ubuntu10.04.deb

RubyGemsはとりあえず何も考えず最新バージョンを入れたらハマって、1.4.2だと大丈夫だったんで、最初から1.4.2を入れておくといいと思う。ファイルはこの辺からどうぞ。

$ tar zxvf rubygems-1.4.2.tgz
$ cd rubygems-1.4.2/
$ sudo ruby setup.rb

必要なgemのインストール。後の方で何か怒られたらその都度入れればいいや、程度の軽い気持ちで。

sudo gem install -b --no-ri --no-rdoc rmagick chronic geoip daemons hoe \
 echoe ruby-yadis ruby-openid mime-types diff-lcs json rack ruby-hmac rake \
 stompserver passenger rails ultrasphinx mysql

Gitoriousのインストール

nginxのインストール

なお、nginxはaptitudeで普通に入れるバージョンだとダメなので、インストール済みの場合は削除し、passengerに対応したnginxを入れる。インストール先は/opt/nginx。

$ sudo aptitude purge nginx
$ sudo passenger-install-nginx-module

Where do you want to install Nginx to?

Please specify a prefix directory [/opt/nginx]:
(以下略)

Gitoriousは/opt/nginx/html/gitoriousに入れる予定なので、設定ファイル(/opt/nginx/conf/nginx.conf)に以下を追記。

        location / {
            root   html/gitorious/public;
            index  index.html index.htm;
            passenger_enabled on;
        }
Gitoriousのインストール

GitoriousはRuby on Railsで出来ている。以下の通り、最新版ソースを持ってくる。

$ sudo git clone git://gitorious.org/gitorious/mainline.git /opt/nginx/html/gitorious

ユーザーの設定、権限の設定等。

$ sudo adduser --system --home /opt/nginx/html/gitorious/ --no-create-home --group --shell /bin/bash git
$ sudo chown -R git:git /opt/nginx/html/gitorious/

以下、gitユーザーにて。

$ mkdir .ssh
$ touch .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ mkdir tmp/pids
$ mkdir repositories
$ mkdir tarballs
$ cp config/database.sample.yml config/database.yml
$ cp config/gitorious.sample.yml config/gitorious.yml
$ cp config/broker.yml.example config/broker.yml

gitorious.ymlは以下の通り。cookie_secretには、apg -m 64と言うコマンドを実行して、その結果を貼付ける。

production:
  cookie_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  repository_base_path: "/opt/nginx/html/gitorious/repositories"
  gitorious_client_port: 80
  gitorious_client_host: git.example.com
  gitorious_host: git.example.com
  gitorious_user: git
  archive_cache_dir: "/opt/nginx/html/gitorious/tarballs"
  archive_work_dir: "/tmp/tarballs-work"
  hide_http_clone_urls: true
  is_gitorious_dot_org: false
  use_ssl: false
  public_mode: false
  only_site_admins_can_create_projects: true
MySQLデータベースの設定

MySQLの管理者ユーザーでログインして、DB及びユーザーを作成する。

mysql> create database gitorious;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON gitorious.* TO 'gitorious'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> SET PASSWORD FOR 'gitorious'@'localhost' = PASSWORD('secretpassword');
Query OK, 0 rows affected (0.00 sec)
必要なgemがインストールされているかチェック
$ bundle check

不足しているのは以下のコマンドで一発でインストールできる。便利。

$ sudo bundle install
DBのセットアップ

RoRな人にはお馴染みのrakeコマンドで。

$ export RAILS_ENV=production
$ rake db:create
$ rake db:migrate

ちなみに、RubyGemsのバージョンが新しかった時には、以下のエラーが出た。

$ rake db:migrate
(in /opt/nginx/html/gitorious)
rake aborted!
uninitialized constant ActiveSupport::Dependencies::Mutex
/opt/nginx/html/gitorious/Rakefile:10:in `require'
(See full trace by running task with --trace)
各種設定

管理者ユーザーの作成。

$ env RAILS_ENV=production ruby script/create_admin

ultrasphinxの設定?

$ rake ultrasphinx:bootstrap

cronに以下のタスクを追加。

* * * * * cd /opt/nginx/html/gitorious && /usr/local/bin/rake ultrasphinx:index

各種デーモンの起動設定

apache

Apacheは止めちゃいます。

$ sudo /etc/init.d/apache2 stop
$ sudo update-rc.d apache2 disable
nginx

nginxの起動スクリプト /etc/init.d/nginx 内の変数は適宜修正する。自分の場合以下の通り。

PATH=/opt/nginx/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/nginx/sbin/nginx

PS="nginx"
PIDNAME="nginx"                         #lets you do $PS-slave
PIDFILE=$PIDNAME.pid                    #pid file
PIDSPATH=/opt/nginx/logs

DESCRIPTION="Nginx Server..."

RUNAS=root                              #user to run as

SCRIPT_OK=0                             #ala error codes
SCRIPT_ERROR=1                          #ala error codes
TRUE=1                                  #boolean
FALSE=0                                 #boolean

lockfile=/var/lock/nginx
NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"

nginxの起動設定。

$ sudo chmod +x /etc/init.d/nginx
$ sudo update-rc.d -f nginx defaults
git-daemon

/etc/init.d/git-daemon を適宜修正。

#GIT_DAEMON="/opt/ruby-enterprise/bin/ruby /var/www/gitorious/script/git-daemon -d"
GIT_DAEMON="/usr/local/bin/ruby /opt/nginx/html/gitorious/script/git-daemon -d"
LOCK_FILE=/var/lock/git-daemon
#PID_FILE=/var/www/gitorious/log/git-daemon.pid
PID_FILE=/var/run/git-daemon.pid
PID_FILE=/opt/nginx/html/gitorious/log/git-daemon.pid
その他

後は、git-pollerとgit-ultrasphinxが必要。

sudo update-rc.d git-ultrasphinx defaults
sudo update-rc.d git-poller defaults

/etc/init.d/git-poller と /etc/init.d/git-ultrasphinx は適当に修正する。

起動!

多分以下の4つでOK。stompというのは要らない。

$ /etc/init.d/nginx start
$ /etc/init.d/git-daemon start
$ /etc/init.d/git-poller start
$ /etc/init.d/git-ultrasphinx start

長かった・・・