Scrum/Agilo for Scrum

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen

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.

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

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:

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
  • This was sometimes needed (most probably obsolete for actual Agilo versions): 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";

Weblinks

See also