CA MOBILE エンジニアブログ

株式会社シーエー・モバイルのエンジニアブログです

【旧ブログ】にわっちのインフラ奮闘記vol3-最新版Subversion(1.8.3)導入

どもども、

最近東京のつけ麺は美味しいなと犇々と(ひしひしと)感じている  にわっち  です。

f:id:niwattitti:20150910114805j:plain

今から寒くなるにつれて、ますます行きつけお店、
吉祥寺の「えん寺」に通うことが増えそうですヽ(=´▽`=)ノ

さてさて、
今回はSubversion導入編です。
subversionは、オープンソースバージョン管理システムです。

その他よく使われているバージョン管理システムとして git があります。
gitも、もちろん利用していますが、今回Subversion移行の社内案件があったのでそちらの話を。

今回のSubversion移行案件の際に考えた手段は、
以下の4つでしたが、今後の保守も考えて最新版を導入をしました。

1. イメージを取って移行する(設定する手間が無い)
2. 同じバージョンで移行する(バージョンによる差異がない)
3. 同じモジュールが使えるバージョンを選択する
4. 最新のバージョンを使う

移行前の環境

※mod_auth_shadowはOSのユーザーとパスワードを利用して基本認証するために利用

移行後の環境

※mod_authnz_externalとpwauthはOSのユーザーとパスワードを利用して基本認証するために利用

■利用環境

OS:CentOS release 6.4 (Final)

■手順

手順1 apacheのインストール

下記URL先の手順でapacheをインストールします。
↓↓↓↓↓↓↓
にわっちのインフラ奮闘記vol1 LAMP環境構築

手順2 subversionのインストール

事前に以下をインストールするもの

※serfを入れないとsvn checkout http://?を実施した際に、svn:Unrecognized URL schemeのエラーがでます。
以前のバージョンまではneonをインストールしていれば大丈夫でしたが、
subversion1.8系ではneonでのHTTPクライアントのサポートは削除されていて利用できません。

sqliteインストール

# cd /usr/local/src/
# wget http://www.sqlite.org/sqlite-autoconf-3071401.tar.gz
# tar -zxvf sqlite-autoconf-3071401.tar.gz
# cd sqlite-autoconf-3071401
# ./configure
# make
# make install

serfインストール

# cd /usr/local/src/
# wget http://serf.googlecode.com/files/serf-1.2.1.tar.bz2
# tar jxfv serf-1.2.1.tar.bz2
# cd serf-1.2.1
# ./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr
# make
# make install

※aprはapacheで指定した場所と一緒

subversionインストール

cd /usr/local/src/
# wget http://mirrors.go-parts.com/apache/subversion/subversion-1.8.3.tar.gz
# tar xzvf /usr/local/src/subversion-1.8.3.tar.gz
# cd /usr/local/src/subversion-1.8.3
# ./configure \
--with-serf=/usr/local/serf \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-apxs=/usr/local/apache2/bin/apxs
# make
# make install

※インストールしたserfを指定するのを忘れずに!
aprはapacheで指定した場所と一緒

手順3 OSのユーザーとパスワードを利用して基本認証

mod_auth_shadowはapache2.4系では利用できないため、
mod_authnz_external + pwauthを利用。

mod_authnz_externalインストール

# yum -y install gcc httpd-devel pam-devel
# cd /usr/local/src/
# wget https://mod-auth-external.googlecode.com/files/mod_authnz_external-3.3.1.tar.gz
# tar zxvf mod_authnz_external-3.3.1.tar.gz
# cd mod_authnz_external-3.3.1
# vi mod_authnz_external.c

削除     if (c->remote_ip)
削除          child_env[i++]= apr_pstrcat(p, ENV_IP"=", c->remote_ip, NULL);
追加     if (c->client_ip)
追加          child_env[i++]= apr_pstrcat(p, ENV_IP"=", c->client_ip, NULL);

# /usr/local/apache2/bin/apxs -c mod_authnz_external.c
# /usr/local/apache2/bin/apxs -i mod_authnz_external.la

pwauthインストール

# cd /usr/local/src/
# wget https://pwauth.googlecode.com/files/pwauth-2.3.10.tar.gz
# tar zxvf pwauth-2.3.10.tar.gz
# cd pwauth-2.3.10
# vi config.h
  126行目 コメントアウト
  /* #define SHADOW_SUN
 
  134行目あたり コメント
  #define PAM
     
  281行目あたり 変更( apacheのconfで指定したUserのidを指定 id ユーザー名 で確認 )
  #define SERVER_UIDS 80
# vi Makefile
  10行目あたり コメントアウト
  #LIB= -lcrypt

  14行目あたり コメント解除
  LIB=-lpam -ldl
# make
# chmod 4755 pwauth

# vi /etc/pam.d/pwauth
# 新規作成
#%PAM-1.0
auth        include       system-auth
account     include       system-auth
session     include       system-auth

モジュールのコピー

# cp -p /usr/local/src/subversion-1.8.3/subversion/mod_dav_svn/.libs/mod_dav_svn.so /apache/modules
# cp -p /usr/local/src/subversion-1.8.3/subversion/mod_authz_svn/.libs/mod_authz_svn.so /apache/modules

httpd.confにモジュール追加

# LoadModule dav_svn_module modules/mod_dav_svn.so
# LoadModule authz_svn_module modules/mod_authz_svn.so

Subversionリポジトリの作成

# mkdir /test/svn
# svnadmin create /test/svn/リポジトリ
# chown -R www:www リポジトリ


apachehttpd.confで指定したUserとGroup。

confファイルに下記追加

  AddExternalAuth pwauth /usr/local/src/pwauth-2.3.10/pwauth
  SetExternalAuthMethod pwauth pipe
 
   <Location /svn>
    DAV svn
    SVNPath "/test/svn"
    AuthType Basic
    AuthName "svn Authentication"
    AuthBasicProvider external
    AuthExternal pwauth
    require valid-user
  </Location>

ドメイン/svn/リポジトリ名でアクセスでき、OSのユーザー・パスワードで認証される。

以上になります。

今回最新版を入れたことにより、
serfがないとsvn HTTP経由ででチェックアウトできないとか、
mod_auth_shadowの利用が難しいとか、
confの設定を変えないといけないとか多々詰まる部分がありました。

しかし、最後までやり遂げることができ、やってみれば出来るもんだなと思い自信になりました。
これからも、新しいものにたくさん触れ、挑戦して成長していきたいと思います。

それではまた近々。
今後とも にわっち をよろしくお願いします。