svn を apache と連携して http アクセスできるようにする
2024/01/08 00:00:00
前提 #
- 環境は 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 #
- Subversion : HTTP でアクセスする https://www.server-world.info/query?os=Ubuntu_22.04&p=subversion&f=4