ライン

ポイント:まだまだ現役?

ライン

 はじめに

作ってみる

 良く考えてみると、自分でSubversionのサーバを動かしたことはなくて、作ってみよう程度の話となります。
バックアップついでに取っておきたいものもあるし。内部にひっそりあると便利そうでもあるので。
外向きのIPアドレスも不要であるし、仮想サーバ内にFreeBSD 10.1-RC4を導入して入れてみることにしました。

 インストール

pkg/ports

面倒な過渡期にあるので、ここはpkgで突っ込んで、変更が必要な物はportsでreinstallするような感じでいいかなな方針で。

# pkg install subversion
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/freebsd:10:x86:64/latest, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.3.8_3: 100%
Message for pkg-1.3.8_3:
 If you are upgrading from the old package format, first run:

  # pkg2ng
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%   944 B   0.9k/s    00:01
Fetching digests.txz: 100%    2 MB 412.0k/s    00:05
Fetching packagesite.txz: 100%    5 MB 532.5k/s    00:10
Processing new repository entries: 100%
FreeBSD repository update completed. 23698 packages processed:
  0 updated, 0 removed and 23698 added.
Updating database digests format: 100%
The following 9 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        subversion: 1.8.10_3
        serf: 1.3.8
        apr: 1.5.1.1.5.4
        expat: 2.1.0_1
        gdbm: 1.11_2
        indexinfo: 0.2
        gettext: 0.18.3.1_1
        db5: 5.3.28_2
        sqlite3: 3.8.7_1

The process will require 78 MB more space.
18 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching subversion-1.8.10_3.txz: 100%    2 MB 414.0k/s    00:06
Fetching serf-1.3.8.txz: 100%   74 KB  75.9k/s    00:01
Fetching apr-1.5.1.1.5.4.txz: 100%  394 KB 403.0k/s    00:01
Fetching expat-2.1.0_1.txz: 100%   97 KB  99.6k/s    00:01
Fetching gdbm-1.11_2.txz: 100%  141 KB 144.5k/s    00:01
Fetching indexinfo-0.2.txz: 100%    5 KB   4.9k/s    00:01
Fetching gettext-0.18.3.1_1.txz: 100%    2 MB 426.2k/s    00:05
Fetching db5-5.3.28_2.txz: 100%   12 MB 471.2k/s    00:27
Fetching sqlite3-3.8.7_1.txz: 100%  679 KB 347.7k/s    00:02
Checking integrity... done (0 conflicting)
[1/9] Installing indexinfo-0.2: 100%
[2/9] Installing gettext-0.18.3.1_1: 100%
[3/9] Installing expat-2.1.0_1: 100%
[4/9] Installing gdbm-1.11_2: 100%
[5/9] Installing db5-5.3.28_2: 100%
[6/9] Installing apr-1.5.1.1.5.4: 100%
[7/9] Installing serf-1.3.8: 100%
[8/9] Installing sqlite3-3.8.7_1: 100%
[9/9] Installing subversion-1.8.10_3: 100%

まずはこんな感じで導入。

# cd /usr/ports/devel/subversion
# make config

portsで選択できるのはこんなだそうです。

後でオプション付け直してコンパイルし直しはできるので、まずは先に進む。

# pkg install mod_dav_svn
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
The following 4 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        mod_dav_svn: 1.8.10_3
        apache24: 2.4.10_2
        perl5: 5.16.3_11
        pcre: 8.35_1

The process will require 75 MB more space.
17 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching mod_dav_svn-1.8.10_3.txz: 100%   74 KB  75.9k/s    00:01
Fetching apache24-2.4.10_2.txz: 100%    4 MB 464.4k/s    00:08
Fetching perl5-5.16.3_11.txz: 100%   13 MB 514.3k/s    00:26
Fetching pcre-8.35_1.txz: 100%    1 MB 356.9k/s    00:03
Checking integrity... done (0 conflicting)
[1/4] Installing perl5-5.16.3_11: 100%
[2/4] Installing pcre-8.35_1: 100%
===> Creating users and/or groups.
Using existing group 'www'.
Using existing user 'www'.
[3/4] Installing apache24-2.4.10_2: 100%
/usr/local/share/examples/apache24/httpd.conf -> /usr/local/etc/apache24/httpd.conf

 Please check that your repository contains 'dav' subdirectory and
 that all files in repositroy is accessible by apache user (typically www)

[4/4] Installing mod_dav_svn-1.8.10_3: 100%
[activating module `dav_svn' in /usr/local/etc/apache24/httpd.conf]
[activating module `authz_svn' in /usr/local/etc/apache24/httpd.conf]
[preparing module `dontdothat' in /usr/local/etc/apache24/httpd.conf]

やっぱり、apacheまで突っ込んでくれちゃいました。
いいんですけど、2.4系になるんだね。

さて、ディレクトリ関連を準備します。

# mkdir /home/svn
# svnadmin create /home/svn/repos
# pw group add svn
# pw groupmod svn -M www
# pw useradd -n svn -c "Subversion User" -d /home/svn -g svn -h - -s /bin/sh
# cd /home
# chown -R svn:svn svn

こんなイメージです。

 設定

svnserve.conf

続いて、設定ファイルです。
上記、avnadminコマンドで作成したディレクトリ(/home/svn/repos/conf)以下に、svnserve.confがあります。
内容を参照しました。

### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.apache.org/ for more information.

[general]
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
# anon-access = read
# auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
# password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the
### directory containing this file.  The specified path may be a
### repository relative URL (^/) or an absolute file:// URL to a text
### file in a Subversion repository.  If you don't specify an authz-db,
### no path-based access control is done.
### Uncomment the line below to use the default authorization file.
# authz-db = authz
### The groups-db option controls the location of the groups file.
### Unless you specify a path starting with a /, the file's location is
### relative to the directory containing this file.  The specified path
### may be a repository relative URL (^/) or an absolute file:// URL to a
### text file in a Subversion repository.
# groups-db = groups
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
# realm = My First Repository
### The force-username-case option causes svnserve to case-normalize
### usernames before comparing them against the authorization rules in the
### authz-db file configured above.  Valid values are "upper" (to upper-
### case the usernames), "lower" (to lowercase the usernames), and
### "none" (to compare usernames as-is without case conversion, which
### is the default behavior).
# force-username-case = none
### The hooks-env options specifies a path to the hook script environment
### configuration file. This option overrides the per-repository default
### and can be used to configure the hook script environment for multiple
### repositories in a single file, if an absolute path is specified.
### Unless you specify an absolute path, the file's location is relative
### to the directory containing this file.
# hooks-env = hooks-env

[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256

セクションだけですべてコメントになっていました。
適当に以下のようにしてみました。

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = SVN

のように。/etc/rc.conf には、

svnserve_enable="YES"

を加えて、デーモンを起動します。

# service svnserve start
Starting svnserve.

起動させてみました。

# ps -ax|grep -v grep|grep svnserve
9747  -  Is      0:00.00 /usr/local/bin/svnserve -d --listen-port=3690 --listen-host 0.0.0.0 -r /home/svn/repos

動作していました。
初期のファイルを置いてみて、インポートしてみました。

# svn mkdir --parents file:///home/svn/repos/asterisk -m'create trunk'

Committed revision 1.
# cd /home/svn/repos
# mkdir -p asterisk/trunk/usr/local
# cd asterisk/trunk
*** ここのディレクトリに初期の設置したいものを置く ***
# cd ../..
# chown -R svn:svn asterisk/
# svn import asterisk file:///home/svn/repos/asterisk -m 'first import of asterisk'

Committed revision 2.
# svn list file:///home/svn/repos/asterisk/trunk/usr/local/etc
# cd /home/svn/repos
# chown -R www:www asterisk

登録はできたみたいですので、apache側の設定をやってしまいましょう。

Apache

 httpを使って利用できるように設定を続けます。
httpd.confで、以下のコメントを外します。

LoadModule dav_module libexec/apache24/mod_dav.so

そうしないと、apacheの起動のタイミングで

httpd: Syntax error on line 153 of /usr/local/etc/apache24/httpd.conf: Cannot load libexec/apache24/mod_dav_svn.so into server:
 /usr/local/libexec/apache24/mod_dav_svn.so: Undefined symbol "dav_register_provider"

のようにいわれてしまうので。
# 実際にやっちまった!

/usr/local/etc/apache24/Includes/subverion.conf を作成し、

<Location /repos>
        DAV                     svn
        SVNParentPath           /home/svn/
        SVNListParentPath       On
</Location>

のように作成。
認証とかまずは後回しで見れることを確認する。

/etc/rc.confに

apache24_enable="YES"
apache24_http_accept_enable="YES"

を追加して、apache24のデーモンを上げる。

# service apache24 start

ブラウザでアクセスしてみて、見れるようになったことを確認します。
うん、大丈夫。

実際に自分で取得できるかを試すことにします。

% cd /var/tmp
% mkdir test
% cd test
% svn co http://127.0.0.1/svn/repos/asterisk/trunk/
...
Checked out revision 2.

ちゃんと取得することができました。

 Windows で利用してみる

TortoiseSVN

では、実際にWindows から利用してみます。

問題無く、coできますが、更新してcommitすると、エラーになります。

ここでは、

# cd /home/svn/repos
# chown -R www:www db/

のようにして逃げてしまいました。

現状、Windows PCより更新がかけられるようになりました。

 認証

BASIC認証

 さて、認証を加えます。
BASIC認証なので、社内からキャプチャーされれば、見えちゃうかもです。
やはり、SSL通信にする方針にしました。

 /usr/local/etc/apache24/Includes/subverion.confを以下のように追記しました。

<Location /svn>
        DAV                     svn
        SVNParentPath           /home/svn
        SVNListParentPath       On

        SSLRequireSSL
        AuthType Basic
        AuthName "subversion"
        AuthUserFile /home/svn/repos/conf/.htpasswd
        Require vaid-user
        AuthzSVNAccessFile /home/svn/repos/conf/authz
        Order Allow,Deny
        Allow from 192.168.55.0/24
        Require ip 192.168.55
</Location>

httpd.confのhttpd-ssl.confを有効にして、キー関連は自己認証で作成しておきます。

# htpasswd -c -b /home/svn/repos/conf/.htpasswd ID PASSWORD

Require vaid-userがエラーになる。Require user IDに変更して登録。実際には、SSL通信になったもののBASIC認証が来ない…。
Apache 2.4はやっぱりいろいろです。原因がわかりましたら、またページを更新します。

【改訂履歴】作成:2014/11/03 更新:2014/11/08
【参考リンク】

5.5. Ports Collection の利用 … FreeBSDのオンラインドキュメント
Apache+WebDAV+Subversion+SSLの設定(パッケージ利用) - Dondari memo

Copyright © 1996,1997-2006,2007- by F.Kimura,