UNIX/Subversion のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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 = read 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_NAME}/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用の設定ファイル。
[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 REPOSITORY_NAME=`basename ${REPOSITORY_DIR}` REPOSITORY_CONF_DIR=${REPOSITORY_DIR}/conf REPOSITORY_HOOKS_DIR=${REPOSITORY_DIR}/hooks ### リポジトリ生成 svnadmin create --fs-type=fsfs ${REPOSITORY_DIR} ### リポジトリ環境設定 cp /etc/subversion/conf/* ${REPOSITORY_CONF_DIR} sed "s/{REPOSITORY_NAME}/${REPOSITORY_NAME}/" /etc/subversion/conf/svnserve.conf > ${REPOSITORY_CONF_DIR}/svnserve.conf sed "s/{REPOSITORY_NAME}/${REPOSITORY_NAME}/" /etc/subversion/hooks/pre-commit > ${REPOSITORY_HOOKS_DIR}/pre-commit chmod +x /etc/subversion/hooks/pre-commit
### リポジトリ初期登録 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} echo "create repository done."
chmod +x svnrepcr.sh