Trac 新規プロジェクト設置スクリプト

Trac 新規プロジェクト設置スクリプト

社内向けに作成手順を作ろうとしていたら、文書で書くより半自動化スクリプトを書く方が早くて、こんなのを作ってしまった。

#!/bin/sh
# $1 : targetdir Suvbersionリポジトリおよび trac データ等を置くディレクトリを指定する
# $2 : Administrator Account Trac の管理者として利用するアカウントを指定する
# $3 : targetname (Apache configuration /$targetname-svn , /$targetname-trac) httpアクセスする際のURLに埋め込まれる名前を指定する
#
# 例1 : /local/sbin/TracCreate.sh /home/hogelab h HogeLab
# 例2 : /local/sbin/TracCreate.sh /home/hoge-dev h
apacheconfdir=/usr/local/etc/apache22/Includes
authuserfile=/usr/local/etc/apache22/digest
# authname に digest 認証で利用する
authname=example.com
targetdir=$1
adminaccount=$2
targetname=$3
test -n "$targetdir" || exit 1
test -n "$adminaccount" || exit 1
# test "$targetname" || exit 1
test -n "$targetname" || targetname=`echo $1 | sed 's/.*\///'`

tempfoo=`basename $0`
svndir=$targetdir/svn
tracdir=$targetdir/trac

CreateConfigurationSvn()
{
local targetname=$1
local conffile=$apacheconfdir/svn_$targetname.conf
local tmpfile=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
cat > $tmpfile << __EOF__
##### SubVersion Repository (WebDAV)
<Location /$targetname-svn>
    DAV svn
    SVNPath "$svndir"
    SVNIndexXSLT "/svnindex.xsl"
    SSLRequireSSL
    SSLVerifyClient require
    SSLUserName SSL_CLIENT_S_DN_CN
    <Limit GET HEAD PROPFIND OPTIONS REPORT>
        Order allow,deny
        Allow from all
    </Limit>
    <Limit PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK MKACTIVITY CHECKOUT MERGE>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET HEAD PROPFIND OPTIONS REPORT PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK MKACTIVITY CHECKOUT MERGE>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Location>
__EOF__

chmod 644 $tmpfile
sudo mv $tmpfile $conffile
sudo ci -u -mx -t- $conffile
}

CreateConfigurationTrac()
{
local targetname=$1
local conffile=$apacheconfdir/trac_$targetname.conf
local tmpfile=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
local hostname=`hostname`
cat > $tmpfile << __EOF__
# $targetname
<Location "/$targetname-trac">
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv "$tracdir"
  PythonOption TracUriRoot /$targetname-trac
  SetEnv PYTHON_EGG_CACHE "/tmp/traccache"
  SSLRequireSSL
  SSLVerifyClient require
</Location>
<Location "/$targetname-trac/login">
  AuthType Digest
  AuthName "$authname"
  AuthDigestDomain /$targetname-trac/ http://$hostname/$targetname-trac/ https://$hostname/$targetname-trac/
  AuthDigestProvider file
  AuthUserFile $authuserfile
  Require valid-user
</Location>
__EOF__

chmod 644 $tmpfile
sudo mv $tmpfile $conffile
sudo ci -u -mx -t- $conffile
}

sudo mkdir $targetdir
sudo chown www $targetdir
sudo chgrp www $targetdir
sudo -u www svnadmin create $svndir
sudo -u www svn mkdir -m'standard directories' file://$svndir/trunk file://$svndir/branches file://$svndir/tags
sudo -u www trac-admin $tracdir initenv $targetname sqlite:db/trac.db svn $svndir /usr/local/share/trac/templates
env LANG=ja_JP.UTF-8 sudo -u www trac-admin $tracdir << __EOF__
component remove component2
milestone remove milestone2
milestone remove milestone3
milestone remove milestone4
priority add 緊急
priority add 高
priority add 中
priority add 低
priority remove blocker
priority remove critical
priority remove major
priority remove minor
priority remove trivial
ticket_type add 不具合
ticket_type add 機能追加要求
ticket_type add タスク
ticket_type add チューニング
ticket_type remove defect
ticket_type remove enhancement
ticket_type remove task
severity add 通常
severity add 常にシステム停止
severity add 稀にシステム停止
severity add 不整合が拡大中
severity add 不整合が常に表面化
severity add 不整合が稀に表面化
severity add 不整合は存在しない
permission add $adminaccount TRAC_ADMIN
__EOF__

# call internal functions
CreateConfigurationSvn $targetname
CreateConfigurationTrac $targetname

echo Please configure your component and milestones
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。