(18日目) blockdiag を Trac wiki で使ってみよう
Sphinx & blockdiag アドベントカレンダーに戻って 18日目です。
もう少しでクリスマスですね。この荒行のような毎日が終わると思うと心も弾みます。
今日は blockdiag を Trac 上の Wiki で動かしてみます。
Trac は Python で記述されたプロジェクト管理ツールで、
イシュートラッカーや Wiki などのメインの機能に加えて、
豊富なプラグインが提供されているので多くの人に利用されているツールです。
Trac プラグインのひとつとして、Wiki に blockdiag の図を埋め込む TracBlockDiagPlugin があります。
TrackBlockDiagPlugin は @wonderful_panda さんによって開発されたプラグインです。
今日はこのプラグインを利用して blockdiag を使ってみようと思います。
インストール
Trac は Debian パッケージになっていますが、最新版の 0.12 が強くおすすめとのことなので、
easy_install でインストールすることにします。
TracBlockDiagPlugin も URL を指定することで easy_install 経由でインストールできます。
$ sudo easy_install trac $ sudo easy_install http://trac-hacks.org/svn/tracblockdiagplugin/0.12
Trac はインストールした後、trac-admin コマンドをつかってプロジェクト関係のファイルを生成する必要があります。
この部分はちょっと Sphinx に似ているかもしれません。
ここでは /var/lib/trac 以下にプロジェクト関係のファイルを設置しています。
途中で尋ねられる質問はふたつで、プロジェクト名称とデータベース設定です。
プロジェクト名称はちゃんと設定しておきましょう。
$ hash -r $ sudo mkdir -p /var/lib/trac/ $ cd /var/lib/trac/ $ sudo trac-admin test-proj initenv Creating a new Trac environment at /var/lib/trac/test-proj Trac will first ask a few questions about your environment in order to initialize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descriptions. Project Name [My Project]> Please specify the connection string for the database to use. By default, a local SQLite database is created in the environment directory. It is also possible to use an already existing PostgreSQL database (check the Trac documentation for the exact connection string syntax). Database connection string [sqlite:db/trac.db]> ask a few questions about your environment Creating and Initializing Project Installing default wiki pages TracBackup imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracBackup TitleIndex imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TitleIndex WikiRestructuredText imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiRestructuredText WikiPageNames imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiPageNames TracPlugins imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracPlugins TracRepositoryAdmin imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracRepositoryAdmin TracEnvironment imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracEnvironment WikiRestructuredTextLinks imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiRestructuredTextLinks TracReports imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracReports TracPermissions imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracPermissions InterMapTxt imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/InterMapTxt TracGuide imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracGuide TracModWSGI imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracModWSGI TracUpgrade imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracUpgrade TracBrowser imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracBrowser TracQuery imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracQuery WikiStart imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiStart TracWiki imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracWiki TracNotification imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracNotification TracTickets imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracTickets TracIni imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracIni TracAdmin imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracAdmin TracTicketsCustomFields imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracTicketsCustomFields TracChangeset imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracChangeset TracRoadmap imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracRoadmap TracUnicode imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracUnicode TracLogging imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracLogging SandBox imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/SandBox TracNavigation imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracNavigation TracAccessibility imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracAccessibility InterWiki imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/InterWiki TracFineGrainedPermissions imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracFineGrainedPermissions InterTrac imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/InterTrac WikiNewPage imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiNewPage WikiFormatting imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiFormatting TracSearch imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracSearch TracSupport imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracSupport WikiProcessors imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiProcessors WikiMacros imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiMacros TracTimeline imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracTimeline TracRss imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracRss TracInterfaceCustomization imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracInterfaceCustomization TracInstall imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracInstall TracFastCgi imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracFastCgi TracStandalone imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracStandalone TracLinks imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracLinks RecentChanges imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/RecentChanges PageTemplates imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/PageTemplates TracSyntaxColoring imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracSyntaxColoring TracWorkflow imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracWorkflow TracImport imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracImport TracCgi imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracCgi TracModPython imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracModPython WikiHtml imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiHtml WikiDeletePage imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/WikiDeletePage CamelCase imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/CamelCase TracRevisionLog imported from /usr/local/lib/python2.6/dist-packages/Trac-0.12.2-py2.6.egg/trac/wiki/default-pages/TracRevisionLog --------------------------------------------------------------------- Project environment for 'My Project' created. You may now configure the environment by editing the file: /var/lib/trac/test-proj/conf/trac.ini If you'd like to take this new project environment for a test drive, try running the Trac standalone web server `tracd`: tracd --port 8000 /var/lib/trac/test-proj Then point your browser to http://localhost:8000/test-proj. There you can also browse the documentation for your installed version of Trac, including information on further setup (such as deploying Trac to a real web server). The latest documentation can also always be found on the project website: http://trac.edgewall.org/ Congratulations!
次に TracBlockDiagPlugin の設定を行います。
プロジェクトのディレクトリ配下の conf/trac.ini を以下のように編集します。
$ sudo vi /var/lib/trac/test-proj/conf/trac.ini [components] blockdiagplugin.* = enabled [blockdiag] font = /usr/share/fonts/truetype/ipafont/ipagp.ttf >|| プロジェクトを作成した後、Web 公開を行うための設定をします。 trac-admin コマンドの deploy オプションで公開用ファイル群を生成します。 >|sh| $ sudo trac-admin /var/lib/trac/test-proj/ deploy /var/www/trac/test-proj $ sudo chown -R www-data /var/lib/trac $ sudo chown -R www-data /var/www/trac
次に認証用のアカウント定義ファイルを作成します。
htpasswd 形式ですので他のツールで生成してもよいでしょう。
$ sudo htpasswd -c /var/lib/trac/test-proj/trac.htpasswd tk0miya $ sudochown -R www-data /var/lib/trac/test-proj/trac.htpasswd
Trac の動かし方には CGI, FastCGI, デーモン起動などいくつかやり方があるようですが、
今回はデーモンとして起動して、Apache をリバースプロキシとして利用する設定にします。
まずは Trac デーモンを自動起動させるために init スクリプトを設置します。
以下のスクリプトを /etc/init.d/tracd-test-proj として保存します。
ポート番号やディレクトリなどは必要に応じて適宜設定を書き換えてご利用ください。
#!/bin/sh set -e TRACD=/usr/local/bin/tracd USER=www-data PORT=8082 OPTION='/var/lib/trac/test-proj' PIDFILE='/var/lib/trac/test-proj/tracd.pid' AUTH=`basename $OPTION`',/var/lib/trac/test-proj/trac.htpasswd,realm' case "$1" in 'restart') $0 stop sleep 1 $0 start ;; 'start') /bin/su - $USER -c "$TRACD --daemonize --port $PORT --pidfile $PIDFILE \ --basic-auth $AUTH $OPTION" 'stop') if [ -e $PIDFILE ]; then /bin/su - $USER -c "/bin/kill `cat $PIDFILE`" rm $PIDFILE fi ;; *) echo "Usage: $0 { start | stop | restart }" exit 1 ;; esac
生成した init スクリプトに実行権限を与えて、起動設定をします。
$ sudo chmod +x /etc/init.d/tracd-test-proj $ sudo update-rc.d tracd-test-proj defaults 80 $ sudo /etc/init.d/tracd-test-proj start
次に Apache の設定をします。
mod_proxy を有効にし、trac 用のプロキシ設定を追加します。
これも VirtualHost やパスなどは必要に応じて適宜書き換えてください。
$ sudo a2enmod proxy proxy_http $ sudo sudo vi /etc/apache2/conf.d/trac ProxyRequests Off # Disable forward proxy ProxyPass /test-proj http://localhost:8082/test-proj ProxyPassReverse /test-proj http://localhost:8082/test-proj $ sudo /etc/init.d/apache restart
使ってみる
Trac の画面から Wiki の編集を選択します。
サンプルとして以下のテキストを入力してみます。
{{{#blockdiag(type=png) { A -> B -> C, D; } }}} {{{#!seqdiag(type=png) { A -> B -> C -> B; } }}}
保存すると次のように Trac の Wiki ページ内に blockdiag や seqdiag の図を埋め込むことができます。
すこし前後に {{{ や }}} などの記号が必要ですが、それ以外は普段の blockdiag の書き方と一緒です。
blockdiag を使うことで、Trac の Wiki にも図を簡単に埋めこむことができるようになりました。
これで少しドキュメンテーションが楽になるのではないでしょうか。