WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Gitoriousのインストール

      2015/06/13

GithubのクローンであるGitoriousをインストールする。

この記事ではUbuntu11.04をOSとして利用する(この記事投稿時点でCentOS向けのドキュメントが古くなっていたため)。

公式ドキュメント

Gitoriousのインストール

管理者権限設定

コマンドの度にsudoを付加するのも面倒なので、管理者権限を取得。

$ sudo su

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

$ apt-get install aptitude
$ 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 libdbd-mysql-ruby libmysql-ruby \
    libmagick++-dev zip unzip memcached git-core git-svn git-doc \
    git-cvs irb

※MySQLのrootパスワードを設定するように促されるので応じる。

Ruby Gemsのインストール

$ REALLY_GEM_UPDATE_SYSTEM=1 gem update --system
$ gem install --no-ri --no-rdoc -v 0.8.7 rake && \
    gem install --no-ri --no-rdoc -v 1.1.0 daemons && \
    gem install -b --no-ri --no-rdoc \
        rmagick stompserver passenger bundler

Sphinx Search Serverのインストール

$ wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz && \
    tar -xzf sphinx-0.9.9.tar.gz && \
    cd sphinx-0.9.9 && \
    ./configure --prefix=/usr && \
    make all install

Gitorious本体のインストール

$ git clone git://gitorious.org/gitorious/mainline.git /var/www/gitorious

Gitoriousスクリプトのシンボリックリンクも生成

$ ln -s /var/www/gitorious/script/gitorious /usr/bin

Gitorious設定

$ cd /var/www/gitorious/doc/templates/ubuntu/ && \
    cp git-daemon git-poller git-ultrasphinx stomp /etc/init.d/ && \
    cd /etc/init.d/ && \
    chmod 755 git-daemon git-poller git-ultrasphinx stomp
$ ln -s /usr/ /opt/ruby-enterprise

Apache設定

Passengerモジュールのコンパイル

$ $(gem contents passenger | grep passenger-install-apache2-module)

上記コマンド実行後に下記のようなメッセージが出力されるので、LoadModule〜の3行をApacheの設定ファイルに追記。

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9
   PassengerRuby /usr/bin/ruby1.8

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
$ vi /etc/apache2/mods-available/passenger.load
   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9
   PassengerRuby /usr/bin/ruby1.8

モジュールの有効化

$ a2enmod passenger && \
    a2enmod rewrite && \
    a2enmod ssl

Apache2のサイト設定

$ vi /etc/apache2/sites-available/gitorious
<VirtualHost *:80>
    ServerName your.server.com
    DocumentRoot /var/www/gitorious/public
</VirtualHost>
<Directory /var/www/gitorious/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
</Directory>

$ vi /etc/apache2/sites-available/gitorious-ssl
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        DocumentRoot /var/www/gitorious/public
        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    </VirtualHost>
</IfModule>

上記2つのファイルを作成したら下記コマンドを実行。

$ a2dissite default && \
    a2dissite default-ssl && \
    a2ensite gitorious && \
    a2ensite gitorious-ssl

Gitorious用のMySQLユーザを生成

$ mysql -uroot -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'gitorious'@'localhost' IDENTIFIED BY '<insert password>' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Gitorious設定

事前に必要なパッケージをインストールしておく。
これらがないとnokogiriというgemがインストールできない。

$ apt-get install libxslt-dev libxml2-dev

パッケージを入れたらbandle installする。

$ cd /var/www/gitorious/ && \
    bundle install
$ 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

Gitoriousの設定ファイル生成

サンプルファイルを基に設定ファイルを生成

$ cp config/database.sample.yml config/database.yml && \
    cp config/gitorious.sample.yml config/gitorious.yml && \
    cp config/broker.yml.example config/broker.yml

設定ファイルを以下のように編集。

  • config/database.ymlのproductionセクションにデータベースのアカウントを設定する
  • config/gitorious.ymlのproductionセクションを適宜編集
    • cookie_secret: この値は正しくない場合、rake実行時に示唆されるので、それを記述すればよし
    • repository_base_path: /var/www/gitorious/repositories
    • gitorious_client_port: 80
    • gitorious_hostはサーバ環境にあわせて編集
    • archive_cache_dir: /var/www/gitorious/tarballs
    • archive_work_dir: /tmp/tarballs-work
    • hide_http_clone_urls: true
    • is_gitorious_dot_org: false

ただし、自分の環境ではgitorious_hostにgit.domain.tldみたいにgitというサブドメインを利用するとエラーが出た。
下記のドキュメントを確認したところ、gitが予約後であることがわかったため、他の適当なサブドメインを利用することにした。

Gitorious – ErrorMessages – Open wiki – Gitorious

Gitoriousデータベース生成

config/boot.rbの先頭にrequire “thread”を追記しておく。

vi config/boot.rb
require 'thread'

マイグレーション実行。

$ export RAILS_ENV=production && \
    bundle exec rake db:create && \
    bundle exec rake db:migrate && \
    bundle exec rake ultrasphinx:bootstrap

Sphinx Cronjob 作成

$ crontab -e 
* * * * * cd /var/www/gitorious && /usr/bin/bundle exec rake ultrasphinx:index RAILS_ENV=production

git-daemon 起動

$ service git-daemon start

Gitoriousのadminユーザ生成

メールアドレスとパスワードの入力を求められるが、Gitoriousのadminアカウントとなるので覚えておく。

$ env RAILS_ENV=production ruby1.8 script/create_admin

サーバ再起動

$ reboot

はまった箇所

基本的には公式ドキュメントに沿ってインストールを行ったが、エラーが発生することがあった。
以下にエラーの内容とその対処法を記す。

rots

“https://github.com/roman/rots.git (at master) is not checked out”というエラーが出る。
Gemfileに記載されている、https://github.com/roman/rots.git が存在しないページであることが原因。

GitHubにアクセスして確認したところ、gitプロトコルのURLは存在しているようなので、Git経由でソースをダウンロードしてローカルでインストール作業を行う。

$ git clone git://github.com/roman/rots.git rots
$ cd rots
$ gem install rots --local

インストールが完了したら、以下のようにGemfileのrotsの行を編集する。

$ vi Gemfile
  gem "rots", "0.2.1"

ultrasphinx

log/production.logに以下のようなログが出現する。

** ultrasphinx: spelling support not available (raspell configuration raised "uninitialized constant Ultrasphinx::Spell::Aspell")

下記URLを参考に対応。
http://cweiske.de/tagebuch/gitorious-spelling-problems.htm

$ aptitude install libaspell-dev
$ gem install raspell
$ sudo /etc/init.d/apache2 restart

Stompserver

ssh公開鍵の登録や新規プロジェクトの生成ができない。
Apacheのエラーログを見ると下記の一行がずらずらと並んでいる。

remote: connect to localhost failed: Connection refused - connect(2)
will retry(#0) in 5 

どうやらStompserverというのが起動していないのが問題らしい。

$ /etc/init.d/stomp start

参考:http://groups.google.com/group/gitorious/browse_thread/thread/16ccd77703d0ab69/e5b42b8732935d56

リポジトリ作成

リポジトリを作成するときに、”This repository is being created, it will be ready pretty soon…”というメッセージが延々とリロードされてリポジトリが作成されない。
git-daemonとgit-pollerが起動していなかったので起動させたら問題なく動作するようになった。

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

その他

ポートは80番はもちろんssl通信に用いる443番も開放しておく必要がある。

 - Git , ,