Subversion サーバーの起動

Subversion サーバーの起動

この節では Subversion サーバーの構築、および安全な管理方法などについて説明します。

Subversion サーバーの必要パッケージ

必須

Subversion-1.14.2. OpenSSH-9.5p1

Subversion サーバーの設定

これ以降では Subversion サーバーのインストール手順を示します。 OpenSSH を利用すれば、セキュアなリモートアクセスを実現することもできます。 ここでは svnserve により匿名 (anonymous) アクセスを行うものとします。

Subversion サーバーの設定は、以下に示す手順により実施します。

1. ユーザー、グループ、パーミッションの設定

設定を行うには、まずは root ユーザーになって操作します。 以下のコマンドを実行して svn ユーザーおよびグループを生成します。

groupadd -g 56 svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

複数のリポジトリを利用するなら、それらのリポジトリを取り扱うグループを1つ作っておけば、管理が容易になります。 以下のコマンドにより、テストリポジトリを取り扱う svntest グループを生成します。 そして svn ユーザーをそのグループに加えます。

groupadd -g 57 svntest &&
usermod -G svntest -a svn

さらに新しいファイルへの書き込み権限を与えるには、所有者とそのグループがリポジトリを取り扱えるものとしなければならず、 umask 002 を実行する必要があります。 svnsvnserve に対して、ラッパースクリプトを生成することで、これを確実に実現します。

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}
[注記]

注記

Apache を使ってリポジトリに対し HTTP 経由でのアクセスを行う場合、特に匿名アクセスも可能とする場合、 /usr/sbin/httpd コマンドに対して、上と同様のラップスクリプトを生成する必要があります。

2. Subversion リポジトリの生成

There are several ways to set up a subversion repository. It is recommended to have a look at the SVN Book corresponding chapter. A basic repository can be set up with the instructions below.

Subversion の新たなリポジトリは (root となって) 以下のコマンドにより生成します。

install -v -m 0755 -d /srv/svn &&
install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
svnadmin create /srv/svn/repositories/svntest

Now that the repository is created, it should be populated with something useful. You'll need to have a predefined directory layout set up exactly as you want your repository to look. For example, here is a sample BLFS layout setup with a root of svntest/. You'll need to set up a directory tree similar to the following:

svntest/            # The name of the repository
   trunk/           # Contains the existing source tree
      BOOK/
      bootscripts/
      edguide/
      patches/
      scripts/
   branches/        # Needed for additional branches
   tags/            # Needed for tagging release points

上に示したようなディレクトリレイアウトに基づいてディレクトリを生成したら、初期インポートを行います。

svn import -m "Initial import." \
    </path/to/source/tree>      \
    file:///srv/svn/repositories/svntest

リポジトリに対して、ユーザーとグループの所有を設定します。 そして一般ユーザーに対して svnsvntest のグループへの設定を行います。

chown -R svn:svntest /srv/svn/repositories/svntest    &&
chmod -R g+w         /srv/svn/repositories/svntest    &&
chmod g+s            /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>

svntest は svntest リポジトリに割り当てるグループです。 As mentioned earlier, this eases administration of multiple repositories when using OpenSSH for authentication. Going forward, you'll need to add your unprivileged user, and any additional users that you wish to have write access to the repository, to the svn and svntest groups.

In addition, you'll notice that the new repository's db directory is set-groupID. If the reasoning is not immediately obvious, when using any external authentication method (such as ssh), the sticky bit is set so that all new files will be owned by the user, but group of svntest. Anyone in the svntest group can create files, but still give the entire group write access to those files. This avoids locking out other users from the repository.

一般ユーザーに戻って、新たなリポジトリを参照するために svnlook コマンドを実行します。

svnlook tree /srv/svn/repositories/svntest/
[注記]

注記

You may need to log out and back in again to refresh your group memberships. su <username> should work as well.

3. サーバーの設定

As mentioned previously, these instructions will configure the server to use only ssh for write access to the repository and to provide anonymous access using svnserve. There are several other ways to provide access to the repository. These additional configurations are best explained at https://svnbook.red-bean.com/.

Access configuration needs to be done for each repository. Create the svnserve.conf file for the svntest repository using the following commands:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
   /srv/svn/repositories/svntest/conf/svnserve.conf.default &&

cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

There is not a lot to the configuration file at all. You'll notice that only the general section is required. Take a look at the svnserve.conf.default file for information on using svnserve's built-in authentication method.

4. Starting the Server

To start the server at boot time, install the svnserve.service unit from the blfs-systemd-units-20231205 package:

make install-svnserve

Additionally, the instructions above require that svn server uses umask 002 so that all new files will be writable by owner and group. This can be achieved by creating a systemd unit override file by running the following command:

mkdir -p /etc/systemd/system/svnserve.service.d
echo "UMask=0002" > /etc/systemd/system/svnserve.service.d/99-user.conf

Options which are passed to svnserve daemon can be changed in /etc/default/svnserve.