RedmineをCentOSにインストールする

Redmine

プロジェクト管理ツールRedmine3.3をCentOS7.2にインストールし、バージョン管理ツールと連携する手順
2017/1/5 SELinux設定に追記 ( 幾つかのディレクトリのパーミッションを変更 )

はじめに

Redmine はオープンソースのプロジェクト管理ソフトウェアです。
IT系のシステム/プログラム開発に限らず、様々なプロジェクトで利用する事が可能です。
「Redmine って何?」という方は Redmineとは - Redmine.JP あたりを参照ください。
Redmine.jp で デモサイト を公開しています。試しに使ってみたい方はこちらをどうぞ。

弊社ではプロジェクト管理ツールとして Redmine ベースの ALMinium を利用しているのですが、ALMinium はここ二年ほど更新が行われていません。
最新の Redmine にアップグレードできない状態になっていたのですが、ここ最近最新の Redmine で環境を再構築する作業を行っています。

最終的には他ツールとの連携も視野に入れていたりするのですが、Redmineのインストールに関してはある程度形になったので導入手順を書いておきます。

なぜプロジェクト管理ソフトウェア導入するのか

プロジェクト管理ソフトウェアを利用していない、あるいは、活用できていない場合に見かける ( 私が見かけた ) 問題点をあげてみます。

プロジェクト管理してない

プロジェクト管理してない場合があります。してるつもりはあっても出来てない、機能してない場合も含む。
管理者 ( PM、PMO ) に問題がある場合等も多いかと思いますが、自分がもしプロジェクトに関わっている場合には被災する可能性が高いです。

被災しない状況にする方がよいでしょう。機能的なツールがその役目を多少なりとも負ってくれる事があります。
プロジェクトでツールを利用していない場合でも、自分 ( 及び、チーム ) は利用可能にしてしまう事で、被災を軽減してくれた事があります。

管理がExcel

「Excel だってプロジェクト管理ツールだ」という方もいるかもしれません。
確かにプロジェクト管理用のテンプレート等があり、実際 Excel で管理している場合もあるかもしれませんし、プロジェクトの規模や種類によっては Excel で足りる場合もあるでしょう。
但し、一定規模を超えるプロジェクトにおいては Excel では問題がある場合が多いのではないかと思います。
実際 Excel をプロジェクト管理に利用している現場で以下のようなケースを見てきました。

変更に弱い

Excel でタスク管理、及び、ガントチャート ( もどき ) を作成しているところがあったのですが、変更に弱いです。

PM、PMO がガントチャート修正に丸一日 ( 以上 ) かけて、「ガントチャート修正が仕事かよ!?」みたいな事も ...

計画だけ立てておしまいといった場合ならば別ですが、通常プロジェクトを進める上で変更はつき物です。

Redmine を利用する場合、タスク ( Redmine ではチケットと呼ぶ ) に期間を設定する事でガントチャートも自動生成されます ( 当然期間を変更すれば反映される ) 。

チケット間の関連付けを行う事で、任意のチケットが遅延した場合に後続チケットも自動的にスケジュールを調整させるといった事も可能です。
万能かと言えばそうではありませんが、Excel を利用する場合よりは変更に強いと言えるでしょう。

変更されなくなる

上記 "変更に弱い" 事は、スケジュールや進捗状況が変更されない=管理されない事態を引き起こします
実際進捗が数か月も遅延しているにも関わらず WBS やガントチャートが修正されない=正しく管理されない状態に陥ったプロジェクトを見た事があります。

変更内容の把握が困難

Excelの場合最新 ( 現在 ) の状態を見る事はできますが、プロジェクトやタスクの変更 ( 例えばあるタスクの期日が変更になった場合等の ) 履歴を管理したい場合、こういった履歴を明示的に記載するか、過去のExcelとの差分を比較する必要があります。
Redmine を利用すれば、チケットの変更履歴は自動で記録/表示されます

複数メンバーでの利用に難点

Excel はデフォルトでは複数人数での同時編集ができません。( 後から開いた人は読み取り専用になる )
同時編集する方法もありますが、同じ箇所を編集してしまった場合にはマージ作業が必要になります。

Redmine はWebアプリケーションであり複数人で同時編集が可能です。
場合によっては一つのチケットを複数人で同時編集してしまう可能性もありますが、誰が何を変更したかの記録が残っているためExcelを利用する場合と比べて確認/調整が容易です。

Webアプリケーションであるため、ホスティングの方法にもよりますが、遠隔地のメンバーと共同利用する事も可能です。

タスクを忘れる

Excelを利用している場合もそうですが、「タスクを忘れた!」という事がよくあります。

Redmine ではタスクに担当者を割り当てる事が可能であり、自分に割り当てられたタスク ( で未完了のもの ) は簡単に確認する事が可能です。
また、自分が関わっているプロジェクトのタスクやウォッチしているタスクに変更があった場合にメール通知を行う事も可能です。

状態の把握が容易

Redmine では各チケットをステータスや担当者などの条件で検索 ( Redmineではフィルタと呼ぶ ) する事が可能です。
チケット一覧画面だけでなくガントチャート画面でもフィルタは可能であるため、自分が担当するタスクだけのガントチャート表示等も容易に行えます。

実績の記録も可能

Redmine には作業工数を記録・集計する機能もあります。
予定工数も記録できるため ( 予定工数は集計できない )、予実管理に利用する事も可能です。

各種プラグインによる機能強化

今回記事ではバージョン管理システムとの連携プラグインを導入していますが、これ以外にも多くのプラグインが存在します。
但しバージョンによってサポートされなくなる可能性などもあります。


色々書きましたがプロジェクト管理に問題がある場合、Redmine 導入で全て解決するとは言いませんが、改善につなげる事はできるかもしれません。

※ツールを利用してもダメな場合・人はある・いるので、ツールを入れたから万事解決するという訳ではありません。

環境

環境は以下

移行前

OSCentOS6.8
Redmine2.2.4
DBMySQL 5.1.73
Ruby1.9.3
Apache2.2.15

移行後

OSCentOS7.2
Redmine3.3.1
DBMariaDB 5.5.50
Ruby2.3.3
Apache2.4.6

Redmine は Ruby (Rails) 上で動作しますが、これらのバージョンも適宜更新します。

※Redmine のシステム要件は RedmineInstall - Redmine を参照

移行するもの

既存のALMiniumは以下の機能をサポートしているので、これら機能の移行を目指す。

  • Redmineベース
    ALMiniumではバージョン2系を利用
  • 各種バージョン管理ツールとの連携
    Subversion, Git 等。プラグインによりプロジェクト生成時にリポジトリも生成される。
  • 複数の便利なプラグインがインストール済み
    上記バージョン管理ツールとの連携用プラグインの他、コードレビューやアジャイル開発向けのBacklogsプラグイン等
  • LDAP認証
    LDAP認証自体はRedmineで標準サポートしているが、バージョン管理ツールの認証もRedmineと統合
  • Jenkins入り
    これは後から連携でもいいと思ってる

今回は Redmine を最新版にするのと、バージョン管理ツール (Subversion) と連携する手順を示します。

※GitはGitlabとの連携を考えているので省く。

Redmineインストール手順

以下導入手順を示します。

開発ツールのインストール

Gemのビルド/インストール等で必要となるライブラリ群を先にインストールしておきます。

# yum groupinstall "Development Tools"
# yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel

MariaDBのインストール

Redmine では PostgreSQL も利用できますが、ALMinium が MySQL を利用していた事もあり、移行のしやすさも踏まえて MariaDB を利用します。

  1. yum でインストールします。
    # yum install mariadb-server mariadb-devel
    
  2. my.cnf を設定します。
    # vi /etc/my.cnf
    

    以下を追記(抜粋)

    [mysqld]
    character-set-server=utf8
    ...
    [mysql]
    default-character-set=utf8
    
  3. サービスの自動起動設定、及び、起動
    # systemctl enable mariadb
    # systemctl start mariadb
    
  4. Redmine用データベースの作成
    # mysql
    MariaDB [(none)]> create database データベース名 default character set utf8;
    MariaDB [(none)]> grant all on データベース名.* to ユーザ名@localhost identified by 'パスワード';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> exit
    
  5. mysql_secure_installation の実行
    必要に応じて mysql_secure_installation を実行してください。
    # mysql_secure_installation
    

ImageMagic のインストール

ImageMagic は添付ファイルのサムネイル作成、ガントチャートの画像ファイルでのエクスポート等に利用されます。
これら機能が不要であればインストールしなくても構いません。

# yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts

Subversion のインストール

  1. yum でインストールします( apache も )。
    # yum install subversion httpd
    

    apache は 2.4 系 (2.4.6) です。

  2. リポジトリのルートディレクトリを作成します。/var/opt/svn に作成するものとします。
    # mkdir /var/opt/svn/
    # chown apache:apache /var/opt/svn/
    

Rubyのインストール

CentOS7 の標準の yum リポジトリでは2.0ですが、2.3をインストールします。

rbenv を利用します。

  1. rbenv を git clone します。
    # git clone https://github.com/sstephenson/rbenv.git usr/local/src/rbenv
    # git clone https://github.com/sstephenson/ruby-build.git usr/local/src/rbenv/plugins/ruby-build
    

    git 未インストールの場合、先に yum install git でインストールしてください。

  2. rbenv 設定用スクリプトの作成
    # vi /etc/profile.d/rbenv.sh
    

    以下で作成

    export RBENV_ROOT="/usr/local/src/rbenv/"
    export PATH="${RBENV_ROOT}/bin:${PATH}"
    eval "$(rbenv init -)"
    
  3. スクリプトの実行
    # source /etc/profile.d/rbenv.sh
  4. ruby 2.3.3 のインストール
    インストール後、システムグローバルで利用するバージョンも指定します。
    # ebenv install 2.3.3
    # rbenv global 2.3.3
    
  5. バージョン確認
    # ruby -v
    

bundler インストール

# gem install bundler

Redmineのインストール

/opt/redmine 以下にインストールするものとします。

Redmine の取得

svn コマンドでチェックアウトします。

# svn co http://svn.redmine.org/redmine/branches/3.3-stable /opt/redmine

DB設定

config ディレクトリ以下に設定を記載します。
database.yml.example というサンプルがあるので、これをコピー/リネームして編集する形でもよいでしょう。

# vi /opt/redmine/config/database.yum

以下で作成。先に作成したMariaDBの設定に併せて、適宜変更します。

production:
  adapter: mysql2
  database: データベース名
  host: localhost
  username: ユーザ名
  password: "パスワード"
  encoding: utf8

メールサーバ設定

configuration.yml にメールサーバ ( 通知メールの送信先 ) の設定を記述します。

configuration.yml.example に例があるので、これに従えばOKです。
( メールサーバ以外の設定も含まれます )

# vi /opt/redmine/config/configuration.yml

以下で作成
以下は一例です。利用しているメールサーバの設定に併せて適宜変更してください。

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: "mail.sample.com"
      port: 587
      domain: "sample.com"
      authentication: :plain
      user_name: "ユーザ名"
      password: "パスワード"

バージョン管理ツール設定

scm.yml に設定を行います。

# vi /opt/redmine/config/scm.yml

以下で作成。
Path にリポジトリの ( ルート ) パスを設定します。

production:
   auto_create: true
   deny_delete: true
   allow_add_local: true
   svn:
     path: /var/opt/svn
     svnadmin: /usr/bin/svnadmin
     url: ", http(s)://ホスト名/svn"
   git:
     path: /var/opt/git
     git: /usr/bin/git
     options: --bare
     url: ", http(s)://ホスト名/git"
   mercurial:
     path: /var/opt/hg
     hg: /usr/bin/hg
     url: ", http(s)://ホスト名/hg"

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

Redmine で必要となる Gem パッケージをインストール。

# cd /opt/redmine
# bundle install --without development test --path vendor/bundle

※root で実行すると警告が出るが続行する。

以下メッセージが出力され処理完了すればOK

Bundle complete! 31 Gemfile dependencies, 56 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into ./vendor/bundle.

※ImageMagick をインストールしていない場合、Rmagik は除外する。( 以下例 )
bundle install --without development test rmagick

※データベースの種類を変更した場合等は、再実行が必要 ( database.yml の設定に応じた gem がインストールされるため )

セッションストア秘密鍵生成

# bundle exec rake generate_secret_token

データベーススキーマ生成

データベースにテーブルが作成されます。

# RAILS_ENV=production bundle exec rake db:migrate

デフォルトデータのロード

# RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

Passenger のインストール

Phusion Passenger をインストールします。

  1. # gem install passenger --no-rdoc --no-ri
    
  2. apache2のモジュールをインストール
    # passenger-install-apache2-module --auto
    
  3. apache 設定に記述する内容を確認
    # passenger-install-apache2-module --snippet
    LoadModule passenger_module /usr/local/src/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
      PassengerRoot /usr/local/src/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.0.30
      PassengerDefaultRuby /usr/local/src/rbenv/versions/2.3.3/bin/ruby
    </IfModule>
    

パーミッションの設定

apache ユーザに所有権を変更します。

# chown apache:apache /opt/redmine -R

ファイアウォール設定

httpアクセスを許可します。

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --reload

Apache 設定

redmine用の設定ファイルを作成します。

# vi /etc/httpd/conf.d/redmine.conf

以下で作成

LoadModule passenger_module /usr/local/src/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/src/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/passenger-5.0.30
  PassengerDefaultRuby /usr/local/src/rbenv/versions/2.3.3/bin/ruby
</IfModule>

DocumentRoot "/opt/redmine/public"

Header always unset "X-Powered-By"
Header always unset "X-Runtime"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
# PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
PassengerFriendlyErrorPages off

<Directory "/opt/redmine/public">
    Require all granted
</Directory>

※当初 Redmine.jpのインストールドキュメント Redmine 3.2をCentOS 7.1にインストールする手順 を参考にPassengerの設定も記載してみたのだが、ここに記載がある以下設定を行うとRewriteが正しく動かなくなる罠があり、Apache 経由で Subversion アクセスできない(パイパスされる)問題が発生する。

Redmineをインストールするapacheでsubversionもホストする場合、この設定を記載してはいけない。
( かなり嵌った orz )

PassengerHighPerformance on

参考 :

※Subversion と Redmine を連携しない場合、以下はとばしてOKです。Redmineの実行に進んでください。

Subversionの設定

Subversion も Apache ( http ) 経由でアクセス可能とする。
この際、以下機能の実現を目指します ( 共に ALMinium では実現されていた )。

  • Subversion アクセス時の認証を Redmine と同じにする
    ( LDAP 認証も含む )
  • Redmine のプロジェクト生成時に Subversionのリポジトリも作成されるようにする

モジュールのインストール

SubversionとRedmineの認証を統合するためにPerlモジュールが必要となるためこれらをインストールします。

  1. 必要なパッケージのインストール
    Redmine.pm用、LDAPモジュール用 など
    # yum install mod_dav_svn mod_perl perl-Digest-SHA1 perl-DBI perl-DBD-mysql
    # yum install perl-LDAP perl-Params-Validate perl-Module-Runtime perl-Module-Implementation perl-Class-Accessor perl-Class-Data-Inheritable perl-Crypt-PasswdMD5 perl-Test-Simple
    
  2. epel testing から Auth::Simple モジュールをインストール
    # yum --enablerepo=epel-testing install perl-Authen-Simple
    
  3. CPANのインストール
    # yum install perl-CPAN perl-YAML
    
  4. Authen::Simple::LDAP モジュールのインストール
    # perl -MCPAN -e shell
    cpan[1]> o conf prerequisites_policy follow
    cpan[2]> o conf commit
    cpan[3]>  install Authen::Simple::LDAP
    
  5. Subversion-Redmine連携に必要となる Redmine.pm は Redmineのインストールディレクトリに含まれているのでこれを利用します。
    # mkdir /etc/httpd/Apache/Authn -p
    # cp /opt/redmine/extra/svn/Redmine.pm /etc/httpd/Apache/Authn
    

    上ではコピーしていますが、今後Redmineをアップデートする可能性がある場合を考えて、シンボリックリンクを張る形でもよいでしょう。

Apache 設定

Subversion を Apache 経由でホストするための設定を行います。

# vi /etc/httpd/conf.d/vcs.conf

以下で作成

PerlLoadModule Apache::Authn::Redmine
PerlLoadModule Authen::Simple::LDAP
<Location /svn/>
    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    DAV svn
    SVNParentPath /var/opt/svn
    SVNListParentPath on
    AuthzSVNAccessFile /etc/opt/svn/svnauthz

    AuthType Basic
    AuthName Subversion

# for Redmine Authentication
    RedmineDSN "DBI:mysql:database=データベース名;host=localhost"
    RedmineDbUser "DBユーザ名"
    RedmineDbPass "DBパスワード"

    Require valid-user
</Location>

/etc/opt/svn/svnauthz は以下。ALMinium時の設定を流用。

# Group settings
[groups]
#developer=harry,sarry
#observer=john,greg

# Common settings (for all projects)
[/]
admin = rw
* = rw
guest = r

# Settings for SampleProject
[SampleProject:/]
guest = rw
#@developer = rw
#@observer= r

# Settings for the (specified) path
#[SampleProject:/tags]
#* = r
#admin = rw

プラグインのインストール

SCM Creator

Redmine プロジェクト作成時に Subversion リポジトリを作成可能とする SCM Creator プラグイン を導入します。

プラグインの取得

# cd 適当なディレクトリ
# wget http://projects.andriylesyuk.com/attachments/download/563/redmine_scm-0.5.0b.tar.bz2

展開/インストール

# tar xvjf redmine_scm-0.5.0b.tar.bz2
# mv redmine_scm /opt/redmine/plugins/redmine_scm
# chown apache:apache /opt/redmine/plugins/redmine_scm -R

データベースのマイグレーション

プラグインに併せてDBをマイグレーションします。

# rake redmine:plugins:migrate RAILS_ENV=production

上記で行けるはずですが、私の環境では NG だったので、エラーメッセージに従い以下のようにしました。

# bundle exec rake redmine:plugins:migrate RAILS_ENV=production

が、別のエラー uninitialized constant ActiveRecord::Observer が発生。
Rails4ではObserverが削除されたために発生した問題らしいため以下を実施

Gemfile.local を作成

# vi /opt/redmine/Gemfile.local

以下で作成後、bundle exec rake redmine:plugins:migrate ... を再実行して解決。

gem "rails-observers"

Redmineの実行

Apache を起動すれば Redmine が実行されます。

# systemctl enable httpd.service
# systemctl start httpd.service

Webブラウザでアクセスすれば Redmine を利用できます。

ログイン

初期の管理者アカウントは以下です。

idadmin
passwordadmin

上記アカウントでログインするとパスワード変更を要求されるので適当なパスワードを設定して下さい。

日本語関連設定

  1. メニューから [管理]>[設定] をクリック。
  2. [表示] タブをクリック。
  3. 以下プロパティを設定。
    デフォルトの言語Japanese
    ユーザー名の表示書式Admin Redmine

LDAP認証設定

※LDAP, Subversion を連携しない場合、SELinux設定へ進んでください。

  1. メニューから [管理]>[LDAP認証] をクリック。
  2. [新し認証方式] リンクをクリック。
  3. 以下プロパティを設定し、[作成]ボタンをクリック。
    名称適当な名前
    ホストLDAPサーバのアドレスorホスト名
    ポート番号通常 389
    検索範囲例) ou=Users,dc=sample,dc=local
    併せてユーザーを作成初回LDAP認証(ログイン)時、Redmineユーザを作成する場合はチェック。通常はチェックするはず。
    ログイン名属性uid
    名前属性givenName
    苗字属性sn
    メール属性mail

    ※上記設定はそれぞれの環境に応じて適宜変更してください。

  4. 実際のLDAPユーザアカウントでログインできればOK

Subversion リポジトリの作成

SCM Creator プラグインの確認

先にインストールしたプラグインが認識されているか確認します。

  1. メニューから [管理]>[プラグイン] をクリック。
  2. SCM Creator プラグインが表示されていればOK。

プロジェクトの作成

  1. メニューから [プロジェクト] をクリック。
  2. [新しいプロジェクト] リンクをクリック。
  3. SCM Creator プラグインを導入している場合、プロジェクト作成画面に [SCM] 欄が表示されるので、ここで "Subversion" を選択する。
    ( モジュール で "リポジトリ" がチェックされている事 )
  4. プロジェクトの "名称"、及び、"識別子" を入力し [作成] ボタンをクリック。
    ここで "識別子" に指定した名前がリポジトリ名となる。
    たとえば test とした場合、今回記事の設定であれば、http://hostname/svn/test が作成したプロジェクトのリポジトリURLになる。

メンバー設定

  1. 作成したプロジェクトに、適当なLDAPユーザを追加する。
    プロジェクト作成後、プロジェクトの設定画面で [メンバー] タブをクリックする。
  2. [新しいメンバー] をクリックする。
  3. 新しいメンバー画面が表示されるので、適当なLDAPユーザを追加する。
    LDAPユーザが表示されない場合、適当なLDAPユーザでログインしてから再試行する。
  4. Eclipse(SVNプラグイン), TortoiseSVN等のSubversionクライアントで、作成したリポジトリに接続する。追加したユーザで認証が行われればOK。 アクセス権のないユーザにおける動作検証などは必要に応じて行ってください。

SELinux 設定

SELinux が有効の場合、Redmine を動作させるうえで問題が発生します。
対応としては

  • SELinuxを無効にする
    この手順で説明される事が多い。但し、非セキュア
  • Redmineが動作するようにSELinuxを設定する
    今回は出来る限り簡単な手順でSELinuxを設定する方向で説明します。

※SELinux を無効にする手順については至る所に載ってるので、それらを参照して下さい。

とりあえず動かしてみる

SELinux を設定する場合でも、ソフトウェアの動作を予測して事前にSELinuxを設定するのは困難です。というか私には無理 ( 出来るとしてもやりたくない )。
SELinux を設定するにしても、どこで問題が発生しているのかを突き止める必要があります。

このためには問題が発生するまでとりあえず動かしてみます。
Redmineであれば、インストール/設定が行われた後、Apache を起動し、Redmineのページにアクセスして、幾つかのオペレーションを行います。

SELinux の問題はログに記録される。

SELinux が検知した問題はログに記録されます。通常 /var/log/audit/audit.log がこれにあたります。
という事で、これが手掛かりとなるので audit.log を見てみましょう。

# tail -f /var/log/audit/audit.log

とでもして、Redmine を実行してみれば、SELinux が問題で正しく動作しなかった瞬間、audit.log にもログが出力されるのを確認できるでしょう。

ツールを使う

とはいえ、「ログ見てもよく判らん」となるのが大半かと思います。
そんな時のためのツールとして audit2allow があります。SELinux を制御するための semanage 等と同様に policycoreutils-python パッケージに含まれるので、インストールされていない場合、インストールします。

# yum install policycoreutils-python

audit2allow

audit2allow は audit.log から SELinux のポリシー許可ルールを作成します。

# audit2allow -w -a

とする事で audit.log に記録された SELinux で拒否された理由を人間が判る形で出力してくれたりしますが、これら使い方に関しては興味があれば他文献を参照して下さい。

audit2allow を利用して Redmine を動作させる場合、以下のようにしてポリシー許可ルールを作成できます。

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol

今回の設定の場合 Redmine は Apache (httpd) 上で動作しているので、audit.log の中で httpd に関わる部分を grep で抽出して audit2allow にパイプで渡し、この内容からポリシー許可ルールを作成しています。
mypol という名前にしていますが、この部分は適宜変更して下さい。

※設定方法や環境によっては httpd 以外でフィルタしたルールも追加する必要があるかも。

上記コマンドを実行すると、実行したディレクトリに以下の二つのファイルが作成されます。

  • mypol.te
    テキストデータでポリシーが記載されているので確認してみましょう。
  • mypol.pp
    ロード可能なコンパイルされたファイル。

作成されたファイルを利用して以下を実行する事で、ルールが追加されます。

# semodule -i mypol.pp

※但し、ルールを追加しなおすと過去のルールは上書きされる。

※既に組み込み済みのポリシー許可ルールは以下で確認できる。自分で作成するルール ( 名前 ) は他と被らないもので設定しましょう。

# semodule -l

※自分で追加したルールも semodule -l でリストされる。

※環境によっては httpd だけでなく ruby 等でフィルタしてルール作成する必要もあるかも。

audit2allow を複数回実行する

一回のルール追加では全ての問題を解決できない可能性が高いでしょう ( 後から別の問題が見つかる事はよくある )。
この場合上記のルール作成/適用を複数回行う事になると思いますが、この手順を繰り返す事で SELinux を無効にしなくともRedmineを正しく動作させる事ができるようになるはずです。

幾つかのディレクトリのパーミッションを変更

上記作業で Redmine はとりあえず動作する環境になったのですが、管理メニューの [情報] を確認すると、以下項目が × 表示になっていました。

  • ファイルリポジトリに書き込み可能
  • Plugin assetsディレクトリに書き込み可能 (./public/plugin_assets)

上記ディレクトリを含むいくつかのディレクトリのパーミッションを設定します。
設定対象ディレクトリは以下。

  • log
  • tmp
  • files
  • public/plugin_assets
# cd /opt/redmine
# chcon -R -t httpd_log_t log
# chcon -R -t httpd_tmpfs_t tmp
# chcon -R -t httpd_sys_script_rw_t files
# chcon -R -t httpd_sys_script_rw_t public/plugin_assets

その他

インストール後、運用している中で発生したエラー、及び、その対策などを記します。

チケット追加時にエラー

チケット追加時にエラーが発生して、チケット追加できませんでした。
Agile プラグイン 等も追加でインストールしたので、これが影響しているのかも。

ログ ( production.log ) を見ると以下のエラー ( 抜粋 ) が、

...
Completed 500 Internal Server Error in 78ms (ActiveRecord: 11.5ms)
...
ActiveRecord::StatementInvalid (Mysql2::Error: Field 'position' doesn't have a default value: INSERT INTO `issues` ...

issues テーブルの position フィールドにデフォルト値が設定されていないために発生しているエラーのため、テーブル定義を変更して対応しました。

MariaDB [...]> ALTER TABLE issues MODIFY COLUMN position int(11) NOT NULL DEFAULT '1';

まとめ

とりあえず、Redmine + Subversion が動作するところまでの作業ログをまとめてみました。
結構色々なところではまりました。

  • Ansible の Playbook を公開してくださっている方がいたので、これを使ったが上手くいかずにはまる。
  • CentOSのyumリポジトリ版よりも新しいRubyやPassengerを利用するにあたって、Redhat Software Collections を使ってみたが、Passenger のインストール、起動まではサクッとできたが Redmineが動作せずはまる。
    Redhat Software Collections の記事(特に個別のソフトウェアに関する) がそもそも殆どなく、そこでもはまる。
  • 記事中にも書いた Passenger のオプションの問題で Subversion が正しく機能せずはまる。
  • etc...

KVMゲストで適当なところでスナップショット取りながら作業したので一からやり直す事はなかったですが、それでも結構大変でした ( しかもまだ全部は終わってない )。

という事で、ALMinium は偉かった ( 簡単だった ) という事を実感した次第です。

書き散らかしていた結構な分量の作業ログをまとめたので、過不足や誤りなども残っている可能性がありますが、参考になれば。

 

※ Redmineの構築・導入支援等ご相談に応じます。お気軽にお問合せ下さい。