プロジェクト

全般

プロフィール

SubversionにRedmineの認証を連携する » 履歴 » バージョン 4

« 前 - バージョン 4/7 (差分) - 次 » - 最新版
Hidehisa Matsutani, 2015/11/27 23:45


SubversionにRedmineの認証を連携する

SubversionとRedmineの認証連携ができると、Redmineのユーザ/パスワードでSubversionにコミットできます。
いろいろと試行錯誤した結果、無事連携できたので、ノウハウをまとめておきます。

前提条件

  • Bitnami Redmine を利用
  • サーバはCentOS
  • Bitnamiのインストールフォルダは/opt/redmine-3.0.3-0

mod_auth_mysqlのインストール

    # yum install mod_auth_mysql

Redmine に同梱されている Redmine.pm を Perl の実行パスへシンボリックリンク

    # mkdir -p /opt/redmine-3.0.3-0/perl/lib/site_perl/5.16.3/x86_64-linux-thread-multi/Apache/Authn
    # ln -s /opt/redmine-3.0.3-0/apps/redmine/htdocs/extra/svn/Redmine.pm /opt/redmine-3.0.3-0/perl/lib/site_perl/5.16.3/x86_64-linux-thread-multi/Apache/Authn

デフォルトの権限設定を記述

    # vi /opt/redmine-3.0.3-0/repos/svnauthz
# common settings
[/]
admin = rw
* = rw
guest = r

httpd.confに以下を追加

    # vi /opt/redmine-3.0.3-0/apache2/conf/httpd.conf
Include conf/extra/httpd-svn.conf

mod_auth_mysql.so の作り直し

BitNami Redmine Stack に同梱されている Apache 2.4 では API がいくつか変更されたらしいので、パッチをあてます

https://osdn.jp/projects/sfnet_modauthmysql/
から、mod_auth_mysql-3.0.0.tar.gzをダウンロードします。

http://sourceforge.net/p/modauthmysql/patches/13/
のパッチを当てて、mod_auth_mysql.so を作り直します。
この作業では gcc がインストールされている必要があります。

    # tar xzvf mod_auth_mysql-3.0.0.tar.gz
    # patch -p0 < mod_auth_mysql_3.0.0_patch_apache2.4.diff
    # cd mod_auth_mysql-3.0.0/
    # /opt/redmine-3.0.3-0/use_redmine
    # apxs -c -L/opt/redmine-3.0.3-0/mysql/lib -I/opt/redmine-3.0.3-0/mysql/include -lmysqlclient -lm -lz mod_auth_mysql.c
    # apxs -i mod_auth_mysql.la

ユーザテーブルにsaltが追加されたが、mod_auth_mysqlがRedmineのsaltの掛け方に対応していないので、パッチをあてます

(参考) http://d.hatena.ne.jp/vmi/20111102/p1
パッチは http://www.redmine.org/boards/2/topics/24386?r=25722#message-25722 からダウンロードします。

    # patch -p0 < mod_auth_mysql-3.0.0-redmine.patch
    # cd mod_auth_mysql-3.0.0/
    # /opt/redmine-3.0.3-0/use_redmine
    # apxs -c -L/opt/redmine-3.0.3-0/mysql/lib -I/opt/redmine-3.0.3-0/mysql/include -lmysqlclient -lm -lz mod_auth_mysql.c
    # apxs -i mod_auth_mysql.la

httpd-svn.confを作成

  • Subversion に WebDAV 経由でアクセスできるようにします
  • {DB_password}{port}は適宜インストール環境に合わせて読み替えてください。
    # vi /opt/redmine-3.0.3-0/apache2/conf/extra/httpd-svn.conf
LoadModule perl_module modules/mod_perl.so
PerlLoadModule Apache::Authn::Redmine

<Location /svn>
  DAV svn
  SVNParentPath "/var/svn" 
  AuthType Basic
  AuthName Subversion
  Require valid-user
  AuthUserFile /dev/null
  AuthBasicAuthoritative Off
  AuthMySQLAuthoritative On
# my.cnfの設定に合わせて変更
  AuthMySQLSocket /opt/redmine-3.0.3-0/mysql/tmp/mysql.sock
# Redmineのdatabase.ymlの設定に合わせて変更
  AuthMySQLHost localhost
  AuthMySQLUser bitnami
  AuthMySQLPassword {DB_password}
  AuthMySQLDB bitnami_redmine
### Redmineのテーブルとの紐付け
# Redmineのユーザテーブル
  AuthMySQLNoPasswd Off
  AuthMySQLUserTable users
  AuthMySQLNameField login
  AuthMySQLPasswordField hashed_password
  AuthMySQLSaltField salt
  AuthMySQLPwEncryption sha1-rm
# グループの設定。プロジェクト識別子をグループとして扱う
  AuthMySQLGroupTable "users, members, projects" 
  AuthMySQLGroupCondition "users.id = members.user_id and projects.id = members.project_id" 
  AuthMySQLGroupField "projects.identifier" 

  AuthzSVNAccessFile /opt/redmine-3.0.3-0/repos/svnauthz
  #PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler

  RedmineDSN "DBI:mysql:database=bitnami_redmine;host=localhost:{port};mysql_socket=/opt/redmine-3.0.3-0/mysql/tmp/mysql.sock" 
  RedmineDbUser "bitnami" 
  RedmineDbPass "{DB_password}" 
</Location>

Redmineを再起動します。

# /opt/redmine-3.0.3-0/ctlscript.sh restart

Redmineのユーザ/パスワードでSubversionのコミットができれば成功