svn を apache と連携して http アクセスできるようにする

svn を apache と連携して http アクセスできるようにする

2024/01/08 00:00:00
Program
Svn, Apache

前提 #

  • 環境は wsl2 ubuntu22.04 を想定。名前は Ubuntu-22.04
  • ubuntu22.04 は apache 環境は構築済みで http アクセスできること

設定 #

svn.conf 作成 for apache #

「$ sudo emacs /etc/apache2/conf-available/svn.conf」 でもいいが、virtualhost関連は sites-available で設定したほうがいいらしい

$ sudo emacs /etc/apache2/sites-available/svn.conf

<Location /svn>
   DAV svn
   # /svn でリポジトリ一覧を表示する。
   SVNListParentPath on
   SVNParentPath /home/developer/svn
   LimitXMLRequestBody 0
   AuthType Basic
   AuthName "Authorization Realm"
   # git ユーザと共通にする場合
   AuthUserFile /home/developer/git/.htpasswd
   # AuthUserFile /home/developer/svn/.htpasswd
   Require valid-user
</Location>
  • メモ
    Apache2の設定については、conf-availableとsites-availableの2つのディレクトリがありますが、
    それぞれ異なる目的で使用されます。
    conf-availableは、すべてのvhostsに影響を与えるグローバルな設定の断片を格納するためのものです。
    sites-availableは、完全なvhost定義を格納するためのもので、VirtualHostを分けて設定ファイルを置く場合は、
    sites-availableにファイルを追加し、sites-enabledからシンボリックリンクを貼る必要があります。
    あなたが提供した設定は、特定のパス(/git)に対する設定を含んでいるため、これは特定のサイトまたはvhostに
    関連する設定と見なすことができます。したがって、この設定はsites-availableディレクトリに配置するのが適切です。
    そして、そのサイトを有効にするためには、a2ensiteコマンドを使用してsites-enabledディレクトリにシンボリックリンクを作成します
    

追加した apache 用の svn.conf を有効化 #

# $ sudo a2enconf svn  # conf-available の場合
$ sudo a2ensite svn
$ sudo apache2ctl configtest
Syntax OK

# 必要なモジュールも有効にしておく
$ sudo apt -y install libapache2-mod-svn subversion
$ sudo a2enmod dav_svn

# apache 再設定 or 再起動
# $ sudo service apache2 reload  # こっちでもOK
$ sudo service apache2 restart

svn リポジトリエリア作成 #

$ pwd
/home/developer
$ mkdir svn
$ cd svn

svn リポジトリを作成するスクリプトも作成しておく

$ emacs mk_svn_repository.sh

#!/bin/bash

# リポジトリ名が指定されていることを確認
if [ -z "$1" ]
then
  echo "リポジトリ名を指定してください。"
  exit 1
fi

# リポジトリが既に存在するか確認
if [ -d "$1" ]
then
  echo "指定したリポジトリは既に存在します。"
  exit 1
fi

# svn リポジトリの作成
svnadmin create $1
svn mkdir file://$PWD/$1/trunk file://$PWD/$1/tags file://$PWD/$1/branches -m 'create trunk, tags, and branches.'
if [ $? -ne 0 ]
then
  echo "svn リポジトリの作成に失敗しました。"
  exit 1
fi

sudo chgrp -R www-data $1
if [ $? -ne 0 ]
then
  echo "グループの変更に失敗しました。"
  exit 1
fi
# グループに書き込み権限が必要らしい
sudo chmod -R 775 $1
if [ $? -ne 0 ]
then
  echo "グループ権限の変更に失敗しました。"
  exit 1
fi

echo "svn リポジトリの作成が完了しました。"

ファイルダウンロード

作成した mk_svn_repository.sh に権限を追加

$ chmod +x mk_svn_repository.sh

svn リポジトリエリアに権限付与 #

作成した svn リポジトリエリアに権限を追加

$ cd ..
$ pwd
/home/developer
$ sudo chgrp -R www-data svn

svn リポジトリを作成 #

ここでは test リポジトリを作成する

# svn リポジトリ追加
$ cd 
$ ./mk_svn_repository.sh test


# 念のため
$ sudo systemctl restart apache2

svn ユーザ作成(.htpasswdファイル作成) #

  • ※ -c オプションは .htpasswd ファイルを作成するオプションコマンド。すでに .htpasswd ファイルが存在していて、ユーザを追加する場合は必要ない。-c つけると .htpasswd ファイルが再生成されるため、追加済みユーザがすべて削除されるので注意
  • ※ htpasswd コマンドが存在しない場合、$ sudo apt install apache2-utils でインストール可能
$ cd svn
$ htpasswd -c .htpasswd oya
  New password:
  Re-type new password:
  Adding password for user oya

svn ユーザ追加 #

$ cd svn
$ htpasswd .htpasswd oya2
  New password:
  Re-type new password:
  Adding password for user oya2

内部からアクセスできるか確認 #

$ svn co --username oya http://localhost/svn/test/trunk
  • メモ
    作成したtestリポジトリパスを指定してチェックアウトしても Redirect cycle detected が発生する。 trunk まで指定すると動作する。謎だ。。。
    $ svn co --username oya http://localhost/svn/test
    Authentication realm: <http://localhost:80> Authorization Realm
    Password for 'oya': ****
    Redirecting to URL 'http://localhost/svn/test':
    Redirecting to URL 'http://localhost/svn/test':
    svn: E195019: Redirect cycle detected for URL 'http://localhost/svn/test/'
    

外部PCからアクセスできるようにする #

設定方法は ここ を参照すること

$ svn co --username oya http://172.17.10.xx/svn/test/trunk

参考URL #