WEBサービス創造記

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

GitoriousをDebian6にインストールしたときの覚書

      2013/01/11

インストールをはじめる前に

基本的には公式サイトに載っている手順に従いますが、ダウンロードしたファイルの名前がWikiの記載と違ってたりOSインストール直後はロケールのエラーが出たりしたのでそのへんは調整してます。
Gitorious – DebianSqueezeInstallation – Open wiki – Gitorious

ロケールの設定

ただし、初っ端の`sudo aptitude update`で以下のようなロケール関連のエラーが出た。

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

これには以下の手順で対応する。

$ sudo apt-get install locale
$ sudo dpkg-reconfigure locales
ja_JP.UTF-8 UTF-8を選択

環境変数EDITORの変更

これはお好みで。
Debian6のデフォルトエディタに変nanoが指定されていたのでvimに変更した。

$ sudo update-alternatives --config editor
vimの番号を選択

設定が完了したら改めてアップデート実行。

$ sudo aptitude update

次章よりGitoriousのインストール開始です。

パッケージのインストール

sudo aptitude install build-essential zlib1g-dev libcurl4-openssl-dev apache2 mysql-server mysql-client apg geoip-bin libgeoip1 libgeoip-dev libpcre3 libpcre3-dev zlib1g zlib1g-dev libyaml-dev libmysqlclient-dev apache2-dev libonig-dev zip unzip memcached git-core git-svn git-doc git-cvs libreadline-dev openjdk-6-jre sqlite3 libsqlite3-dev libmagick++3 libmagick++-dev libapache2-mod-xsendfile libxslt2-dev libreadline5
MySQLのrootパスワードを設定するように促されるので応じる。

MySQLの文字コード設定

Gitoriousで日本語を入力する予定があるなら、データベースを生成する前にMySQLの文字コードを設定しておいたほうがいいです。

MySQLの文字化けを解消する

MySQLの文字コードがデフォルトでlatin1だった場合はこれをやっとかないと文字化けするので。

Rubyエンタープライズのインストール

$ cd /tmp
$ wget http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2011.03.tar.gz
$ tar zxf ruby-enterprise-1.8.7-2011.03.tar.gz
$ sudo ruby-enterprise-1.8.7-2011.03/installer
$ cd /opt && sudo ln -s ruby-enterprise-1.8.7-2011.03/ ruby-enterprise
$ sudo ln -s /opt/ruby-enterprise/bin/ruby /opt/ruby-enterprise/bin/rake /opt/ruby-enterprise/bin/gem /usr/local/bin

Sphinxのインストール

最新バージョンをコンパイルする。

$ /tmp
$ wget http://sphinxsearch.com/files/sphinx-2.0.3-release.tar.gz
$ tar zxf sphinx-2.0.3-release.tar.gz && cd sphinx-2.0.3-release
$ ./configure --prefix=/usr/local/sphinx-2.0.3
$ make && sudo make install
$ cd /usr/local && sudo ln -s sphinx-2.0.3 sphinx
$ sudo ln -s /usr/local/sphinx/bin/* /usr/local/bin

Apache ActiveMQのインストール

最新バージョンのバイナリをダウンロードする。
ダウンロードURLは下記から選択してください。
http://www.apache.org/dyn/closer.cgi?path=%2Factivemq%2Fapache-activemq%2F5.5.1%2Fapache-activemq-5.5.1-bin.tar.gz

$ cd /tmp
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache/activemq/apache-activemq/5.5.1/apache-activemq-5.5.1-bin.tar.gz  上記URLで確認したバイナリのパス
$ tar zxf apache-activemq-5.5.1-bin.tar.gz
$ sudo mv apache-activemq-5.5.1 /usr/local
$ cd /usr/local && sudo ln -s apache-activemq-5.5.1 apache-activemq && cd apache-activemq
$ sudo bin/activemq setup /etc/default/activemq && sudo chmod 600 /etc/default/activemq
$ sudo adduser --system --no-create-home --home /usr/local/apache-activemq --shell /bin/bash activemq  
$ sudo chown -R activemq:nogroup /usr/local/apache-activemq-5.5.1

Apache ActiveMQ設定

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

$ sudo vi /etc/default/activemq
ACTIVEMQ_HOME=/usr/local/apache-activemq  この1行をファイルの先頭に追加

ACTIVEMQ_USER="activemq"  ACTIVEMQ_USER=の行をこのように編集する

続いて/usr/local/apache-activemq/conf/activemq.xmlというファイルを編集。
既存のtransportConnectorをコメントアウトしてstompプロトコルを追加する。

$ sudo vi /usr/local/apache-activemq/conf/activemq.xml

        
        
    
___EOD___;
echo htmlspecialchars($code);
?>

Gitorious本体のインストール

Gitoriousのソースを取得

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

Gemをインストール

以下のパッケージをインストールしておく。これらがないとnokogiriというGemのインストールに失敗する。

$ sudo apt-get install libxslt-dev libxml2-dev
cd /var/www/gitorious && /opt/ruby-enterprise/bin/bundle install

起動用スクリプトの生成

ダウンロードしたGitoriousからgit-daemonとgit-ultrasphinxをコピーする。

$ cd /var/www/gitorious/doc/templates/ubuntu
$ sudo cp git-daemon git-ultrasphinx /etc/init.d
$ sudo vi /etc/init.d/git-poller
以下のように記述
#!/bin/sh
# Start/stop the git poller
#
### BEGIN INIT INFO
# Provides:          git-poller
# Required-Start:    activemq mysql
# Required-Stop:  activemq mysql
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: Gitorious poller
# Description:       Gitorious poller
### END INIT INFO

/bin/su - git -c "cd /var/www/gitorious;RAILS_ENV=production script/poller $@"
$ sudo vi /etc/init.d/activemq
以下のように記述
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          activemq
# Required-Start:    $network $local_fs
# Required-Stop:     $network $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop activemq for stomp services.
### END INIT INFO

/usr/local/apache-activemq/bin/activemq "$@"

ログローテート設定

$ sudo cp gitorious-logrotate /etc/logrotate.d/gitorious

起動用スクリプトの起動

権限を付与して起動する。

$ sudo chmod 755 /etc/init.d/git-ultrasphinx /etc/init.d/git-daemon /etc/init.d/git-poller /etc/init.d/activemq

自動起動も設定する。

$ sudo insserv /etc/init.d/git-ultrasphinx /etc/init.d/git-daemon /etc/init.d/git-poller /etc/init.d/activemq

Gitoriousスクリプトのリンクを設置

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

Apache2の設定

Passengerのインストールと設定

$ sudo /opt/ruby-enterprise/bin/passenger-install-apache2-module

上記コマンドでエラーが発生した場合は`sudo /opt/ruby-enterprise/bin/gem install passenger`を実行してからリトライする。

インストールが成功したら”The Apache 2 module was successfully installed.”と出力され、”Please edit your Apache configuration file, and add these lines:”という行の下にPassengerをロードするための設定方法が出力されるのでこれをメモしておく。
今回は以下のように出力された。

   LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
   PassengerRoot /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.18
   PassengerRuby /opt/ruby-enterprise-1.8.7-2011.03/bin/ruby

続いてPassengerをロードするための設定ファイルを作成する。
上記スニペットをそのままこのファイルに貼り付ける。

$ sudo vi /etc/apache2/mods-available/passenger.load
   LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
   PassengerRoot /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.18
   PassengerRuby /opt/ruby-enterprise-1.8.7-2011.03/bin/ruby

モジュールの有効化

Gitoriousに必要なApacheモジュールを有効化する。

$ sudo a2enmod passenger rewrite ssl xsendfile

Gitorious用の設定ファイルを生成

$ sudo vi /etc/apache2/sites-available/gitorious
以下のように記述

        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/gitorious/public

        ErrorLog /var/log/apache2/gitorious-error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/gitorious-access.log combined

        
                XSendFile on
                XSendFileAllowAbove on
        


___EOD___;
echo htmlspecialchars($code);
?>
$ sudo vi /etc/apache2/sites-available/gitorious-ssl


    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/gitorious/public

    ErrorLog /var/log/apache2/gitorious-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/gitorious-ssl_access.log combined

    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

    
            XSendFile on
            XSendFileAllowAbove on
    




___EOD___;
echo htmlspecialchars($code);
?>

デフォルトの設定ファイルを無効化し、上記ファイルを有効化する。

$ sudo a2dissite default default-ssl
$ sudo a2ensite gitorious gitorious-ssl

再起動してApacheの設定を完了。

$ sudo /etc/init.d/apache2 restart

Gitoriousの設定

以下を実行

$ sudo adduser --system --home /var/www/gitorious --no-create-home --group --shell /bin/bash git
$ sudo chown -R git:git /var/www/gitorious
$ sudo su - git
git$ git submodule init
git$ git submodule update
git$ mkdir .ssh
git$ touch .ssh/authorized_keys
git$ chmod -R go-rwx .ssh
git$ mkdir tmp/pids repositories tarballs  tarballs-work
git$ cp config/database.sample.yml config/database.yml
git$ cp config/gitorious.sample.yml config/gitorious.yml
git$ cp config/broker.yml.example config/broker.yml

MySQLにgitユーザを作成

$ mysql -u root -p
mysql> create database gitorious_production;
mysql> grant all privileges on gitorious_production.* to 'git'@'localhost' identified by 'YOUR_PASSWORD';

設定ファイル編集

database.ymlのユーザ名をgitに、パスワードを上記で指定したものに変更し、production以外のセクションは削除する。

git $ vi config/database.yml

gitorious.ymlを編集する。production以外のセクションは削除し、下記の項目を編集すること。

git $ vi config/gitorious.yml
  • gitorious_client_portに80が指定されていること
  • gitorious_host:にサーバのホスト名が正しく指定すること
  • repository_base_path:の値を”/var/www/gitorious/repositories”に変更すること
  • archive_cache_dir:の値を”/var/www/gitorious/tarballs”に変更すること
  • archive_work_dir:の値を”/var/www/gitorious/tarballs-work”に変更すること
  • cookie_secret:の値がランダムな文字列であること。`apg -m 64`というコマンドで生成することができる。
  • hide_http_clone_urlsの値はtrueであること
  • is_gitorious_dot_orgの値はfalseであること

Rails設定

以下のRailsコマンドなどを実行する。

git $ cd /var/www/gitorious
git $ export RAILS_ENV=production
git $ ./bin/bundle exec rake db:create
git $ ./bin/bundle exec rake db:migrate
git $ export PATH=/usr/local/sphinx/bin:$PATH
git $ ./bin/bundle exec rake rake ts:conf
git $ ./bin/bundle exec rake rake ts:rebuild

cronを設定する。

git $ crontab -e
10 * * * * /var/www/gitorious/bin/rake ts:rebuild >/dev/null

デーモンの起動

$ sudo /etc/init.d/git-daemon start
$ sudo /etc/init.d/git-ultrasphinx start
$ sudo /etc/init.d/activemq start
$ sudo /etc/init.d/git-poller start
$ sudo /etc/init.d/apache2 restart

うまくいってれば、この段階でgitorious.ymlのgitorious_hostで指定したホストへアクセスすると、Gitoriousが表示されます。

管理者ユーザの生成

Gitoriousの管理者ユーザを生成します。

$ sudo su - git
git$ env RAILS_ENV=production script/create_admin

作成したユーザでログインできれば完了です。

Rails Consoleでの管理者ユーザ操作

ユーザを削除する場合。

git$ env RAILS_ENV=production script/console
> user = User.find_by_login "Username"
> user.destroy

ロールを削除する場合。

git$ env RAILS_ENV=production script/console
> Role.create!(:name => "Member", :kind => Role::KIND_MEMBER)
> Role.create!(:name => "Administrator", :kind => Role::KIND_ADMIN)

 - Git , , ,