install redmine(to centos or ubuntu)

trac에서 좀더 향상된 기능의 redmine은 각종 프로젝트 등을 병행(multiful)진행 할때 유용한 툴이다. 단순 개발뿐만 아니라. 중소규모 회사에서도 따로 비용을 들이지 않고, 업무관리를 할때 유용하다.

여기 나온 방법은 redmine 혹은 그 외 툴들(rubygems)이 버젼업을 할때마다 달라질수 있습니다. 그러니 정도(正道)로 보지 마시고 더 다양한 문서들을 찾아보세요. 여기 인스톨 되는 버젼은 rails 2.3.11에서 작동되는 trunk버젼이다. r2887~r4903버젼의 경우 rails, rack 버젼을 잘 맞추길 바란다.

case : centos 5.5~6

1-1. 일단 centos의 ruby패키지 버젼이 낮으니 1.8.6까지 올려준다. (root 계정)

vi /etc/yum.repos.d/ruby.repo

# i386
[ruby]
name=ruby
baseurl=http://repo.premiumhelp.eu/ruby/
gpgcheck=0
enabled=0

# x86_64
[ruby]
name=ruby
baseurl=http://centos.karan.org/el5/misc/testing/x86_64/RPMS/
gpgcheck=0
enabled=0

yum --enablerepo=ruby install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc

1-2. ruby 1.8.7 를 직접 컴파일 하는 방법도 쓸만하다. (먼저 기존 ruby 패키지들은 지워준다.)

sudo yum install gcc zlib zlib-devel
wget https://rubyforge.org/frs/download.php/74321/ruby-1.8.7-p334.tar.gz
tar xvfz ruby-1.8.7-p334.tar.gz
cd ruby-1.8.7-p334
./configure --enable-pthread
make
sudo make install

직접 소스를 컴파일 할 경우 기본 ruby가 깔리는 경로는 /usr/local/ 이다. .installed.list 를 보면 깔려있는 파일의 전체를 볼수 있다.

2. ImageMagick 를 깔아주는데, centos 패키지버젼이 너무 낮으니 직접 깔아준다.

sudo yum install libjpeg-devel libpng-devel glib2-devel fontconfig-devel zlib-devel libwmf-devel freetype-devel libtiff-devel
sudo yum install ghostscript-fonts #options
wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.6.9-6.tar.gz
tar xvfz ImageMagick-6.6.9-6.tar.gz
cd ImageMagick-6.6.9-6
./configure
make
sudo make install

3. rubygems 을 최신으로 깔아준다.

wget http://production.cf.rubygems.org/rubygems/rubygems-1.7.2.tgz
tar xvfz rubygems-1.7.2.tgz
cd rubygems-1.7.2
ruby setup.rb

4. rails를 깔아준다. 현재 trunk상의 버젼에서는 rails 2.3.11다. (참조 : http://www.redmine.org/wiki/redmine/RedmineInstall)

sudo gem install rails -v=2.3.11
sudo gem install -v=0.4.2 i18n
sudo gem install -v=1.1.0 rack
sudo gem install mysql passenger rmagick

5. redmine 설치 및 셋팅을 해야한다. (설치할 개인계정 test, 도메인 redmine.test.com, 경로 /home/test)

svn co http://redmine.rubyforge.org/svn/trunk redmine

mysql 계정을 만들어주고

create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';
vi redmine/config/database.xml

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password

redmine 기본 DB/세션/데이타 셋팅을 한다.

rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data

redmine 디렉토리 권한 셋팅을 한다.(passenger의 경우 셋팅할 필요없다.)

chmod -R 777 files log tmp public/plugin_assets

일단 WEBBrick으로 테스트를 먼저 해본다. 접근주소는 다음과 같다. http://localhost:3000/ (id/pw = admin)

ruby script/server webrick -e production

6. 추가  환경 셋팅을 한다.
– LOG

cp redmine/config/additional_environment.rb.example redmine/config/additional_environment.rb
vi redmine/config/additional_environment.rb

#Logger.new(PATH,NUM_FILES_TO_ROTATE,FILE_SIZE)
config.logger = Logger.new(config.log_path, 2, 1000000)
config.logger.level = Logger::INFO

– SMTP

cp redmine/config/configuration.yml.example redmine/config/configuration.yml
vi redmine/config/configuration.yml

default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: localhost
      port: 25
      domain: redmine.test.com

7. apache + passenger

cp redmine/public/dispatch.cgi.example redmine/public/dispatch.cgi
chmod 755 public/dispatch.cgi
vi config/environment.rb

ENV['RAILS_ENV'] ||= 'production' #uncomment (remove #)
sudo vi /etc/httpd/host.d/00_redmine.test.com.conf

<VirtualHost *:80>
    ServerName redmine.test.com
    DocumentRoot /home/test/redmine/public/
    ErrorLog logs/redmine.test.com-error_log
    CustomLog logs/redmine.test.com-access_log common env=!DoNotLog
    <Location "/home/test/redmine/public">
        AllowOverride all
        Options -MultiViews
    </Location>
# use 'autocreate svn repository'
#    <Location "/sys">
#        Order deny,allow
#        Allow from ip.of.my.svn.server #change this
#        Deny from all
#    </Location>
</VirtualHost>

apache와 rails를 연결할 passenger gem을 깔도록 한다.

sudo gem install passenger
sudo passenger-install-apache2-module
sudo vi /etc/httpd/conf.d/passenger.conf

LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-x.x.xx/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-x.x.xx
PassengerRuby /usr/local/bin/ruby

passenger-install-apache2-module를 깔때의 나오는 메세지대로 apache모듈을 설정해주면 된다. passenger가 업그레이드 되면 알맞게 그때그때마다 버젼을 수정해야 할듯 하다.
일단 여기까지는 웹서버에 올리는 것이 완료된다. 도메인상으로 확인하여 문제점을 찾아봐야 한다.

8. subversion 연결 및 인증 설정

yum install mod_dav_svn mod_perl perl-Digest-SHA1 perl-DBD-mysql perl-Apache-DBI

일단 http://redmine.test.com/svn 으로 접속하게 설정

sudo vi /etc/httpd/cond.f/00_redmine.test.com.conf

    <Location "/svn">
       DAV svn
       SVNParentPath /home/test/svn
       SVNListParentPath on
    </Location>

일단 http://redmine.test.com/svn 으로 확인해본다. 그리고 subversion 인증을 이용하자.
현재 centos 5.4 패키지에서는 perl-Apache-DBI가 없으므로 직접 구해서 깐다.(있다면 다음으로 넘어가자)

wget http://packages.sw.be/perl-Apache-DBI/perl-Apache-DBI-1.08-1.el5.rf.noarch.rpm
sudo rpm -Uvh perl-Apache-DBI-1.08-1.el5.rf.noarch.rpm
sudo ln -s redmine/extra/svn/Redmine.pm /usr/lib/perl5/vendor_perl/5.8.8./Apache/

그리고 Location “/svn”을 수정한다.

sudo vi /etc/httpd/host.d/00_redmine.test.com.conf

    PerlLoadModule Apache::Redmine
    <Location "/svn">
        DAV svn
        SVNParentPath /home/test/svn/
        Order deny,allow
        Deny from all
        Satisfy any

        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
        AuthType Basic
        AuthName 'Redmine subversion repository'

        #read-only access
        <Limit GET PROPFIND OPTIONS REPORT>
            Require valid-user
            Allow from ip.of.my.svn.server
            Satisfy any
        </Limit>
        # write access
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>

        RedmineDSN "DBI:mysql:database=redmine;host=localhost"
        RedmineDbUser "redmine"
        RedmineDbPass "my_password"
    </Location>

일단 이렇게 설정하고 테스트 해보자. redmine계정상 권한에 따라 checkout은 가능하나 commit을 할경우 아이디/비번을 요구하게 된다. 일단 설정완료 되었다. 그런데 non-member, anonymous를 ‘저장소 보기’ 권한등을 빼도 repository를 보는게 가능한데 이게 맞는지는 좀 생각해봐야겠다.

9. create repository or autocreate 설정

mkdir svn

redmine에는 repository를 쉽게 생성해서 redmine에 등록할수 있는 명령어 extra/svn/reposman.rb가 있다. 프로젝트 생성후, 다음과 같은 명령어로 svn repository를 생성할수 있다. 도메인과 경로등에 주의하자. APIKEY는 redmine.test.com 사이트 들어가서 Administration → Settings → Repository 에서 Enable WS 하고 APIKEY를 만들어준자. 이렇게 해주면 알아서 svn폴더에 알아서 repository가 생긴다.

sudo redmine/extra/svn/reposman.rb --redmine redmine.test.com --svn-dir /home/test/svn -k APIKEY --owner test --url file:///home/test/svn --verbose
sudo chgrp -R apache svn
sudo chmod -R g+w svn

7번 웹 셋팅에서 Location “/sys” 부분의 주석을 빼고 위의 구문을 script로 구성해서 root cron으로 등록해두면 프로젝트에 맞게 자동으로 repository를 구성한다. repository 생성 빈도가 낮다면 굳히 cron에 등록할 필요는 없을듯 없다.

case : ubuntu

솔직히 제일 편한 방법은 다음과 같이 깔아주는 것이다.

sudo apt-get install redmine redmine-mysql

그렇지만, 일단 redmine 최신버젼을 사용할수가 없고, 어떻게 셋팅되었는지 모르겠다. 그래서 centos경우 처럼 깔기로 한다. (그리고 rubygems을 이용하면 ubuntu패키지 버젼보다 빠르기 때문에 유용하다. ruby rails의 경우에는 리눅스 배포본 패키지를 이용하는 것보다 rubygems등을 이용하는게 좋다.)

1. ruby 최신버젼을 인스톨한다.

sudo aptitude install ruby irb rdoc ri libopenssl-ruby ruby1.8-dev build-essential
sudo apt-get install libmysqlclient-dev # for mysql gem

2. ImageMagick 최신버젼을 인스톨한다.

sudo apt-get install imagemagick libmagick9-dev

3. 4. 5. 6. centos 5.4 부분과 동일

gem을 못찾겠으면 다음과 같이 심볼릭 링크를 만들어준다.

ln -s /usr/bin/gem1.8 /usr/bin/gem

단 webrick 실행시 다음과 같이 warning이 나오면

/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement

다음을 119번째줄을 수정해준다.

vi /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb

r = version_requirements → r = super

7. apache + passenger

cp redmine/public/dispatch.cgi.example redmine/public/dispatch.cgi
chmod 755 public/dispatch.cgi
vi config/environment.rb

ENV['RAILS_ENV'] ||= 'production' #uncomment (remove #)
sudo vi /etc/apache2/sites-available/test

<VirtualHost *:80>
    ServerName redmine.test.com
    DocumentRoot /home/test/redmine/public/
    ErrorLog logs/redmine.test.com-error_log
    CustomLog logs/redmine.test.com-access_log common env=!DoNotLog
    <Location "/home/test/redmine/public">
        Options Indexes ExecCGI FollowSymLinks
        Order allow,deny
        Allow from all
        AllowOverride all
    </Location>
# use 'autocreate svn repository'
#    <Location "/sys">
#        Order deny,allow
#        Allow from ip.of.my.svn.server #change this
#        Deny from all
#    </Location>
</VirtualHost>

sudo a2ensite test

passenger를 깔도록 한다.

sudo apt-get install libcurl4-openssl-dev libssl-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
sudo gem install passenger
sudo passenger-install-apache2-module
sudo vi /etc/apache2/mods-available/passenger.load

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so

sudo vi /etc/apache2/mods-available/passenger.conf

PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.0
PassengerRuby /usr/bin/ruby1.8

a2enmod passenger
a2enmod rewrite

passenger-install-apache2-module를 깔때의 나오는 메세지대로 apache모듈을 설정해주면 된다. passenger가 업그레이드 되면 알맞게 그때그때마다 버젼을 수정해야 할듯 하다.
일단 여기까지는 웹서버에 올리는 것이 완료된다. 도메인상으로 확인하여 문제점을 찾아봐야 한다.

8. subversion 연결 및 인증 설정

sudo aptitude install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl libapache2-mod-perl2

일단 http://redmine.test.com/svn 으로 접속하게 설정

sudo vi /etc/apache/sites-available/test

    <Location "/svn">
       DAV svn
       SVNParentPath /home/test/svn
       SVNListParentPath on
    </Location>

일단 http://redmine.test.com/svn 으로 확인해본다. 그리고 subversion 인증을 셋팅 및 이용해보자.
참조 문서 : http://www.redmine.org/wiki/redmine/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl

sudo mkdir /usr/lib/perl5/Apache;mkdir /usr/lib/perl5/Apache/Authn;
sudo ln -s redmine/extra/svn/Redmine.pm /usr/lib/perl5/Apache/Authn
sudo vi /etc/apache2/sites-available/test
     PerlLoadModule Apache::Authn::Redmine
     <Location "/svn">
         DAV svn
         SVNParentPath /home/test/svn/
         Order deny,allow
         Deny from all
         Satisfy any
         PerlAccessHandler Apache::Authn::Redmine::access_handler
         PerlAuthenHandler Apache::Authn::Redmine::authen_handler
         AuthType Basic
         AuthName 'Redmine subversion repository'
         #read-only access
         <Limit GET PROPFIND OPTIONS REPORT>
             Require valid-user
             Allow from ip.of.my.svn.server
             Satisfy any
         </Limit>
         # write access
         <LimitExcept GET PROPFIND OPTIONS REPORT>
             Require valid-user
         </LimitExcept>
         RedmineDSN "DBI:mysql:database=redmine;host=localhost"
         RedmineDbUser "redmine"
         RedmineDbPass "my_password"
     </Location>

일단 이렇게 설정하고 테스트 해보자. redmine계정상 권한에 따라 checkout은 가능하나 commit을 할경우 아이디/비번을 요구하게 된다. 일단 설정완료 되었다. 그런데 non-member, anonymous를 ‘저장소 보기’ 권한등을 빼도 repository를 보는게 가능한데 이게 맞는지는 좀 생각해봐야겠다.

9. centos 부분이랑 같다.
단 프로젝트당 자동으로 svn이 생성되는 것이 좋지 않다면 다음의 스크립트로 필요한 프로젝트만 생성해서 들록해서 사용한다.

vi create_svn_repository.sh

#!/bin/sh
if [ -z $1 ]; then
  echo "Usage: $0 [project]" 1>&2
  exit 1
fi
PATH=/home/test/svn/$1
/usr/bin/svnadmin create $PATH
/usr/bin/sudo chgrp -R www-data $PATH
/usr/bin/sudo chmod -R g+w $PATH

이상과 같다. 유용한 플러그인으로는 코드의 highlight기능을 위한 Ultraviolet Syntax Highlighting Engine , 접근 통계를 위한 Google Analytics plugin 등이 유용하다.