結局、Subversionのウェブ管理インターフェースは、
方針を変え、USVN(http://www.usvn.info/)を利用することにしました。
(インストールしたバージョンは最新版の1.0.5。)
私以外...複数人でのソフトウェア開発に利用したいと考えているので、
SVNについてもWebブラウザから利用できるインターフェースは必須なのです。
で・・・今回は、そこにTracも使いたいというお話です。
(SubminはTracとの連携に対応していますが、
USVNはTracに関しては特に連携などは一切考えられていないようです。)
結果から出すとこんな感じになりました。
プロジェクト管理画面のアクション欄に、ボタンが一つ増えています。
(プラスマークのボタンを押すと、Tracプロジェクトを作成。
既にプロジェクトがある場合は、フォルダアイコンが表示されます。)
USVN 1.0.5 (なんちゃってTracインストール機能追加版w) |
(執筆時点の最新版は、Trac-0.12.2.ja1)
http://www.i-act.co.jp/project/products/products.html
$ wget http://www.i-act.co.jp/project/products/downloads/Trac-0.12.2.ja1.zipこういう変更をした...という備忘録のために...
$ unzip Trac-0.12.2.ja1.zip
$ cd Trac-0.12.2.ja1
$ python ./setup.py install
以下の通り、記録しておきます。
(今回は、記録が一番の目的のため、詳しいコメントなどは記載していません m(__)m)
念の為、言い訳と前置きを(><;)
- 今回、思いっきり(<適当に手当り次第に>)、USVNのPHPスクリプトを弄っています。
(USVNのバージョン:1.0.5) - 環境:
- USVNのパス: /var/usvn
- Subversionリポジトリのパス: /var/svn
- 弄るにあたって、APIドキュメントなど資料はサーバが落ちているのかアクセスできず、情報を得られませんでした。
- 幸い、モデル化がきちんと行われており構造がわかりやすく、拡張を考えた作りになっていました。
- 但し、PHPは未だ...まともにコードを書いたことがなく、
当然...使われているフレームワーク(有名なZend...)も殆ど知識がなく、
さらに悪いことに...作業を急いでいるために、(おっと...言い訳ばっかりだwww)
今回はじっくり時間をかけてソースコードを読んで...とは行けず...ある意味"やっつけ"です。 - モデルに...全然なってません。パラメータ...ベタ打ちラララ♪ですww(笑)
- 文字列のローカライズ...やってません。(といってもリンクくらいだけど)
- 以上の点の理由もふくめて、このページのコードの動作や、記載内容を実行した結果について、
一切保証できません。(責任も負えません。あしからず。) - そういうわけで、恐らく・・・随分ひどい書き換えになっていますww今回については...どうか目をつぶってやってください(^^;)) (←←
(また機会があれば...もっとちゃんとTracと連携する機能もつけてみたいな...と思ったりしてます。(お?←)
では...USVNのプロジェクト管理画面に
Tracプロジェクトを作成するためのリンクを設けていきます。
<USVNのディレクトリ>/library/USVN/Project.php:
getTracPath、getTracURL、installTracというメソッドを追加しています。
public static function getTracPath($project_name)
{
$tracdir = Zend_Registry::get('config')->trac->path.DIRECTORY_SEPARATOR.$project_name;
if(is_dir($tracdir)){
return $tracdir;
}else{
return NULL;
}
}
public static function getTracURL($project_name)
{
$tracdir = Zend_Registry::get('config')->trac->path.DIRECTORY_SEPARATOR.$project_name;
if(is_dir($tracdir)){
return Zend_Registry::get('config')->trac->url.$project_name;
}else{
return NULL;
}
}
public static function installTrac($project_name)
{
$table = new USVN_Db_Table_Projects();
$project = $table->fetchRow(array('projects_name = ?' => $project_name));
if ($project === null) {
throw new USVN_Exception(T_("Project %s doesn't exist."), $project_name);
}
if (!is_null(USVN_Project::getTracPath($project_name))) {
throw new USVN_Exception(T_("Trac was already installed in project %s ."), $project_name);
}
$arg = "";
$res = 0;
$cmd = 'sudo ' . Zend_Registry::get('config')->trac->tracadminscriptpath . " '".$project_name."'";
exec($cmd, $arg, $res);
return $res;
}
<USVNのディレクトリ>/app/controllers/ProjectadminController.php:
installtracActionメソッドを追加しています。
installtracActionメソッドを追加しています。
public function installtracAction()
{
USVN_Project::installTrac(str_replace(USVN_URL_SEP, '/', $this->getRequest()->getParam('name')));
$this->_redirect("/admin/project/");
}
<USVNのディレクトリ>/app/views/scripts/projectadmin/index.phtml:
プロジェクト管理画面に、Tracのインストールリンクを追加します。(尚、インストール済みなら、Tracを表示させるリンクに切り替わります。)
<?= $this->ACLLink($project->name) ?>
という記述がありますので、これの下あたりにでも、
<?= $this->tracLink('name', $project->name, $tracLinkText) ?>
を記述します。
<USVNのディレクトリ>/app/helpers/TracLink.php:
リンクを出力するコードです。
<?php
class USVN_View_Helper_TracLink {
public function tracLink($param, $name, $confirmText)
{
$tracURL = USVN_Project::getTracURL($name);
$front = Zend_Controller_Front::getInstance();
$view = Zend_Controller_Action_HelperBroker::getExistingHelper('viewRenderer')->view;
if(is_null($tracURL)){
$confirmText = "Do you really install the Trac for this project?";
$img = $view->img("add.png", 'Install Trac');
return $view->urlConfirm(array('action' => 'installTrac', $param => $name), $img, sprintf($confirmText, $name));
}else{
$img = $view->img("folder.png", "Access to trac.");
return '<a href="' . $tracURL. '">' . $img .'</a>';
}
}
}
<USVNのディレクトリ>/config/config.ini:
一応、Tracのパス、URLなどの設定をconfig.iniで行うようにしています。trac.path = "/var/trac/"書き換えはこんなところです。
trac.url = "http://example.com/trac/"
trac.tracadminscriptpath = "/var/usvn/trac-project-make.sh"
(1画面にボタンをつけたくらいで、何か他に画面をつけたわけでもないので・・・少ないです。)
ところで・・・trac-adminでプロジェクトを作成するのって、
sudoしないといけないんですね(汗;)
Apacheの実行権限だけで行けるんじゃないかと思ってたのですが、ダメでしたw
...ということで・・・
Apacheを動作させているユーザアカウントから
sudoをできるようにしてみたいと思います。つまり、PHPスクリプトなどからsudoを実行できるようにします。
(もちろん、sudoをApacheから実行できることについて、セキュリティ上の懸念は大いにあります。
今回、最低限対策はしますが、sudoをできてしまうことは当然、少なからず安全性が下がります。
実際に同じようなことをされる場合は、十分理解している場合にのみ行なってください。
もちろん、私は一切の責任を負えません。あしからず。)
ということで・・・Tracプロジェクトを作成するための
シェルスクリプトを作成します。
(これをUSVNからsudoをつけて実行させます。USVNと同じディレクトリに保存しておきます。)
# cd /var/usvn/
# touch trac-project-make.sh
# vi trac-project-make.sh
#! /bin/sh(1行目はシェルのパス、2行目がパラメータの処理、
PROJECTNAME=`echo $1 | sed -e "s/[^0-9a-zA-Z\-\_]*//g"`
/usr/local/bin/trac-admin /var/trac/$PROJECTNAME initenv $PROJECTNAME sqlite:db/trac.db svn /var/svn/$PROJECTNAME
chown apache:apache /var/trac/$PROJECTNAME/ -R
3行目でtrac-adminを実行してプロジェクトを作り、
4行目でそのパーミッションを調整しています。)
作成したスクリプトは所有者を変更してApache用のユーザに。実行権限もつけます。
# chown apache:apache trac-project-make.sh次にvisudoコマンドを実行して、sudoを実行できるユーザの定義を追加します。
# chmod apache u+x
# visudo
具体的には末尾に以下のような行を追加します:
apache ALL = NOPASSWD: /var/usvn/trac-project-make.sh(こうすることで、端末を持たないApache向けユーザ"apache"にパスワード無しでのsudoを許すものの、
Defaults:apache !requiretty
先程作成したスクリプト以外にはsudoが使えないようになります。これは最低限の安全策です。)
Tracの認証は、Apacheへの設定ファイルによりこんな感じに。
(ちょうど、USVNがhtpasswdファイルを作ってくれますのでそれを利用。)
<Location /trac>以上となります。
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /***/
SetEnv PYTHON_EGG_CACHE /var/www/.egg-cache
</Location>
<locationMatch "/[[:alnum:]]+/login">
AuthType Basic
AuthName "Trac authorization."
AuthUserFile /****/.htpasswd
Require valid-user
</locationMatch>
追記: USVNでsvnコマンドのパスが通っていない問題は
(CentOSの場合) /etc/sysconfig/httpd に
PATHを記述する。http://d.hatena.ne.jp/masahi6/20090720/1248081907
0 件のコメント:
コメントを投稿
お気軽にコメントをお寄せください m(_ _)m♪
"コメントの記入者"欄から[名前/URL]を選ぶと、登録なしでコメント投稿していただけます。