trac/複数プロジェクトの運営(雛形tracからの複製) http://www.ark-web.jp/sandbox/wiki/307.html

trac/複数プロジェクトの運営(雛形tracからの複製)

[edit]

背景

[edit]

使い方

[edit]

やってくれること

以下一部もう古くて動かないところもありますけど大体こんな感じってことで

[edit]

初期化

# コマンドライン引数より設定
# 例: hogehoge
PROJECT_NAME=$1

# プロジェクトディレクトリの決定
# 例: /var/www/projects/h/hogehoge
PROJECT_ROOT=/var/www/projects
PROJECT_NAME_FIRST_CHAR=`perl -e "print substr(${PROJECT_NAME}, 0, 1)"`
PROJECT_DIR=${PROJECT_ROOT}/${PROJECT_NAME_FIRST_CHAR}/${PROJECT_NAME}

# パスワードの生成
# 例) XXXXXX
PASSWORD=`mkpasswd`

# SVNディレクトリの決定
# 例: /svnroot/projects/hogehoge
SVN_DIR=/svnroot/projects/${PROJECT_NAME}

# tracディレクトリの決定 
# 例: /var/www/projects/h/hogehoge/trac
TRAC_DIR=${PROJECT_DIR}/trac

# tracデータベース名
# 例: hogehoge_trac
TRAC_DB=${PROJECT_NAME}_trac

# PostgreSQLのURI
# 例: postgres://hogehoge:XXXXXX@localhost/hogehoge_trac
POSTGRES_URI=postgres://${PROJECT_NAME}:${PASSWORD}\@localhost/${TRAC_DB}

# Project trac URL
# 例: http://hogehoge.ark-web.jp
PROJECT_TRAC_URL=http://XXXXXXXXXXXXXX

# 雛形tracのパス
SAMPLE_PROJECT_TRAC_DIR=${PROJECT_ROOT}/s/sample/trac

# 雛形tracのsvnパス
SAMPLE_PROJECT_SVN_DIR=/svnroot/projects/sample

# 雛形tracのDBパスワード
SAMPLE_PROJECT_TRAC_DB_PASSWORD=XXXXXX

# プロジェクト用アカウントのUIDの取得。5000番台の一番大きな数 + 1                                                            
# 例: 5023
PROJECT_USER_ID=`cut -d ':' -f 3 /etc/passwd  | sort -n | grep -E '^5...' | tail -1`
PROJECT_USER_ID=`expr $PROJECT_USER_ID + 1`
[edit]

プロジェクトアカウントの作成

echo useradd -u ${PROJECT_USER_ID} -g staff -d ${SVN_DIR} ${PROJECT_NAME}
[edit]

プロジェクトディレクトリの作成

echo mkdir -p ${PROJECT_DIR}/htdocs
echo chown -R ${PROJECT_NAME}:staff ${PROJECT_DIR}
echo chmod g+w -R ${PROJECT_DIR}
[edit]

SVNレポジトリの作成

echo svnadmin create --fs-type fsfs ${SVN_DIR}
echo chown -R ${PROJECT_NAME}:staff ${SVN_DIR}
echo chmod -R g+w ${SVN_DIR}
[edit]

PostgreSQLの設定

# CREATE USER文にすればパスワードを求められなくてすむんだけどやってない
echo sudo -u postgres createuser -S -D -R -P ${PROJECT_NAME}
echo sudo -u postgres createdb --owner=${PROJECT_NAME} ${TRAC_DB}
[edit]

tracディレクトリの複製

echo cp -a ${SAMPLE_PROJECT_TRAC_DIR} ${TRAC_DIR}
echo chown -R ${PROJECT_NAME}:staff ${TRAC_DIR}
echo chmod -R g+w ${TRAC_DIR}
echo chmod ugo+w ${TRAC_DIR}/attachments
echo chmod ugo+w ${TRAC_DIR}/log
echo rm -rf ${TRAC_DIR}/plugins
# プラグインは雛形を参照するようにシンボリックリンクにしておく
echo ln -s ${SAMPLE_PROJECT_TRAC_DIR}/plugins ${TRAC_DIR}/plugins
[edit]

tracデータベースの複製

# PGPASSWORD環境変数を使えばパスワードを求められないようにできるけどやってない
# 参考) 環境変数
# http://www.postgresql.jp/document/pg653doc/ej/programmer/libpq-envars.htm
echo "pg_dump -O -U sample sample_trac > /tmp/.setup_project_sample_trac.sql"
echo "psql -U ${PROJECT_NAME} ${TRAC_DB} < /tmp/.setup_project_sample_trac.sql"
echo "rm -f /tmp/.setup_project_sample_trac.sql"
[edit]

セットアップ

# trac.iniの変更
echo perl -pi -e \'s!^name = sample!name = ${PROJECT_NAME}!\' ${TRAC_DIR}/conf/trac.ini
echo perl -pi -e \'s!^database = postgres://sample:${SAMPLE_PROJECT_TRAC_DB_PASSWORD}\@localhost/sample_trac!database = ${POSTGRES_URI}!\' ${TRAC_DIR}/conf/trac.ini
echo perl -pi -e \'s!^repository_dir = ${SAMPLE_PROJECT_SVN_DIR}!repository_dir = ${SVN_DIR}!\' ${TRAC_DIR}/conf/trac.ini
echo perl -pi -e \'s!^url = http://example.org!url = ${PROJECT_TRAC_URL}!\' ${TRAC_DIR}/conf/trac.ini
echo perl -pi -e \'s!^link = http://example.org/!link = ${PROJECT_TRAC_URL}!\' ${TRAC_DIR}/conf/trac.ini
[edit]

エントリーポイント用のfcgiの設定

echo cp /usr/share/trac/cgi-bin/trac.fcgi ${PROJECT_DIR}/htdocs/trac
cat <<EOB                                                                                                                    
cat <<EOF | patch -d ${PROJECT_DIR}/htdocs/                                                                                  
*** trac.orig   2008-03-05 11:57:50.000000000 +0900
--- trac      2008-03-05 11:56:57.000000000 +0900
***************
*** 15,20 ****
--- 15,23 ----
  #                                                                                                                          
  # Author: Jonas BorgstrC6m <jonas@edgewall.com>                                                                            

+ import os
+ os.environ['TRAC_ENV'] = "${TRAC_DIR}"
+
  try:
      from trac.web import fcgi_frontend
      fcgi_frontend.run()
EOF                                                                                                                          
EOB                                                                                                                          

cat <<EOB                                                                                                                    
cat > ${PROJECT_DIR}/htdocs/.htaccess <<EOF                                                                                  
<Files trac>
 SetHandler fcgid-script
</Files>
EOF                                                                                                                          
EOB
[edit]

再起動

echo "/etc/init.d/httpd restart"

投稿者志田 | パーマリンク

| append.gif

tag: trac, ネットワーク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-03-07 (金) 14:58:03 (4237d)

アークウェブのサービスやソリューションはこちら