構成管理/課題管理サーバ構築メモ

2009/10/31追記:「ENV['RAILS_ENV']」のコメント行を有効行にする旨の記述が分かりにくかったので修正。
以下の条件で構成管理/課題管理サーバを構築する手順を文書化して欲しいという要件があったのでザクザクと作業してワシワシとメモしてみた。

  • 諸事情により構築中のサーバ機(マシンA)は直接WWWに接続できない(ただし同じセグメント内にWWWに接続できるマシンあり)。
  • マシンAにはDVDドライブなし。
  • 構築中、マシンAはDHCPIPアドレスを割り当てられる。
  • インストールするソフトウェアは以下のもの。

あくまでもやりかたのサンプルとして書いたものなのでパーティションやらインストールパッケージやら詳細な設定やらは要件にあわせて調整する必要あり。いろいろ適当なので注意。
あと、RedmineSubversionの連携の手順は記していないし、ソフトウェアのバージョンは実施時のもの。
当初はCentOSRubyGemsもLAN内にミラーリポジトリを作って対応しようかと思っていたが、途中で面倒になったので同じセグメント内にあるWWW接続可能なWindowsマシン(マシンB)をプロキシサーバとして使うことにした。

※とあるブログにPassengerの設定でRails側の.htaccessをいじったりdispatch.cgi.exampleをdispatch.cgiにする情報があったが、それだとPassengerではなくCGIやらFastCGIやらで動くことになるのでおかしい。Passengerがちゃんと効いてればそれらの設定は不要なはず。

プロキシサーバの構築

マシンBにて実施。

Delegateのインストール
CentOSインストール時に使うプロキシの設定
  • 以下のような内容のバッチファイルを作成し、起動する。
    • ※インストール時はプロキシ設定できないので明示的にスルーさせる。
C:\delegate\bin\dg9_9_4.exe -P8080 DGROOT="C:\delegate" VARDIR="c:\delegate\var" CACHEDIR="c:\delegate\cache" PERMIT="*:*:*" MOUNT="/* http://ftp.riken.jp/*" ADMIN=user@example.com
CentOSインストール後に使うプロキシの設定
  • 以下のような内容のバッチファイルを作成し、起動する。
    • ※インストール後はプロキシ設定できるので全部プロキシに任せる。
C:\delegate\bin\dg9_9_4.exe -P8081 DGROOT="C:\delegate" VARDIR="c:\delegate\var" CACHEDIR="c:\delegate\cache" PERMIT="*:*:*" RELAY="proxy" ADMIN=user@example.com

構成管理/課題管理サーバの構築

マシンAにて実施。

CentOSのインストール(ネットワークインストール)

※DVDドライブが付いていたり、CD-Rを6枚焼く覚悟があったりする場合は非ネットワークインストールでOK。

  • 以下のイメージをCD-Rに焼く。
  • 対象マシンにLANケーブルを接続する。
  • CD-Rを対象マシンにセットして起動する。
  • 「boot:」と表示されたらEnter。
  • 「Choose a Language」と表示されたら「English」を選択してOKボタンを押す(「Japanese」にした方が後々楽かも)。
  • 「Keyboard Type」と表示されたら「jp106」を選択してOKボタンを押す。
  • 「Installation Method」と表示されたら「HTTP」を選択してOKボタンを押す。
  • 「Configure TCP/IP」と表示されたら以下の設定にしてOKボタンを押す。
[*] Enable IPv4 support
    (*) Dynamic IP configuration (DHCP)
[ ] Enable IPv6 support
  • 「Sending request for IP information for eth0...」などと表示されるのでしばらく待つ。
  • 「HTTP Setup」と表示されたら以下の設定にしてOKボタンを押す。
Web site name: 【マシンBのIPアドレス】:8080
CentOS directory: Linux/centos/5/os/i386
  • 素敵な画面が表示されるのでNextボタンを押す。
  • パーティションの具合を聞かれるので以下の設定にしてNextボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[Remove all partitions on selected drives and create default layout.]
[*] Review and modify partitioning layout
  • 本当に選択したドライブのパーティションを消してよいか聞かれるのでYesボタンを押す。
  • パーティションのデフォルト設定が表示されるのでNextボタンを押す。
  • ブートローダについて聞かれるので以下の設定にしてNextボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[*] The GRUB boot loader will be installed on /dev/hda.
[*] CentOS /dev/VolGroup00/LogVol00
  • ネットワークデバイスについて聞かれるので以下の設定にしてNextボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[*] eth0 DHCP Disabled           ※固定IPの場合は変更すること
[*] automatically via DHCP       ※固定IPの場合は変更すること
  • 地域を聞かれるので以下の設定にしてNextボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[Asia/Tokyo]
[*] System clock uses UTC
  • rootパスワードを聞かれるので以下の設定にしてNextボタンを押す。
Root Password: 【rootパスワード】
Confirm: 【rootパスワード】
  • パッケージを聞かれるので以下の設定にしてNextボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[*] Desktop - Gnome
[*] Customize later
  • インストールするよという画面が表示されるのでNextボタンを押す。
  • インストールが終わるのを待つ。ネットワークの状態によってはたまにエラーが出るがRetryボタンを押すとうまくいく場合が多い。
  • 再起動を促されるのでCD-Rを取り出してRebootボタンを押す。
  • 再起動後「Welcome」と表示されるのでForwardボタンを押す。
  • Firewallの設定が表示されるので以下の設定にしてForwardボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[Disabled]
  • 警告が出るが構わずYesボタンを押す。
  • SELinuxの設定が表示されるので以下の設定にしてForwardボタンを押す。
    • ※以下に明示したもの以外はチェックをつけない。
[Disabled]
  • 警告が出るが構わずYesボタンを押す。
  • 時刻の設定が表示されるので適当に設定してForwardボタンを押す(本来はNTPの設定をすべきだが一旦スルーした)。
  • ユーザアカウントの作成を促されるので以下の設定にしてForwardボタンを押す。
Username: 【一般ユーザ】
Full Name: 【一般ユーザフルネーム】
Password: 【一般ユーザパスワード】
Confirm Password: 【一般ユーザパスワード】
  • サウンドカードの設定を聞かれるので適当にボリュームを小さくしてForwardボタンを押す。
  • Additional CDsと表示されるので何もせずにFinishボタンを押す。
  • 再起動の旨が表示されるのでOKボタンを押す。
  • 再起動後ログイン画面が出るのでrootでログインする(「【一般ユーザ】」を使ってsshでログインして「su -」する形で作業してもよい)。
rootによるリモート接続拒否の設定
  • コンソールで以下のコマンドを実行する。
# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
# vi /etc/ssh/sshd_config
    • ※「PermitRootLogin no」を追記する(yesが有効になってたら上書きする)。
# service sshd restart
yum用のプロキシ設定
  • コンソールで以下のコマンドを実行する。
    • ※ひとまず実験時には個人マシンをプロキシにしたので作業用コンソールのみで実行している。永続的に設定したいなら「yum.conf」でproxy設定したりログインスクリプトに入れたりすること。
    • ※本来http_proxyは「【マシンBのIPアドレス】:8081」形式のようだがyumは「http://」が必要らしい。proxyで設定する場合は「http://」は要るのだが、それと同じ形?
    • ※設定が怪しくなった場合は「yum clean all」できれいにしてから試すこと。
# export http_proxy=http://【マシンBのIPアドレス】:8081/
  • 面倒なので自動アップデートをOFFにしておく。
# service yum-updatesd stop
# chkconfig yum-updatesd off
Ruby/Apache/Subversion/Rails/MySQL/Passenger達のインストール
  • コンソールで以下のコマンドを実行する。
# yum install ruby ruby-devel rdoc

# mkdir /tmp/work
# cd /tmp/work
# wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
# tar xvzf rubygems-1.3.1.tgz
# cd rubygems-1.3.1
# ruby setup.rb

# gem install rails

# yum install gcc-c++ httpd httpd-devel apr-devel openssl-devel

# yum install subversion mod_dav_svn

# yum install mysql-server

# gem install passenger
# passenger-install-apache2-module
    • ※以下のように表示される(環境によって異なる場合がある)。
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5
PassengerRuby /usr/bin/ruby
  • 上記コマンドの最後で表示された文字列を以下のテキストに記載する。
# vi /etc/httpd/conf.d/passenger.conf
Redmineの設定
  • MySQLの設定を行う。
# mv /etc/my.cnf /etc/my.cnf.orig
# cp -p /usr/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf
    • ※「[mysqld]」の末尾に「default-character-set = utf8」を追加。
    • ※「[mysql]」の末尾に「default-character-set = utf8」を追加。
  • MySQLを起動し、設定も常時起動にする。
# /etc/rc.d/init.d/mysqld start
# chkconfig mysqld on
    • ※「chkconfig --list mysqld」で確認できる。
  • MySQLのrootにパスワードを設定し、匿名ユーザを削除する。
# mysql -u root
set password for root@localhost=password('【MySQLのrootのパスワード】');
set password for root@localhost.localdomain=password('【MySQLのrootのパスワード】');
set password for root@127.0.0.1=password('【MySQLのrootのパスワード】');
delete from mysql.user where user='';
quit
    • ※「select user, host, password from mysql.user」で確認できる。
  • MySQLredmine用の設定を追加する。
# mysql -u root -p
    • ※パスワード入力
create database redmine;
grant all on redmine.* to redmine@localhost identified by '【MySQLredmineのパスワード】' with grant option;
quit
  • redmineをインストールする。
# useradd -s /sbin/nologin redmine
# passwd redmine
    • ※【OSのユーザredmineのパスワード】を設定
# chmod 755 /home/redmine

# cd /tmp/work
# wget http://rubyforge.org/frs/download.php/63583/redmine-0.8.5.tar.gz
# tar xvzf redmine-0.8.5.tar.gz

# mv /tmp/work/redmine-0.8.5 /home/redmine/redmine
# chown apache:apache -R /home/redmine/redmine      ※本来はpublicやlogなどに限定した方がよい
# cd /home/redmine/redmine/config
# cp -p database.yml.example database.yml
# vi database.yml
    • ※「production」の部分を以下のように設定。
production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: 【MySQLredmineのパスワード】
  encoding: utf8
  socket: /var/lib/mysql/mysql.sock
# cd /home/redmine/redmine
# rake db:migrate RAILS_ENV="production"
# rake load_default_data RAILS_ENV="production"
    • ※使用言語を聞かれるので「ja」と入力。
    • ※今回は一旦メールサーバ不使用のまま(「config/email.yml」が存在しない状態のまま)としておく。
# cp -p /home/redmine/redmine/config/environment.rb /home/redmine/redmine/config/environment.rb.orig
# vi /home/redmine/redmine/config/environment.rb
    • ※「ENV['RAILS_ENV']」のコメント行を有効行にする。
ENV['RAILS_ENV'] ||= 'production'
  • 暫定的にホスト名を設定する。
# cp -p /etc/sysconfig/network /etc/sysconfig/network.orig
# vi /etc/sysconfig/network
    • ※「HOSTNAME」を「【マシンAのホスト名】」に設定する。
# cp -p /etc/hosts /etc/hosts.orig
# vi /etc/hosts
    • ※「127.0.0.1」の最初に「【マシンAのホスト名】」を追加する。
# /etc/init.d/network restart
    • ※「hostname」で確認できる。
  • ApacheRedmineを設定する。
# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
# vi /etc/httpd/conf/httpd.conf
    • ※「ServerName 【マシンAのホスト名】」を追加する。
    • ※末尾に以下を追加する。
PassengerPoolIdleTime 600
NameVirtualHost *:80

  ServerName 【マシンAのホスト名】
  RailsBaseURI /redmine

# ln -s /home/redmine/redmine/public /var/www/html/redmine
  • Apacheを起動し、設定も常時起動にする。
# /etc/rc.d/init.d/httpd start
# chkconfig httpd on
    • ※「chkconfig --list httpd」で確認できる。
Redmine動作確認
  • クライアントのhostsに対象マシンのIPアドレスを指定して「【マシンAのホスト名】」という名前をつける。
  • 「http://【マシンAのホスト名】/redmine/」でRedmineのトップページが表示されればOK。
    • ※アカウントはadmin/admin。
    • ※現在、最低限の設定としてadmin自身の言語を「Japanese」、タイムゾーンを「Tokyo」にしている。個別に設定したくない場合は別途管理画面でデフォルトの設定等をいじること。
Subversionの設定
# useradd -s /sbin/nologin subversion
# passwd subversion
    • ※【OSのユーザsubversionのパスワード】を設定
# chmod 755 /home/subversion

# cd /home/subversion
# mkdir repository
# svnadmin create /home/subversion/repository/svntest
# chown -R apache:apache /home/subversion/repository/svntest

# cp -p /etc/httpd/conf.d/subversion.conf /etc/httpd/conf.d/subversion.conf.orig
# vi /etc/httpd/conf.d/subversion.conf
    • ※以下の内容で作成。

  DAV svn
  SVNParentPath /home/subversion/repository
  SVNListParentPath On

  Satisfy Any
  Require valid-user

  AuthType Basic
  AuthName "Authorization Realm"
  AuthUserFile /home/subversion/svnpassword
  AuthzSVNAccessFile /home/subversion/svnacl

  • アクセス権限を設定する。
# vi /home/subversion/svnacl
    • ※以下の内容で作成(はてな記法の関係で下記の「*」で始まる行の先頭に半角スペースを入れているが、実際は無いので注意)。
[groups]
manager = admin
cpa = cpauser01,cpauser02
cpb = cpbuser01,cpbuser02

[svntest:/]
 * = rw

[cparepo:/]
@manager = rw
@cpa = rw
 * = r

[cpbrepo:/]
@manager = rw
@cpb = rw
 * = r
  • ユーザを作成する。
# htpasswd -cm /home/subversion/svnpassword admin
    • ※【Subversionのユーザadminのパスワード】を設定
  • Apacheを再起動する。
# /etc/rc.d/init.d/httpd restart
Subversion動作確認
  • クライアントのhostsに対象マシンのIPアドレスを指定して「【マシンAのホスト名】」という名前をつける。
  • クライアントにTortoiseSVNを導入する。
  • TortoiseSVNリポジトリブラウザで「http://【マシンAのホスト名】/svn/svntest/」を開き、admin/passwordでログインしてフォルダ作成が出来ればOK。