« kanonをTrac1.0.1対応に変更してみた | トップページ | TracLightningにコバンザメしてKanonと同様にPluginをインストールする »

2013年11月24日 (日)

kanonをTrac1.0.1+MySQL対応に変更してみた

Tracをいろいろ使っていると、Excelと連携しなきゃいけないことってよくあります。そうなるとXMLRPCを使うってことになるんですが、遅いとか独自に追加したテーブルが見えないとか文句言われます。XMLRPCPluginを拡張してサーバサイドでSQL実行すればとか言っても、そんなこと無理みたいです。今のところ社内のネットにサーバをおいているので、MySQLのポートには普通に使えるから、DBをMySQLに変更すればいいんだからそうすれば?って言っても無理なんですよね。だいたいそんなことできるのは自分でTracインストールできる人に限られるわけで、一般的には難しいんだろうなぁと思っていたら、なぜか自分がやらなきゃいけなくなってしまいました。
ということでやってみたんですが、エラーチェックとかも入ってないし、あまり確認もしていません。
やったことは、
1. MySQL関連のパッケージのインストール
2. kanon-create-projectでSQLiteのコマンドのところをMySQLに切り替えられるように
3. テンプレートにあるレポートのSQLの関数がMySQLように変更
の三つですかね。
CentOSのインストールからプロジェクトの作成までの手順は
1. CentOS6.4をminimalでインストール
2. rootでログインして一般ユーザを追加する
# adduser ユーザ名
# password ユーザ名
3. 起動時にネットを有効になるようにする
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
  onbootをyesに変更する。DHCPでないならいろいろ設定してください必要ならresolv.confとかも
4. ネット使えるように
# service network restart
必要ならProxyを設定してください
5. hgをインストールする
# yum -y install hg
6. そのほかをアップデートしておく
# yum -y update
7. 再起動する
# reboot
8. 一般ユーザでログインする(できればsshで)
9. bitbucketのリポジトリをcloneする
$ hg clone https://bitbucket.org/okamototk/kanonconductor
10. パッチを何等かの方法でコピーし適用する(viを起動して貼り付けるとか)
$ cd kanonconductor
$ hg import ../patch3.txt --user ユーザ名
$ su
# ./kanon-setup
y
n
n
11. 説明面倒なのでfirewallを止めてしまいます
# service iptables stop
# chkconfig iptables off
# service ip6tables stop
# chkconfig ip6tables off
12. ブラウザでSampleProjectに接続確認
13. MySQLの設定等
# service mysqld start
# chkconfig mysqld on
14. rootパスワードの設定
# mysql -u root -p
インストール直後はパスワードなしでEnter
mysql> set password for root@localhost=PASSWORD('パスワード');
mysql> quit
15. MySQL設定ファイルを編集
# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default-character-set=utf8
character-set-server = utf8
skip-character-set-client-handshake
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
16. MySQLサービスを再起動
# service mysqld start
17. MySQLプロジェクトの作成
/opt/kanon/bin/kanon-create-project test1 svn default n y パスワード
たぶんこれで大丈夫かなぁ。だめならコメントしてください。
diff -r 6f8292651be4 etc/opt/kanon/trac-template/agile/trac-init-mysql.sql
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/opt/kanon/trac-template/agile/trac-init-mysql.sql     Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,277 @@
+UPDATE enum SET name = '対応済' WHERE type ='resolution' AND value = '1';
+UPDATE enum SET name = '不正' WHERE type ='resolution' AND value = '2';
+UPDATE enum SET name = '対応しない' WHERE type ='resolution' AND value = '3';
+UPDATE enum SET name = '重複' WHERE type ='resolution' AND value = '4';
+UPDATE enum SET name = '再現しない' WHERE type ='resolution' AND value = '5';
+UPDATE enum SET name = '最重要' WHERE type ='priority' AND value = '1';
+UPDATE enum SET name = '重要' WHERE type ='priority' AND value = '2';
+UPDATE enum SET name = '普通' WHERE type ='priority' AND value = '3';
+UPDATE enum SET name = '低い' WHERE type ='priority' AND value = '4';
+UPDATE enum SET name = '最低' WHERE type ='priority' AND value = '5';
+UPDATE component SET name='チームA' WHERE name = 'component1';
+UPDATE component SET name='チームB' WHERE name = 'component2';
+UPDATE milestone SET name ='スプリント0(準備)', description='[/burndown?selected_milestone=スプリント0(準備) バーンダウンチャートへのリンク][[BR]]開発の準備の スプリント。開発環境の準備、全体のアーキテクチャデザイン、プロトタイプ検証などを実施' WHERE name = 'milestone1';
+UPDATE milestone SET name ='スプリント1', description='[/burndown?selected_milestone=スプリント1 バーンダウンチャートへのリンク][[BR]]スプリント1' WHERE name = 'milestone2';
+UPDATE milestone SET name ='スプリント3', description='[/burndown?selected_milestone=スプリント2 バーンダウンチャートへのリンク][[BR]]スプリント2' WHERE name = 'milestone3';
+UPDATE milestone SET name ='スプリント4(リリース準備)', description='[/burndown?selected_milestone=スプリント4(リリース準備) バーンダウンチャートへのリンク][[BR]]リリース準備のためのスプリント' WHERE name = 'milestone4';
+DELETE FROM version WHERE name = '1.0';
+DELETE FROM version WHERE name = '2.0';
+UPDATE enum SET name = 'ストーリー' WHERE type ='ticket_type' AND value = '1';
+UPDATE enum SET name = 'タスク' WHERE type ='ticket_type' AND value = '2';
+UPDATE enum SET name = 'バグ' WHERE type ='ticket_type' AND value = '3';
+INSERT INTO enum VALUES('ticket_type', '課題', '4');
+
+INSERT INTO session_attribute values ('admin', '1','name','管理太郎');
+INSERT INTO session_attribute values ('admin', '1','enabled','1');
+INSERT INTO session_attribute values ('guest', '1','name','客人開発者');
+INSERT INTO session_attribute values ('guest', '1','enabled','1');
+INSERT INTO session_attribute values ('leader', '1','name','頭春蔵');
+INSERT INTO session_attribute values ('leader', '1','enabled','1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'admin-penguin.png',0,0,'admin', 'Avatar','127.0.0.1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'guest-hamster.png',0,0,'guest', 'Avatar','127.0.0.1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'leader-cat.png',0,0,'leader', 'Avatar','127.0.0.1');
+
+
+INSERT INTO report VALUES(18,'trac',"バックログの確認",
+"SELECT
+  CASE tt.status WHEN 'closed' THEN 5 WHEN 'new' THEN 3 ELSE 1 END AS __color__,
+   (CASE tt.status
+      WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
+      ELSE
+        (CASE tt.owner WHEN $USER THEN 'font-weight: bold' END)
+    END) AS __style__,
+  tt.milestone AS __group__,
+  t.id AS ticket,
+  '' AS 'ストーリー',
+  '[/ticket/'||tt.id||' #'||tt.id||']' AS description,
+  tt.summary AS 'タスク',
+  tt.owner AS '担当者',
+  tt.status AS '状態',
+  CASE WHEN st.child IS NULL THEN peh.value ELSE eh.value END AS '見積',
+  CASE WHEN st.child IS NULL THEN pth.value ELSE th.value END AS '作業時間',
+  '' AS 説明,
+  t.id AS _id
+FROM ticket t
+  LEFT JOIN subtickets st  ON st.parent =t.id AND t.type='ストーリー'
+  LEFT JOIN ticket tt ON tt.id=st.child
+  LEFT JOIN milestone m ON t.milestone = m.name
+  LEFT JOIN ticket_custom eh ON eh.ticket = tt.id AND eh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom th ON th.ticket = tt.id AND th.name = 'totalhours'
+  LEFT JOIN ticket_custom peh ON peh.ticket = t.id AND peh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom pth ON pth.ticket = t.id AND pth.name = 'totalhours'
+WHERE t.type='ストーリー'  AND st.child IS NOT NULL AND t.status <> 'closed'
+
+UNION
+
+SELECT
+  4 AS __color__,
+  'color: black; font-weight: bold;'  AS __style__,
+  t.milestone AS __group__,
+  t.id AS ticket,
+  t.summary AS 'ストーリー',
+  '',
+  '',
+  '',
+  '',
+  '',
+  '',
+  '[/newticket?type=タスク&parents='||t.id||'&milestone='||t.milestone||' タス ク作成]' AS  説明,
+  t.id AS _id
+FROM ticket t
+WHERE t.type='ストーリー' AND t.status<>'closed'
+
+UNION
+
+SELECT
+  CASE t.status WHEN 'closed' THEN 5 WHEN 'new' THEN 3 ELSE 1 END AS __color__,
+   (CASE t.status
+      WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
+      ELSE
+        (CASE t.owner WHEN $USER THEN 'font-weight: bold' END)
+    END) AS __style__,
+  t.milestone AS __group__,
+  '-' AS ticket,
+  'その他:' ||t.type AS 'ストーリー',
+  '[/ticket/'||t.id||' #'||t.id||']' AS description,
+  t.summary as 'タスク',
+  t.owner AS '担当者',
+  t.status AS '状態',
+  eh.value AS '見積',
+  th.value AS '作業時間',
+  '',
+  NULL AS _id
+FROM ticket as t
+  LEFT JOIN ticket_custom eh ON eh.ticket = t.id AND eh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom th ON th.ticket = t.id AND th.name = 'totalhours'
+WHERE NOT t.type IN ('ストーリー')  AND
+  NOT EXISTS (SELECT * from subtickets WHERE subtickets.child = t.id)
+
+ORDER BY __group__ DESC, ticket, description","
+ * スプリント毎のストーリー(プロダクトバックログ)とタスク(スプリントバックログ)を確認することができます。
+ * 各スプリントのスプリントバックログ(タスク)の一覧を表示します。スプリントバックログはプロダクトバックログ(ストーリー)に紐づいている必要があります。
+ * 一番右のタスク作成をクリックすると、ストーリーに対応したタスクを作成することができます。
+ * クローズされたチケットはグレーで表示されます。
+");
+
+
+INSERT INTO report VALUES(19,'trac',"バックログの確認(チーム別)",
+"SELECT
+  CASE tt.status WHEN 'closed' THEN 5 WHEN 'new' THEN 3 ELSE 1 END AS __color__,
+   (CASE tt.status
+      WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
+      ELSE
+        (CASE tt.owner WHEN $USER THEN 'font-weight: bold' END)
+    END) AS __style__,
+  tt.milestone AS __group__,
+  t.id AS id,
+  '' AS 'ストーリー',
+  tt.id AS ticket,
+  tt.summary AS 'タスク',
+  tt.owner AS '担当者',
+  tt.status AS '状態',
+  CASE WHEN st.child IS NULL THEN peh.value ELSE eh.value END AS '見積',
+  CASE WHEN st.child IS NULL THEN pth.value ELSE th.value END AS '作業時間',
+  '' AS description
+FROM ticket t
+  LEFT JOIN subtickets st  ON st.parent =t.id AND t.type='ストーリー'
+  LEFT JOIN ticket tt ON tt.id=st.child
+  LEFT JOIN milestone m ON t.milestone = m.name
+  LEFT JOIN ticket_custom eh ON eh.ticket = tt.id AND eh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom th ON th.ticket = tt.id AND th.name = 'totalhours'
+  LEFT JOIN ticket_custom peh ON peh.ticket = t.id AND peh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom pth ON pth.ticket = t.id AND pth.name = 'totalhours'
+WHERE t.component=$TEAM AND t.type='ストーリー'  AND st.child IS NOT NULL AND t.status <> 'closed'
+
+UNION
+
+SELECT
+  4 AS __color__,
+  'color: black; font-weight: bold;'  AS __style__,
+  t.milestone AS __group__,
+  t.id AS id,
+  t.summary AS 'ストーリー',
+  '',
+  '',
+  '',
+  '',
+  '',
+  '',
+  '[/newticket?type=タスク&parents='||t.id||'&milestone='||t.milestone||' タス ク作成]' AS  description
+FROM ticket t
+WHERE t.component=$TEAM AND t.type='ストーリー' AND t.status<>'closed'
+
+UNION
+
+SELECT
+  CASE t.status WHEN 'closed' THEN 5 WHEN 'new' THEN 3 ELSE 1 END AS __color__,
+   (CASE t.status
+      WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
+      ELSE
+        (CASE t.owner WHEN $USER THEN 'font-weight: bold' END)
+    END) AS __style__,
+  t.milestone AS __group__,
+  '-' AS id,
+  'その他:' ||t.type AS 'ストーリー',
+  t.id AS ticket,
+  t.summary as 'タスク',
+  t.owner AS '担当者',
+  t.status AS '状態',
+  eh.value AS '見積',
+  th.value AS '作業時間',
+  ''
+FROM ticket as t
+  LEFT JOIN ticket_custom eh ON eh.ticket = t.id AND eh.name = 'estimatedhours'
+  LEFT JOIN ticket_custom th ON th.ticket = t.id AND th.name = 'totalhours'
+WHERE t.component=$TEAM AND NOT t.type IN ('ストーリー')  AND
+  NOT EXISTS (SELECT * from subtickets WHERE subtickets.child = t.id)
+
+ORDER BY __group__ DESC, id,ticket DESC","
+ * チーム別のスプリントのストーリー(プロダクトバックログ)とタスク(スプリントバ ックログ)を確認することができます。
+ * {{{[report:19?TEAM=チームA チームAのバックログ]}}}のように、レポートのリンク、もしくはURLの最後にTEAM変数でチーム名を指定して利用します。
+ * 各スプリントのスプリントバックログ(タスク)の一覧を表示します。スプリントバックログはプロダクトバックログ(ストーリー)に紐づいている必要があります。
+ * 一番右のタスク作成をクリックすると、ストーリーに対応したタスクを作成することができます。
+ * クローズされたチケットはグレーで表示されます。
+");
+
+
+
+INSERT INTO report VALUES(20,'trac',"スプリント計画・担当者割り当て","
+query:?status=accepted
+&
+status=assigned
+&
+status=new
+&
+status=reopened
+&
+type=タスク
+&
+group=milestone
+&
+col=id
+&
+col=parents
+&
+col=summary
+&
+col=type
+&
+col=priority
+&
+col=owner
+&
+col=estimatedhours
+&
+col=billable
+&
+col=status
+&
+order=priority,parents
+","
+このレポートはスプリント計画、担当者割り当てなどに利用します。
+
+バッチ編集機能により、'''チェックしたチケットを一括して'''スプリントに割り当て たり、担当者を割り当てることができます。
+
+ * プロダクトバックログは「集計に含める」をFalseに設定してください。
+ * スプリントバックログは「集計に含める」をTrueにしてバーンダウンチャートの工数に含めるようにします。
+ * スプリントバックログに対して見積時間を入力してください。
+");
+
+INSERT INTO report VALUES(21,'trac',"スプリント計画・プロダクトバックログの整理","
+query:?status=accepted
+&
+status=assigned
+&
+status=new
+&
+status=reopened
+&
+type=ストーリー゙
+&
+group=milestone
+&
+col=id
+&
+col=summary
+&
+col=status
+&
+col=type
+&
+col=owner
+&
+col=priority
+&
+col=estimatedhours
+&
+col=billable
+&
+order=priority
+","
+このレポートはスプリント計画時にスプリントで実行するプロダクトバックログを選択 するときに利用します。
+ * 次のスプリントで実施するチケットにチェックを入れて、バッチ編集でマイルストーンを設定してください。
+ * プロダクトバックログは「集計に含める」をFalseに設定してください。
+");
+
+
+
diff -r 6f8292651be4 etc/opt/kanon/trac-template/common/trac-1.0.ini
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/opt/kanon/trac-template/common/trac-1.0.ini   Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,214 @@
+# -*- coding: utf-8 -*-
+
+[attachment]
+max_size = 262144
+render_unsafe_content = false
+
+[browser]
+downloadable_paths = *
+hide_properties = svk:merge
+
+[changeset]
+max_diff_bytes = 10000000
+max_diff_files = 0
+wiki_format_messages = true
+
+[header_logo]
+alt =
+height = -1
+link = /trac
+src=site/logo.png
+width = -1
+
+[logging]
+log_file = trac.log
+log_level = INFO
+log_type = file
+
+[mimeviewer]
+enscript_modes = text/x-dylan:dylan:4
+enscript_path = enscript
+max_preview_size = 262144
+mime_map = text/x-trac-wiki:wiki
+php_path = php
+silvercity_modes =
+tab_width = 8
+
+[notification]
+always_notify_owner = false
+always_notify_reporter = false
+always_notify_updater = true
+ambiguous_char_width = double
+mime_encoding = base64
+smtp_always_bcc =
+smtp_always_cc =
+smtp_default_domain =
+smtp_enabled = false
+smtp_from = trac@localhost
+smtp_password =
+smtp_port = 25
+smtp_replyto = trac@localhost
+smtp_server = localhost
+smtp_subject_prefix = __default__
+smtp_user =
+use_public_cc = false
+use_short_addr = false
+use_tls = false
+
+[search]
+min_query_length = 2
+
+[ticket]
+default_component =
+default_milestone =
+default_priority = 通常
+default_type = タスク
+default_version =
+restrict_owner = false
+
+[timeline]
+changeset_long_messages = false
+changeset_show_files = 0
+default_daysback = 30
+ticket_show_details = true
+
+[trac]
+authz_file = /etc/opt/kanon/svnauthz
+nbase_url =
+check_auth_ip = true
+database = sqlite:db/trac.db
+default_charset = cp932
+#default_handler = TagsWikiModule
+htdocs_location =
+ignore_auth_case = false
+mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
+metanav = login,logout,settings,help,about
+permission_store = DefaultPermissionStore
+permission_policies = PrivateWikiSystem, DefaultPermissionPolicy, LegacyAttachmentPolicy
+repository_type = svn
+request_filters = PageQueryModule
+templates_dir = /etc/opt/kanon/trac-template/default
+timeout = 20
+
+
+[wiki]
+ignore_missing_pages = true
+split_page_names = false
+
+[account-manager]
+htdigest_realm = kanon
+password_format = htdigest
+password_store = HtDigestStore
+password_file = /etc/opt/kanon/kanon_users.htdigest
+
+[components]
+tracext.git.* = enabled
+tracbzr.* = enabled
+tracext.hg.backend.csetpropertyrenderer = enabled
+tracext.hg.backend.hgdefaultpropertyrenderer = enabled
+tracext.hg.backend.hgextpropertyrenderer = enabled
+tracext.hg.backend.mercurialconnector = enabled
+datefield.filter.customfieldadmintweak = enabled
+datefield.filter.datefieldmodule = enabled
+iniadmin.iniadmin.iniadminplugin = enabled
+acct_mgr.* = enabled
+acct_mgr.admin.accountmanageradminpage = disabled
+addcomment.macro.addcommentmacro = enabled
+ganttcalendar.ticketgantt.* = enabled
+ganttcalendar.ticketcalendar.* = enabled
+ganttcalendar.complete_by_close.completeticketobserver = enabled
+ganttcalendar.ticketvalidator.ticketvalidator = enabled
+ganttcalendar.admin.* = enabled
+tracjsgantt.tracjsgantt.taacjsganttsupport = enabled
+tracjsgantt.tracjsgantt.tracjsganttchart = enabled
+tracjsgantt.tracjsgantt.tracjsganttsupport = enabled
+tracusermanager.* = enabled
+completeuser.web_ui.completeuserweb = enabled
+tracwysiwyg.* = enabled
+#hudsontracplus.* = enabled
+svnauthz.admin_ui.* = enabled
+advancedworkflow.controller.*  = enabled
+# batchmod.web_ui.* = enabled
+tracmsofficexml.* = enabled
+querychart.admin.adminpanel = enabled
+querychart.macro.macro = enabled
+querychart.model.ticketstatuslogmodelprovider = enabled
+reportinclude.macro.reportincludemacro = enabled
+reportinclude.web_ui.reportincludemodule = enabled
+xdocview.xdocview.xdocrenderer = enabled
+talm_importer.importer.importmodule = enabled
+tracautowikify.autowikify.autowikify = enabled
+graphviz.graphviz.graphviz = enabled
+tracsectionedit.web_ui.wikisectioneditmodule = enabled
+privatewiki.api.privatewikisystem = enabled
+newwikipagebutton.newwikipagebutton.newwikipagebuttonplugin = enabled
+workfloweditor.workfloweditor_admin.workflowchangehandler = enabled
+workfloweditor.workfloweditor_admin.workfloweditoradmin = enabled
+# ticket_clone.simpleticketclonebutton = enabled
+tracdragdrop.* = enabled
+tracopt.ticket.commit_updater.committicketreferencemacro = enabled
+tracopt.ticket.commit_updater.committicketupdater = enabled
+tracopt.ticket.deleter.ticketdeleter = enabled
+tracdiscussion.api.discussionapi = enabled
+tracdiscussion.init.discussioninit = enabled
+themeengine.* = enabled
+kanontheme.theme.kanontheme = enabled
+kanontheme.themewater.kanonwatertheme = enabled
+tracrpc.api.xmlrpcsystem = enabled
+tracrpc.json_rpc.jsonrpcprotocol = enabled
+tracrpc.search.searchrpc = enabled
+tracrpc.ticket.* = enabled
+tracrpc.web_ui.rpcweb = enabled
+tracrpc.wiki.wikirpc = enabled
+tracrpc.xml_rpc.xmlrpcprotocol = enabled
+customfieldadmin.api.customfields = enabled
+customfieldadmin.customfieldadmin.customfieldadminpage = enabled
+tracopt.mimeview.enscript.enscriptrenderer = enabled
+tracopt.mimeview.php.phprenderer = enabled
+tracopt.perm.authz_policy.authzpolicy = enabled
+tracopt.perm.config_perm_provider.extrapermissionsprovider = enabled
+tracopt.ticket.clone.ticketclonebutton = enabled
+tracopt.versioncontrol.git.git_fs.csetpropertyrenderer = enabled
+tracopt.versioncontrol.git.git_fs.gitconnector = enabled
+tracopt.versioncontrol.git.git_fs.gitwebprojectsrepositoryprovider = enabled
+tracopt.versioncontrol.svn.svn_fs.subversionconnector = enabled
+tracopt.versioncontrol.svn.svn_prop.subversionmergepropertydiffrenderer = enabled
+tracopt.versioncontrol.svn.svn_prop.subversionmergepropertyrenderer = enabled
+tracopt.versioncontrol.svn.svn_prop.subversionpropertyrenderer = enabled
+
+[datefield]
+format = ymd
+
+[hudson]
+display_subprojects = true
+feed_url = http://localhost/hudson/rssAll
+main_page = http://localhost/hudson/
+
+[discussion]
+title=フォーラム
+
+[project]
+footer=Powerd by<br />Kanon<br /> Ver 0.1
+
+[theme]
+enable_css = enabled
+
+[notification]
+#TracLightningのパッチを当てないとchange.authorは有効にならない
+#ticket_subject_template = $prefix #$ticket.id: [$change.author] $summary
+ticket_subject_template = $prefix #$ticket.id: $summary
+
+[importer]
+datetime_format = %Y/%m/%d
+
+[trac-jsgantt]
+date_format = %Y/%m/%d
+fields.finish = due_close
+fields.parent = parents
+fields.percent = complete
+fields.start = due_assign
+
+[hudsonplus]
+display_in_new_tab = true
+hudson_url = http://localhost:8080/jenkins/
+navigation_label = ビルド
diff -r 6f8292651be4 etc/opt/kanon/trac-template/default/trac-init-mysql.sql
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/opt/kanon/trac-template/default/trac-init-mysql.sql   Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,65 @@
+UPDATE enum SET name = '対応済' WHERE type ='resolution' AND value = '1';
+UPDATE enum SET name = '不正' WHERE type ='resolution' AND value = '2';
+UPDATE enum SET name = '対応しない' WHERE type ='resolution' AND value = '3';
+UPDATE enum SET name = '重複' WHERE type ='resolution' AND value = '4';
+UPDATE enum SET name = '再現しない' WHERE type ='resolution' AND value = '5';
+UPDATE enum SET name = '今すぐ' WHERE type ='priority' AND value = '1';
+UPDATE enum SET name = '急いで' WHERE type ='priority' AND value = '2';
+UPDATE enum SET name = '高め' WHERE type ='priority' AND value = '3';
+UPDATE enum SET name = '通常' WHERE type ='priority' AND value = '4';
+UPDATE enum SET name = '低め' WHERE type ='priority' AND value = '5';
+UPDATE enum SET name = 'バグ' WHERE type ='ticket_type' AND value = '1';
+UPDATE enum SET name = '機能追加' WHERE type ='ticket_type' AND value = '2';
+UPDATE enum SET name = '仕様変更' WHERE type ='ticket_type' AND value = '3';
+UPDATE component SET name ='その他' WHERE name = 'component1';
+UPDATE component SET name ='ユーザ管理機能' WHERE name = 'component2';
+INSERT INTO component VALUES('検索機能', 'somebody', '');
+UPDATE milestone SET name ='要件定義完了', description='要件定義の完了' WHERE name = 'milestone1';
+UPDATE milestone SET name ='1.0αリリース', description='お客様の要件確認用のプロトタイプリリース。[[BR]][[QueryChart(query:?type=タスク,col:due_close,width:800)]]' WHERE name = 'milestone2';
+UPDATE milestone SET name ='1.0βリリース', description='機能試験終了後のお客様受け入れ試験用のリリース' WHERE name = 'milestone3';
+UPDATE milestone SET name ='1.0リリース', description='正式版リリース' WHERE name = 'milestone4';
+UPDATE version SET name ='1.0α' WHERE name = '1.0';
+UPDATE version SET name ='1.0β' WHERE name = '2.0';
+
+INSERT INTO enum VALUES('ticket_type', 'タスク', '4');
+INSERT INTO enum VALUES('ticket_type', '課題', '5');
+INSERT INTO enum VALUES('ticket_type', '連絡', '6');
+
+INSERT INTO session_attribute values ('admin', '1','name','管理太郎');
+INSERT INTO session_attribute values ('admin', '1','enabled','1');
+INSERT INTO session_attribute values ('guest', '1','name','客人開発者');
+INSERT INTO session_attribute values ('guest', '1','enabled','1');
+INSERT INTO session_attribute values ('leader', '1','name','頭春蔵');
+INSERT INTO session_attribute values ('leader', '1','enabled','1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'admin-penguin.png',0,0,'admin', 'Avatar','127.0.0.1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'guest-hamster.png',0,0,'guest', 'Avatar','127.0.0.1');
+INSERT INTO attachment values ('wiki', 'UserManagerPluginPictures', 'leader-cat.png',0,0,'leader', 'Avatar','127.0.0.1');
+
+INSERT INTO report VALUES('9','','未解決チケット(進捗確認用)',
+
+"SELECT owner AS __group__,
+   id AS ticket,
+   summary as '概要    ',
+   a.value as '開始日',
+   c.value as '終了日',
+   (CASE status WHEN 'assigned' THEN d.value||' *' ELSE d.value END) AS '達成率',
+   t.type AS 'タイプ ',
+   t.priority as '優先度',
+   changetime AS _changetime, description AS _description,
+   reporter AS _reporter,
+   (CASE  WHEN c.value ='' THEN 5
+          WHEN c.value < DATE_FORMAT(NOW(),'%Y/%m/%d') THEN 1
+          WHEN c.value < DATE_FORMAT(DATE_ADD(NOW(),interval 1 week),'%Y/%m/%d') THEN 2
+          ELSE 3 END) AS __color__
+  FROM ticket t
+  LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
+  LEFT JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign'
+  LEFT JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close'
+  LEFT JOIN ticket_custom d ON d.ticket = t.id AND d.name = 'complete'
+  WHERE status IN ('new', 'assigned', 'reopened')
+  ORDER BY owner, a.value, p.value, milestone, t.type, time","
+ * 担当者別に未解決チケットを表示します。
+ * 終了日順に表示し、終了日を過ぎたものは、赤で、終了日が1週間以内のものは黄色 で表示します。
+ * チケットに着手済みであれば、達成率に '*' が付与されます。
+ * 終了日が設定されていないものについては、青で表示します。
+");
diff -r 6f8292651be4 kanon-setup
--- a/kanon-setup       Tue Sep 03 02:25:18 2013 +0900
+++ b/kanon-setup       Sun Nov 24 00:00:48 2013 +0900
@@ -4,6 +4,7 @@
export KANON_OPT=/opt/kanon
export KANON_VAR=/var/opt/kanon
+export TRAC_VER=1.0
probe_debian() {
     if [ -f /etc/debian_version ]; then
@@ -103,6 +104,8 @@
if [ "$YN" = "y" ]
then
     JENKINS=y
+else
+    JENKINS=n
fi
@@ -226,7 +229,7 @@
else
     cp -frn etc/* /etc
fi
-
+cp etc/opt/kanon/trac-template/common/trac-1.0.ini /etc/opt/kanon/trac-template/common/trac.ini
### setup configuration
"$python" resource/virtualenv.py --distribute "$KANON_OPT"
@@ -272,19 +275,42 @@
     try_easy_install pygments
fi
-try_easy_install 'Genshi>=0.6,<0.7dev'
-try_easy_install 'Babel>=0.9.5,<1.0'
-try_easy_install 'Trac' http://www.i-act.co.jp/project/products/downloads/Trac-0.12.4.ja1.zip
-try_easy_install 'xlrd'
-try_easy_install 'xlwt'
-try_easy_install 'TracGit' https://github.com/hvr/trac-git-plugin/zipball/v0.12.0.5
-try_easy_install 'TracBzr'
-try_easy_install 'TracMercurial' http://svn.edgewall.org/repos/trac/plugins/0.12/mercurial-plugin
+if [ "$TRAC_VER" = "1.0" ]; then
+  try_easy_install 'Genshi'
+  try_easy_install 'Babel'
+#  try_easy_install 'Trac' http://www.i-act.co.jp/project/products/downloads/Trac-1.0.ja1.zip
+  try_easy_install 'Trac' http://download.edgewall.org/trac/Trac-1.0.1.zip
+  try_easy_install 'xlrd'
+  try_easy_install 'xlwt'
+#  try_easy_install 'TracGit' GitはTrac標準になった
+  try_easy_install 'TracBzr'
+#  try_easy_install 'TracMercurial' HGのpackageからインストールする
+else
+  try_easy_install 'Genshi>=0.6,<0.7dev'
+  try_easy_install 'Babel>=0.9.5,<1.0'
+  try_easy_install 'Trac' http://www.i-act.co.jp/project/products/downloads/Trac-0.12.4.ja1.zip
+  try_easy_install 'xlrd'
+  try_easy_install 'xlwt'
+  try_easy_install 'TracGit' https://github.com/hvr/trac-git-plugin/zipball/v0.12.0.5
+  try_easy_install 'TracBzr'
+  try_easy_install 'TracMercurial' http://svn.edgewall.org/repos/trac/plugins/0.12/mercurial-plugin
+fi
#resource/pluginsディレクトリのプラグインをインストール
pushd .
+if [ "$TRAC_VER" = "1.0" ]; then
+  RESOURCE_LIST=resource/trac-plugin-1.0
+  PLUGIN_LIST=pluginlist-1.0
+  PLUGIN_LIST_HG=pluginlist_hg-1.0
+  PLUGIN_LIST_GIT=pluginlist_git-1.0
+else
+  RESOURCE_LIST=resource/trac-plugin-0.12
+  PLUGIN_LIST=pluginlist
+  PLUGIN_LIST_HG=
+  PLUGIN_LIST_GIT=
+fi
-for i in `ls -1 resource/trac-plugins`; do
+for i in `cat $RESOURCE_LIST`; do
     rm -rf "resource/trac-plugins/$i/build" "resource/trac-plugins/$i/dist"
     if ! "$KANON_OPT/bin/easy_install" -Z --no-deps "resource/trac-plugins/$i"; then
         echo "*** STOP *** インストールに失敗しました: resource/trac-plugins/$i"
@@ -293,7 +319,7 @@
done
# install plugins from web site
-for i in `cat pluginlist`; do
+for i in `cat $PLUGIN_LIST`; do
     workdir=`mktemp -d /tmp/kanon_build.XXXXXXXX` || exit 1
     svn co -q $i $workdir
     if ! "$KANON_OPT/bin/easy_install" -Z $workdir; then
@@ -302,6 +328,30 @@
     fi
     rm -fr "$workdir"
done
+if [ "$PLUGIN_LIST_HG" != "" ]
+then
+  for i in `cat $PLUGIN_LIST_HG`; do
+      workdir=`mktemp -d /tmp/kanon_build.XXXXXXXX` || exit 1
+      hg clone $i $workdir
+      if ! "$KANON_OPT/bin/easy_install" -Z $workdir; then
+          echo "*** STOP *** インストールに失敗しました: $i"
+          exit 1
+      fi
+      rm -fr "$workdir"
+  done
+fi
+if [ "$PLUGIN_LIST_GIT" != "" ]
+then
+  for i in `cat $PLUGIN_LIST_GIT`; do
+      workdir=`mktemp -d /tmp/kanon_build.XXXXXXXX` || exit 1
+      git clone $i $workdir
+      if ! "$KANON_OPT/bin/easy_install" -Z $workdir; then
+          echo "*** STOP *** インストールに失敗しました: $i"
+          exit 1
+      fi
+      rm -fr "$workdir"
+  done
+fi
popd
@@ -363,7 +413,7 @@
# setup SampleProject
if [ ! -d "$KANON_VAR/trac/SampleProject" ]
then
-    "$KANON_OPT/bin/kanon-create-project" SampleProject svn default y
+    "$KANON_OPT/bin/kanon-create-project" SampleProject svn default $JENKINS
     svn import SampleProject file://$KANON_VAR/svn/SampleProject/ -m "initial import."
     chown $APACHE_USER.$APACHE_USER -R $KANON_VAR/svn/SampleProject
fi
diff -r 6f8292651be4 opt/kanon/bin/kanon-create-project
--- a/opt/kanon/bin/kanon-create-project        Tue Sep 03 02:25:18 2013 +0900
+++ b/opt/kanon/bin/kanon-create-project        Sun Nov 24 00:00:48 2013 +0900
@@ -10,6 +10,12 @@
REPO_TYPE=$2
TEMPLATE=$3
JENKINS=$4
+MYSQL=$5
+DBROOTUSER=root
+DBROOTPW=$6
+DBNAME=trac_$1
+DBUSERNAME=user_$1
+DBUSERPW=`mkpasswd -s 0`
export PYTHONPATH=$KANON_HOME/lib/python2.6:$KANON_HOME/lib/python2.6/site-packages
export PATH=$KANON_HOME/bin:$PATH
@@ -201,14 +207,26 @@
    exit
fi
+# DATABASE作成
+if [ "$MYSQL" = 'y' ]
+then
+   mysql -u $DBROOTUSER --password=$DBROOTPW -e "DROP DATABASE IF EXISTS $DBNAME;"
+   mysql -u $DBROOTUSER --password=$DBROOTPW -e "create database $DBNAME DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
+   mysql -u $DBROOTUSER --password=$DBROOTPW -e "create user $DBUSERNAME IDENTIFIED BY '$DBUSERPW';"
+   mysql -u $DBROOTUSER --password=$DBROOTPW -e "GRANT ALL ON $DBNAME.* TO $DBUSERNAME@localhost IDENTIFIED BY '$DBUSERPW';"
+   mysql -u $DBROOTUSER --password=$DBROOTPW -e "GRANT ALL ON $DBNAME.* TO $DBUSERNAME@'%' IDENTIFIED BY '$DBUSERPW';"
+   DB_CONNECT_STR="mysql://$DBUSERNAME:$DBUSERPW@localhost/$DBNAME"
+else
+   DB_CONNECT_STR=sqlite:db/trac.db
+fi
# trac作成
TRAC_PROJECT_PATH=$KANON_VAR/trac/$PROJECT_NAME
if [ "$REPO_TYPE" != '' ]
then
-   trac-admin $TRAC_PROJECT_PATH initenv $PROJECT_NAME sqlite:db/trac.db $REPO_TYPE /var/opt/kanon/$REPO_TYPE/$PROJECT_NAME
+   trac-admin $TRAC_PROJECT_PATH initenv $PROJECT_NAME $DB_CONNECT_STR $REPO_TYPE /var/opt/kanon/$REPO_TYPE/$PROJECT_NAME
else
-   trac-admin $TRAC_PROJECT_PATH initenv $PROJECT_NAME sqlite:db/trac.db
+   trac-admin $TRAC_PROJECT_PATH initenv $PROJECT_NAME $DB_CONNECT_STR
fi
cat "$KANON_CONFIG"/trac-template/"$TEMPLATE"/trac-ticketcustom.ini >> \
@@ -223,7 +241,12 @@
if [ -f "$KANON_CONFIG/trac-template/$TEMPLATE/trac-init.sql" ]
then
     # setup database
-    sqlite3   -init $KANON_CONFIG/trac-template/$TEMPLATE/trac-init.sql $KANON_VAR/trac/$PROJECT_NAME/db/trac.db .quit
+    if [ "$MYSQL" = 'y' ]
+    then
+        mysql -u $DBUSERNAME --password=$DBUSERPW $DBNAME < $KANON_CONFIG/trac-template/$TEMPLATE/trac-init-mysql.sql
+    else
+        sqlite3   -init $KANON_CONFIG/trac-template/$TEMPLATE/trac-init.sql $KANON_VAR/trac/$PROJECT_NAME/db/trac.db .quit
+    fi
fi
if [ -d "$KANON_CONFIG/trac-template/$TEMPLATE/trac-site" ]
@@ -309,10 +332,17 @@
trac-admin $TRAC_PROJECT_PATH permission add leader MILESTONE_CREATE MILESTONE_MODIFY TICKET_ADMIN
trac-admin $TRAC_PROJECT_PATH permission add guest developer
-sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('admin', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/admin-penguin.png');"
-sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('guest', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/guest-hamster.png');"
-sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('leader', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/leader-cat.png');"
+if [ "$MYSQL" = 'y' ]
+then
+   mysql -u $DBUSERNAME --password=$DBUSERPW $DBNAME -e"INSERT INTO session_attribute values ('admin', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/admin-penguin.png');"
+   mysql -u $DBUSERNAME --password=$DBUSERPW $DBNAME -e"INSERT INTO session_attribute values ('guest', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/guest-hamster.png');"
+   mysql -u $DBUSERNAME --password=$DBUSERPW $DBNAME -e"INSERT INTO session_attribute values ('leader', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/leader-cat.png');"
+else
+   sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('admin', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/admin-penguin.png');"
+   sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('guest', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/guest-hamster.png');"
+   sqlite3 $TRAC_PROJECT_PATH/db/trac.db "INSERT INTO session_attribute values ('leader', '1','picture_href','/trac/"$PROJECT_NAME"/raw-attachment/wiki/UserManagerPluginPictures/leader-cat.png');"
+fi
chown $APACHE_USER.$APACHE_USER -R $TRAC_PROJECT_PATH
echo "
diff -r 6f8292651be4 pkglist.rhel6
--- a/pkglist.rhel6     Tue Sep 03 02:25:18 2013 +0900
+++ b/pkglist.rhel6     Sun Nov 24 00:00:48 2013 +0900
@@ -9,3 +9,6 @@
bzr
gcc
git
+mysql-server
+MySQL-python
+expect
diff -r 6f8292651be4 pluginlist-1.0
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pluginlist-1.0    Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,17 @@
+http://svn.sourceforge.jp/svnroot/shibuya-trac/sandbox/okamototk/tracsubticketsplugin
+http://trac-hacks.org/svn/iniadminplugin/0.11
+http://trac-hacks.org/svn/xmlrpcplugin/trunk
+http://trac-hacks.org/svn/customfieldadminplugin/0.11
+http://trac-hacks.org/svn/tracdragdropplugin/0.12
+http://trac-hacks.org/svn/tracwysiwygplugin/0.12
+http://trac-hacks.org/svn/exceldownloadplugin/0.12
+http://trac-hacks.org/svn/tocmacro/0.11
+http://trac-hacks.org/svn/macropostplugin/0.11
+http://trac-hacks.org/svn/addcommentmacro/0.11
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/ganttcalendarplugin/trunk
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/completeuserplugin/trunk
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/reportincludeplugin/trunk/0.12
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/trackanontheme/trunk
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/hudsontracplus/0.11
+http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/tracavatarplugin/branches/0.12-kanon
+http://trac-hacks.org/svn/themeengineplugin/trunk/
diff -r 6f8292651be4 pluginlist_hg-1.0
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pluginlist_hg-1.0 Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,1 @@
+http://hg.edgewall.org/trac/mercurial-plugin#1.0
diff -r 6f8292651be4 resource/trac-plugin-0.12
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/resource/trac-plugin-0.12 Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,27 @@
+TracMacOSTheme
+acct_mgr
+advancedticketworkflow
+autowikifyplugin
+batchmodify
+datefield
+discussion
+hudsontracplus
+lightningtheme
+macropost
+mailarchiveplugin
+masterticketsplugin
+privatewikiplugin
+querychart
+searchhyperestraier
+sectioneditplugin
+svnauthzadminplugin
+themeengineplugin
+ticketclone
+ticketimportplugin
+timingandestimationplugin
+tracjsganttplugin
+tracnav
+tractags
+usermanager
+workfloweditorplugin
+xdocview
diff -r 6f8292651be4 resource/trac-plugin-1.0
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/resource/trac-plugin-1.0  Sun Nov 24 00:00:48 2013 +0900
@@ -0,0 +1,23 @@
+TracMacOSTheme
+acct_mgr
+advancedticketworkflow
+autowikifyplugin
+datefield
+discussion
+hudsontracplus
+lightningtheme
+mailarchiveplugin
+masterticketsplugin
+privatewikiplugin
+querychart
+searchhyperestraier
+sectioneditplugin
+svnauthzadminplugin
+ticketimportplugin
+timingandestimationplugin
+tracjsganttplugin
+tracnav
+tractags
+usermanager
+workfloweditorplugin
+xdocview

|

« kanonをTrac1.0.1対応に変更してみた | トップページ | TracLightningにコバンザメしてKanonと同様にPluginをインストールする »

Trac」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: kanonをTrac1.0.1+MySQL対応に変更してみた:

« kanonをTrac1.0.1対応に変更してみた | トップページ | TracLightningにコバンザメしてKanonと同様にPluginをインストールする »