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 is related to Trac version 0.11.6 installed under openSUSE 11.2.
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.
Installation and Configuration of Trac under openSUSE
- 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
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:
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)
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.
A user needs to be added to the global httpd password database only once:
htpasswd2 /srv/user_access/trac_htpasswd user1
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.
- 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)
A new pyslite version (2.5.5) should be installed, which might fix these locking problems.
- Download from http://oss.itsystementwicklung.de/trac/pysqlite
python setup.py build
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
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 = email@example.com smtp_from_name = Trac Scrum smtp_password = smtp_port = 25 smtp_replyto = firstname.lastname@example.org 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','email@example.com'); insert into session_attribute (sid,authenticated,name,value) values ('user1',1,'name','Peter Petrelli');
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
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.
- 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!
- Just remove old egg and install new one.
- DB Upgrade (as root):
trac-admin /srv/trac/project1 upgrade
- This was sometimes needed (most probably obsolete for actual Agilo versions): Go the "Admin -> AGILO -> General" and press "Save".
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.
- 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.
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.
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.
Download the actual 0.11 version: http://trac-hacks.org/wiki/AccountManagerPlugin
python setup.py bdist_egg cp dist/TracAccountManager-<ver>.egg /srv/trac/project1/plugins/
The following options must be enabled in Admin->General->Plugins->TracAccountManager:
- 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
- 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.
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
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";