UNIX/Subversion のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- UNIX/Subversion へ行く。
UNIX/Subversion
リポジトリ生成
svnadmin create --fs-type fsfs リポジトリディレクトリ
環境設定
- ディレクトリ作成
mkdir /etc/subversion/conf/ mkdir /etc/subversion/hooks/ mkdir /etc/subversion/hook-scripts/
- /etc/subversion/passwd.default
複数リポジトリで共通で使用するpasswdファイルを用意する。
[users] username1 = password1 username2 = password2 username3 = password3
- /etc/subversion/conf/svnserve.conf
passwd.defaultファイルを使用するように変更したsvnserve.conf。
リポジトリ生成スクリプトでコピーする。
realmも自動に設定できるように、置換用キーワードを埋め込んだ。
[general] anon-access = none auth-access = write password-db = /etc/subversion/passwd.default realm = {REPOSITORY_NAME}
tagsへのコミット防止HOOKスクリプト
- /etc/subversion/hooks/pre-commit
pre-commit.tmplをsvnperms.pyを使用するように変更。
また、リポジトリ生成スクリプトで使用するの置換用キーワードを埋め込んだ。
#!/bin/sh REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/bin/svnlook $SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null if [ $? -ne 0 ]; then echo "error: There isn't comment." >&2 exit 1 fi /etc/subversion/hook-scripts/svnperms.py -r "$REPOS" -t "$TXN" -f {REPOSITORY_DIR}/conf/svnperms.conf -s tagrestrict || exit 1 # All checks passed, so allow the commit. exit 0
- /etc/subversion/hook-scripts/svnperms.py
スクリプト本体。
subversionをインストールしたらどこかにあると思われる。
cp -p どこかのディレクトリ/svnperms.py /etc/subversion/hook-scripts/svnperms.py
- /etc/subversion/conf/svnperms.conf
svnperms用の設定ファイル。
リポジトリ構成が/project-name/{trunk,tags,branches}の場合
[tagrestrict] trunk/.* = *(add,remove,update) tags/[^/]+/ = *(add,remove) branches/[^/]+/.* = *(add,remove,update)
リポジトリ構成が/{trunk,tags,branches}/project-nameの場合
[tagrestrict] trunk/.* = *(add,remove,update) tags/.*/ = *(add,remove) branches/.* = *(add,remove,update)
リポジトリ生成スクリプト
- svnrepcr.sh
次の処理を行うスクリプトです。
・リポジトリ生成。
・trunk/tags/branchesのインポート。
・リポジトリディレクトリへ/etc/subversion/{conf,hooks}のキーワード置換とコピー。
#!/bin/sh ### 引数チェック if [ "$1" = "" ]; then echo "usage : svnrepcr.sh [REPOSITORY-DIR]" echo echo "ex. svnrepcr.sh /var/data/svn/category/newrepository" exit 0 fi REPOSITORY_DIR=$1 ### 環境設定 umask 0002 ETC_DIR=/etc/subversion REPOSITORY_NAME=`basename ${REPOSITORY_DIR}` ### リポジトリ生成 svnadmin create --fs-type=fsfs ${REPOSITORY_DIR} ### リポジトリ初期登録 TEMP_DIR=`mktemp -d` mkdir ${TEMP_DIR}/trunk mkdir ${TEMP_DIR}/branches mkdir ${TEMP_DIR}/tags svn import ${TEMP_DIR} file://${REPOSITORY_DIR} -m "Initial import" rm -rf ${TEMP_DIR} ### リポジトリ環境設定 cp ${ETC_DIR}/conf/* ${REPOSITORY_DIR}/conf/ sed "s/{REPOSITORY_NAME}/${REPOSITORY_NAME}/" ${ETC_DIR}/conf/svnserve.conf > ${REPOSITORY_DIR}/conf/svnserve.conf sed "s:{REPOSITORY_DIR}:${REPOSITORY_DIR}:" ${ETC_DIR}//hooks/pre-commit > ${REPOSITORY_DIR}/hooks/pre-commit chmod +x ${REPOSITORY_DIR}/hooks/pre-commit echo "create repository done."