SVN Source Install

# Goal

```
* 最終的にUSVNをつかえるようにする目標で、まずはSVNのインストールをおこなう
* SVN1.8をソースからインストールする
* ApacheがSource Installされている前提
```

# Milestone

```
* Apacheがソースインストールされている場合、USVNなどのツールを使うためにsvnもソースからインストールされる必要がある
* SVNインストールの際にsqliteが必要なためパッケージをダウンロードしてsvnビルド時に組み込む必要がある
* ビルド時にapacheのインストールパスを指定し、mod_dav_svn.soおよびmod_authz_svn.soをインストールする
* SVNはCentOSのパッケージがすでにインストールされているがこれを無視して新しいものを別のパスにインストールする
* SVNはリポジトリの保存形式にBerkely DBとFSFS(通常のフラットファイル形式)を選択できるが、現在はFSFSがデフォルトかつ主流のようなので、Berkely DBはビルド時に除外する
```

# Preparation

```shell-session
$> uname -a
Linux *** 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$> cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

$> /usr/local/apache/bin/apachectl -V | head -n 1
Server version: Apache/2.4.7 (Unix)

```

# Manual

## Download SVN Source Code

```shell-session
## root user
cd /usr/local/src
wget "http://ftp.tsukuba.wide.ad.jp/software/apache/subversion/subversion-1.8.8.tar.gz"
  # http://subversion.apache.org/download/
  # DownloadするバージョンやURLは上記URLで確認
ls -l subversion-1.8.8.tar.gz
tar zxvf subversion-1.8.8.tar.gz
ls -l subversion-1.8.8
```

## Download sqlite Source Code

```shell-session
## 
## このままビルドすると、sqliteのエラーメッセージが発生するため、
## エラーメッセージに沿ってパッケージをダウンロードして、svnソースディレクトリ内に配置
## 

cd /usr/local/src
wget "http://www.sqlite.org/sqlite-amalgamation-3071501.zip"
unzip sqlite-amalgamation-3071501.zip
mv -i sqlite-amalgamation-3071501 subversion-1.8.8/subversion/sqlite-amalgamation
  # /usr/local/src/
  #   |- subversion-1.8.8
  #      |- sqlite-amalgamation
```

sqliteバージョン不整合によるエラーメッセージ

```
get the sqlite 3.7.15.1 amalgamation from:
    http://www.sqlite.org/sqlite-amalgamation-3071501.zip
unpack the archive using unzip and rename the resulting
directory to:
/usr/local/src/subversion-1.8.8/sqlite-amalgamation

configure: error: Subversion requires SQLite
```

## Build / Install

```shell-session
./configure --prefix=/usr/local/svn-1.8.8 \
  --without-berkeley-db \
  --with-apr=/usr/local/apache \
  --with-apr-util=/usr/local/apache \
  --with-apache-libexecdir=/usr/local/apache/modules \
  --with-openssl

make
make install
```

## Check Install

```shell-session
ls -l /usr/local/svn-1.8.8
  # prefixに指定したパスにインストールされていることを確認
find /usr/local/apache -mmin -10
  # 過去10分以内にapacheディレクトリに対しておこなわれた変更を確認
  # 想定通り、mod_dav_svn.soとmod_authz_svn.soのみゲットできたことを確認
  # ./modules
  # ./modules/mod_authz_svn.so
  # ./modules/mod_dav_svn.so
```

## Other Initial Setup

```shell-session
## 
## シムリンクはる
## 

cd /usr/local
ln -s svn-1.8.8 svn

## 
## パスを通す
## 

vi /etc/profile.d/svn.sh
  # 新規SVNのインストールパスで既存SVNのパスを上書き
  # PATH=/usr/local/svn/bin:$PATH
  # export PATH

##
## ログインし直して、バージョンがあがったことを確認
## 

svn --version | head -n 1
  # svn, version 1.8.8 (r1568071)

## 
## 新規SVNが問題なさそうだったら既存svnを削除
## 

yum remove svn
```

# Others

```shell-session
## 
## --without-berkeley-dbオプションをつけてビルドしたため、
## bdb形式でリポジトリ作成しようとするとエラーになる
## （※ただ、エラーメッセージみるたところberkely DBはすでに非推奨になっているよう）
## 

svnadmin create --fs-type bdb bdb_repo
  # svnadmin: warning: The "bdb" repository back-end is deprecated, consider using "fsfs" instead.
  # svnadmin: E160033: ファイルシステム形式 'bdb' のモジュールをロードできませんでした
```

# References

* http://demo.zeera.jp/files/cubo/cubo-demo/document/01.Cubo-Manual/html/subversion/svn.reposadmin.basics.html