Scrum/Agilo for Scrum
This page describes the integration and usage of the project management tool Trac. Trac is extended by a special plugin for supporting Scrum. This document describes Trac version 0.11.5.
Introduction
Trac is a web-based Open Source tool for software project management and contains a ticketing system. Its goal is to simplify effective tracking and handling of software issues, enhancements and overall progress.
Trac can be extended with the plugin Agilo for Scrum, which provides management framework features according to the Scrum methodology.
Installation and Configuration of Trac under openSUSE
Installation
- Install Trac from openSUSE Repository
- Further requirements see Trac Homepage
Configuration
- Apache Config: /etc/apache2/conf.d/trac.conf
- You need to set in /etc/sysconfig/apache2
APACHE_MODULES="..... python" APACHE_SERVER_FLAGS="TRAC_MODPYTHON"
- Project root dir: /srv/trac
- The stand-alone tracd is not needed in case you use another web server (like Apache), related files /etc/sysconfig/tracd and /etc/init.d/tracd
- Trac Global Config (currently unused): /etc/trac/trac.ini , if needed it must be inserted to each project like
[inherit] file = /etc/trac/trac.ini
Reverse Proxy
Trac login and logout links create redirects, which are handled by Trac with absolute URLs. Unfortunately they create the redirect location with the full path of the internal server name, which is a problem for accessing by a reverse proxy. In order to disable absolute URLs, the following changes have been made:
/usr/lib64/python2.6/site-packages/trac/web/auth.py:
def _redirect_back(self, req):
"""Redirect the user back to the URL she came from."""
referer = self._referer(req)
if referer and not (referer == req.base_url or \
referer.startswith(req.base_url.rstrip('/')+'/')):
# only redirect to referer if it is from the same site
referer = None
#req.redirect(referer or req.abs_href())
req.redirect(req.href())
#req.redirect('http://www.mydomain.de/trac/')
#req.redirect(req.base_url)
/usr/lib64/python2.6/site-packages/trac/web/api.py:
def redirect(self, url, permanent=False):
...
self.send_response(status)
#if not url.startswith('http://') and not url.startswith('https://'):
# Make sure the URL is absolute
# scheme, host = urlparse.urlparse(self.base_url)[:2]
# url = urlparse.urlunparse((scheme, host, url, None, None, None))
self.send_header('Location', url)
This change will of course affect the behaviour of redirects. So, you will always be redirected to the Trac home page.
Trac Administration
Create User
A user needs to be added to the global httpd password database only once:
htpasswd2 /srv/user_access/trac_htpasswd user1
Database Considerations
Trac was originally designed using Sqlite as database. Sqlite3 is recommended. In addition, pysqlite needs to be installed to enable python to access the Sqlite database. The openSUSE Phyton 2.6 package seems to be shipped with pysqlite included (version 2.4.1). However, we encountered problems with "datase is locked" errors when parallel database write requests must be handled. Sqlite seems not to be very reliable in that case.
Workarounds:
- Just wait a few seconds until the database is unlocked again.
- Migrate Sqlite to Postgres or MySQL. Postgres would be a good alternative, MySQL is supported but not really officially.
- Install Trac or pysqlite fixes (see below)
pysqlite
A new pyslite version (2.5.5) should be installed, which might fix these locking problems.
Installation procedure:
- Download from http://oss.itsystementwicklung.de/trac/pysqlite
- Compile
python setup.py build
- Install
python setup.py install
- Check (inside python interpreter)
from pysqlite2 import test test.test()
- Restart Apache
- Test if Trac is using this new version (inside python interpreter), the last command gives the pysqlite version, e.g. 2.5.5
import trac.db.sqlite_backend as test test._ver test.have_pysqlite test.sqlite.version
Create new project
- Interactive, as user root (or wwwrun)
trac-admin /srv/trac/project1 initenv
- Change owner (if root has created the project)
chown -R wwwrun:www /srv/trac/project1
- Trac permissions
- Full admin rights:
trac-admin /srv/trac/project1 permission add user1 TRAC_ADMIN
- Agilo and other plugins (see below)
cp /opt/pkg/agilo/<agilo-source-dir>/dist/agilo-<ver>.egg /srv/trac/project1/plugins/ trac-admin /srv/trac/project1 upgrade
Additional Project Configuration
Configuration done in
/srv/trac/project1/config/trac.ini
Setup project URL:
[project] url = http://www.mydomain.de/trac/project1/
Setup URL for using within Emails etc.:
[trac] base_url = http://www.mydomain.de/trac/project1/
Setup Email notifications:
[notification] admit_domains = always_notify_owner = true always_notify_reporter = true always_notify_updater = true ignore_domains = mime_encoding = base64 smtp_always_bcc = smtp_always_cc = smtp_default_domain = smtp_enabled = true smtp_from = trac@www.mydomain.de smtp_from_name = Trac Scrum smtp_password = smtp_port = 25 smtp_replyto = trac@www.mydomain.de smtp_server = localhost smtp_subject_prefix = __default__ smtp_user = ticket_subject_template = $prefix Trac #$ticket.id: $summary use_public_cc = true use_short_addr = false use_tls = false
Setup owner field as drop-down list:
[ticket] restrict_owner = true
- Note: The user must login once to be listed here, see TracTickets or just update the database manually.
- Example for database updates:
sqlite3 /srv/trac/project1/db/trac.db insert into session (sid,authenticated,last_visit) values ('user1',1,1236930559); insert into session_attribute (sid,authenticated,name,value) values ('user1',1,'email','peter.petrelli@heroes.org'); insert into session_attribute (sid,authenticated,name,value) values ('user1',1,'name','Peter Petrelli');
or
update session set last_visit=1236930559 where sid = 'user1';
- Note: real name and email address can also be changed in the Agilo plugin team management
Trac Usage
Workflow
See TracWorkflow.
Agilo for Scrum Plugin
Agilo for Scrum provides management framework features according to the Scrum methodology. It is licensed as Open Source and is fully integrated into Trac. See Online-Help.
Installation
- General Notes
- The source code tarball is needed if the plugin egg file is made with a different Python version than installed on the Trac server.
- Obsolete: Python 2.6 not officially supported, fix needed (see below)
- Local installations do not need to be activated for the corresponding project
- After global installation, Agilo must be enabled for each project ([inherit])
- Local installation preferred, since a new Agilo plugin can be tested within a single project
- Obsolete since Agilo version 0.7.3.3: Python 2.6 fix in file agilo/core.py line 312, see also Agilo forum
super(PersistentObjectMeta, cls).__init__(cname, cbases, cdict)
- Recent versions need python-simplejson package
- Global installation (for all Trac projects), destination dir /usr/local/lib64/python2.6/site-packages/
python setup.py install
- Local egg installation ("cp" for each project needed) - preferred
python setup.py bdist_egg cp dist/agilo-<ver>.egg /srv/trac/project1/plugins/
- Update Trac database (with Agilo scheme), needed for global and local installation for each single project, run as root
trac-admin /srv/trac/project1 upgrade
- Maybe obsolete: In order to "repair" a wrong style of Trac go to "Admin -> Agilo -> General" and set Enable Agilo Advanced UI? to "no". Then you can set it to "yes" again.
- Activate the plugin in the Trac GUI.
- Create users and set user permissions in the Trac GUI.
- See Online-Help for admin tasks and user/permission handling!
Update
- Just remove old egg and install new one.
- DB Upgrade (as root):
trac-admin /srv/trac/project1 upgrade
- Go the "Admin -> AGILO -> General" and press "Save".
Usage
Teams
If you add a team member, you should always fill in (unfortunately empty fields) "real name" and "email address", otherwise existing values are deleted from database.
Tickets
Resources
- The Resources field contains the resources, which work together with the owner on a ticket. So, if only the owner works on the ticket, the Resources field should be empty.
Importance
The importance (or priority) of a user story is not directly mapped to a ticket priority. Mandatory means it's a basic feature, that the user expects. Mandatory features are solving problems. Linear features are more an extra. Exciter is a really new exiting feature that the user did not ask for, but which he'll like very much. Linear and Exciter features will make the user happy, since he got something unexpected.
ROIF
The Return on Investment Factor (ROIF) measures how much value you gain by having a requirement weighted against the complexity (User Story Points) of implementing it.
In the default installation the ROIF is calculated as Business Value divided by the sum of the mandatory User Story Points. Of course you can change the calculation criteria of this property to include all user stories (not just the mandatory ones).
A high ROIF value basically means that either it is a really valuable feature or something is really easy to implement.
Other Plugins
AccountManager Plugin
Installation
Download the actual 0.11 version: http://trac-hacks.org/wiki/AccountManagerPlugin
Install:
python setup.py bdist_egg cp dist/TracAccountManager-<ver>.egg /srv/trac/project1/plugins/
Configuration
The following options must be enabled in Admin->General->Plugins->TracAccountManager:
- AccountManagerAdminPage
- AccountManager
- HtPasswdStore
- HtDigestHashMethod
- AccountModule
Notes:
- The acct_mgr.web_ui.emailverificationmodule must explicitely be disabled ! Just enable it once in the Admin GUI and then disable it again. Otherwise login might not be possible after you have changed your password or account information.
- Force users to change passwords after a password reset? should be set to "No" .
- The LoginModule seems not to make sense if HtPasswdStore is used.
The following options must be set in Admin->Accounts->Configuration:
- Force users to change passwords after a password reset?
- Assign 1 to HtPasswdStore and enter the path to the htpasswd file /srv/user_access/trac_htpasswd.
This GUI configuration should result in the following entries in /srv/trac/project1/conf/trac.ini:
[account-manager] authentication_url = force_passwd_change = false hash_method = HtDigestHashMethod htdigest_realm = password_file = /srv/user_access/trac_htpasswd password_format = htpasswd password_store = HtPasswdStore acct_mgr.admin.accountmanageradminpage = enabled acct_mgr.api.accountmanager = enabled acct_mgr.htfile.htpasswdstore = enabled acct_mgr.pwhash.htdigesthashmethod = enabled acct_mgr.web_ui.accountmodule = enabled acct_mgr.web_ui.emailverificationmodule = disabled
Notes
- Only username and password are stored in the htpasswd file
- The real user name and email address must be entered in the Preferences for each project by the user itself.
Troubleshooting
Login warnings
If you have problems after next login (warning message), then check the email_verification option
sqlite3 /srv/trac/project1/db/trac.db select * from session_attribute;
If the result contains something like
username|1|email_verification_token|eHKnba5A
you need to logout and apply this workaround (see http://trac-hacks.org/ticket/4125):
sqlite3 /srv/trac/project1/db/trac.db delete from session where sid like "username"; delete from session_attribute where name like "email_verification_sent_to"; delete from session_attribute where name like "email_verification_token";