DreamTracInstall

DreamTracInstall is a bash script originally written by Paul-Robert Archibald based on Natmaster's Trac Installation Guide. It has since been further developed by a number of contributors:

This script was created to make Trac installation on Dreamhost a breeze. All packages will be installed to the $HOME/$ROOTDIR directory. Trac sites will be created in the $HOME/trac_sites directory.

Info
This script assumes the following:


 * 1) You are trying to install trac on a dreamhost server.
 * 2) You have already created a subversion project via the dreamhost panel.
 * 3) You don't have python installed to your local home directory.
 * 4) You are working from a clean $HOME environment.
 * 5) You are throughly frustrated trying to install trac on your own.
 * 6) If you want to use a MySQL database, you already set one up (such as trac_db) as well as already set up a user allowed to modify it (such as mysqluser) so that Trac can store its stuff in it.

Step 1
First off edit your edit ~/.bash_profile and add the following lines:

(You can replace "packages" with whatever you intend to use as the ROOTDIR argument for the script.)

export PYTHONPATH="$HOME/trac_packages/lib/python2.4/site-packages" export LD_LIBRARY_PATH="$HOME/trac_packages/lib" export PATH="$HOME/trac_packages/bin:$PATH"

At the bash shell type:

source ~/.bash_profile

Step 2
Copy the script below into a file DreamTracInstall.sh

At the bash shell type:

chmod +x ./DreamTracInstall.sh ./DreamTracInstall.sh

You'll be prompted to enter the following:
 * 1) PROJECT - SVN project ID
 * 2) PROJECTDIR - The web directory this Trac installation should be accessible from
 * 3) DOMAIN - The domain this Trac installation should be accessible from
 * 4) USEMYSQL - Whether or not to use the experimental MySQL database support (which some folks claim is "stronger/faster/better") or to use the default SQLite database backend. If you choose to use the MySQL support, you'll also be prompted for:
 * 5) MYSQLHOST - The mysql host that the trac data base lives on
 * 6) MYSQLUSER - The username used to access aforementioned mysql host
 * 7) MYSQLPASSWD - The password for the aforementioned username
 * 8) MYSQLDBNAME - The trac database
 * 9) TRACVERSION - The desired Trac version: 10 or 11
 * 10) REMOVEINSTALLFILES - yes to remove the installation files upon completion; otherwise no
 * 11) ROOTDIR - The root directory to install Trac and associated files into. E.g. $HOME/packages

It is also possible to enter all of these values as command-line arguments for the script, however this method assumes that you want to use the MySQL database. They must be entered in the exact order listed above (omitting the USEMYSQL parameter). If not entered, the script will prompt for them. After entering the variables sit back and relax for about 15 minutes.

Step 3
Log into the DreamHost Control Panel and add a new subdomain (e.g. trac.yourdomain.com). FastCGI should be enabled (required for the script version 0.9.2). Google services need not be checked. This may take an hour to propagate.

Step 4
Point your browser to your trac subdomain. Trac has been installed and is running on cgi.

Web login:

user: admin password: password

Don't forget to change your password! Enjoy!

Optional Step 5
There is an optional step if you want to install the post-commit hook (trac-post-commit-hook, which enables Subversion integration by automatically adding commit messages to Trac issues if referenced in the commit message). A description of how to install this is available here. Updated Script Only here

(if someone wants to rewrite this for usage in this wiki, please go ahead and do so)

Installation Bugs
Sometimes, things break. When that happens during an installation of Trac using this script, look here for solutions to problems. If you resolve an issue not listed here, please consider adding it so that others may benefit from your work.

PHP Syntax Highlighting
If you have problems with PHP syntax highlighting after installing trac, locate the  entry in the   section of trac.ini (~/trac_sites/[your project id]/conf/trac.ini) and change it to this:

php_path = /usr/local/bin/php -q

OperationalError: (1267, "Illegal mix of collations â¦)
After installing trac, when attempting to add a new ticket, you may see the following error: OperationalError: (1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'UNION'")

The trac team is aware of the issue, and to resolve it, see the patch for mysql_backend.py and the changes to trac.ini at #3182.

AttributeError: 'module' object has no attribute 'urlsafe_b64encode'
After a successful Trac installation, the only user that can log in might be the admin user. Logging in as any other user and then viewing any Trac page results in a message like the following one being displayed:

AttributeError: 'module' object has no attribute 'urlsafe_b64encode'

This problem is due to the TracAccountManager plugin that is installed with this script. The simplest way to fix the problem is to login as admin and go to Admin->Plugins->TracAccountManager and disable the email verification module. Removing the entire plugin will also serve to fix the problem. Updating python may also resolve the issue (untested).

System Information
 * Trac
 * 0.11


 * Python
 * 2.3.5 (#2, Oct 16 2006, 19:19:48) [GCC 3.3.5 (Debian 1:3.3.5-13)]


 * setuptools
 * 0.6c8


 * MySQL
 * server: "5.0.24a-standard-log", client: "5.0.16", thread-safe: 1


 * MySQLdb
 * 1.2.2


 * Genshi
 * 0.5


 * Pygments
 * 0.9


 * Subversion
 * 1.4.2 (r22196)


 * jQuery
 * 1.2.3

Setting up more Tracs
Now if you want to have more than one Trac, you will need to create a new domain, a new (empty) MySQL database, and a new Subversion repository. Then run :

More Trac 0.10.5 instances
trac-admin trac_sites/*choose a name* initenv *projectname* mysql://*mysqluser*:*mysqlpassword*@*mysqlhost*/*mysqldbname* svn *path-to-subversion-repo* /home/*username*/packages/share/trac/templates

More Trac 0.11 instances
trac-admin trac_sites/*choose a name* initenv *projectname* mysql://*mysqluser*:*mysqlpassword*@*mysqlhost*/*mysqldbname* svn *path-to-subversion-repo*

Or you can also have multiple Trac projects, without the need of creating more domains. After creating a new Trac project (${PROJECT_NEW}) like said above simply do cp ${HOME}/${DOMAIN}/index.cgi ${HOME}/${DOMAIN}/${PROJECT_NEW}.cgi cp ${HOME}/${DOMAIN}/index.fcgi ${HOME}/${DOMAIN}/${PROJECT_NEW}.fcgi

Then edit both ${HOME}/${DOMAIN}/${PROJECT_NEW}.fcgi and ${HOME}/${DOMAIN}/${PROJECT_NEW}.cgi and change line

export TRAC_ENV="$SITES/${PROJECT_NEW} to  export TRAC_ENV="$SITES/${PROJECT_NEW}

and then you can access the new Trac project using the url

http://${DOMAIN}/${PROJECT_NEW}.cgi or http://${DOMAIN}/${PROJECT_NEW}.fcgi

The Script
Here is the script in its entirety. Please edit as necessary.

Script contributors
All contributors to the script please remember to update the version number and state your name and revision.


 * Justin Hernandez (version 0.2)
 * Etienne Samson (version 0.4) to make it use Dreamhost libraries instead of relying on installed items
 * Andrew Kutz (version 0.6) to update it for Trac 0.11b2
 * Guy Rutenberg adjusted the script to install Trac 0.11rc1.
 * Meitar Moscovitz (version 0.9) to allow an option to use Trac's default SQLite database backend, updated for Trac 0.10.5 and Trac 0.11, and improved usability of some of the prompts.
 * Simabo (version 0.9.1)
 * Thanatermesis  (version 0.9.2)

v0.9.3

 * Trac Stable version: 0.11.5
 * Added a fixup
 * Added (commented) 2 interesting plugins that the user may want to enable

v0.9.2

 * Trac Stable version: 0.11.4
 * FastCGI used by default instead of CGI. Note that FastCGI NEEDS to be used instead of normal CGI, with normal CGI mode the site is totally slow, bloated, and USELESS

v0.9.1

 * Python 2.4 to be used

v0.9

 * Trac 0.11
 * Trac 0.10.5
 * Genshi 0.5
 * pysqlite 2.4.1
 * When prompting, option to use SQLite or MySQL (still assumes MySQL from non-interactive installation)
 * More understandable prompts, plus a few extra comments in the script source itself for clarity.

v0.8

 * Trac 0.11rc1
 * Validation
 * Extra logging

v0.7

 * Trac 0.11rc1

v0.6

 * Trac 0.11b2
 * Pygments 0.9
 * Clearsilver 10.5

v0.5

 * Added option to install into a project directory
 * Added option to install Trac 0.11b1
 * Installs pygments for Trac 0.11b1 for syntax highlighting
 * Defaults to CGI instead of FCGI because of number of problems with getting FCGI working on Dreamhost these days

Script Source Code

 * 1) !/bin/bash


 * 1) DreamTracInstall
 * 2) Author v0.1 : Paul-Robert Archibald
 * 3) Author v0.2 : Justin Hernandez
 * 4) Author v0.4 : Etienne Samson
 * 5) Author v0.5 : Andrew Kutz 
 * 6) Author v0.6 : Daniel Drucker
 * 7) Author v0.7 : Guy Rutenberg
 * 8) Author v0.8 : Steve Morin 
 * 9) Author v0.9 : Meitar Moscovitz
 * 10) Author v0.9.1: Simabo (If you'd prefer your full name please alter this line)
 * 11) Author v0.9.2: Thanatermesis 
 * 12) Author v0.9.3: Thanatermesis ^
 * 13) License : http://www.archtechnologies.co.uk/dti.html
 * 14) Version : 0.9.3 Stable

set -e
 * 1) Abort on any errors

cat <<OutputDreamTracInstallReminder Add the following to ~/.bash_profile Where trac_packages=ROOTDIR export PYTHONPATH="$HOME/trac_packages/lib/python2.4/site-packages" export LD_LIBRARY_PATH="$HOME/trac_packages/lib" export PATH="$HOME/trac_packages/bin:$PATH" OutputDreamTracInstallReminder

if [ "$PYTHONPATH" == "" ] ; then echo "You forgot to do the above add" exit 1 fi

if [ "$1" == "" ] then verify="n" while [ "$verify" != y ]; do       echo "Enter Subversion project ID (e.g. svnproject): " read PROJECT echo "You entered \"$PROJECT\". Is this correct? (y/n)" read verify done
 * 1) No arguments specified. Prompt for required parameters.

verify="n" while [ "$verify" != y ]; do       echo "Enter trac project directory (e.g. '/' to install to root of domain): " read PROJECTDIR echo "You entered \"$PROJECTDIR\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do       echo "Enter trac domain name (e.g. trac.mydomain.org): " read DOMAIN echo "You entered \"$DOMAIN\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do       echo "Use MySQL database instead of default SQLite database backend? (e.g. yes or no): " read USEMYSQL echo "You entered \"$USEMYSQL\". Is this correct? (y/n)" read verify done

if [ $USEMYSQL == "yes" ]; then verify="n" while [ "$verify" != y ]; do           echo "Enter MySQL hostname (e.g. db.mydomain.org): " read MYSQLHOST echo "You entered \"$MYSQLHOST\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do           echo "Enter MySQL username (e.g. trac_username): " read MYSQLUSER echo "You entered \"$MYSQLUSER\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do           echo "Enter MySQL password (e.g. trac_password): " read MYSQLPASSWD echo "You entered \"$MYSQLPASSWD\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do           echo "Enter MySQL DB name (e.g. trac_db): " read MYSQLDBNAME echo "You entered \"$MYSQLDBNAME\". Is this correct? (y/n)" read verify done fi

verify="n" while [ "$verify" != y ]; do       echo "Enter desired Trac version (e.g. 10 or 11): " read TRACVERSION echo "You entered \"$TRACVERSION\". Is this correct? (y/n)" read verify if [ $TRACVERSION != "10" -a $TRACVERSION != "11" ]; then verify="n" fi   done

verify="n" while [ "$verify" != y ]; do       echo "Remove install files? (e.g. yes or no): " read REMOVEINSTALLFILES echo "You entered \"$REMOVEINSTALLFILES\". Is this correct? (y/n)" read verify done

verify="n" while [ "$verify" != y ]; do       echo "Root directory to install Trac and associated files into? (e.g. $HOME/packages): " read ROOTDIR echo "You entered \"$ROOTDIR\". Is this correct? (y/n)" read verify done

else # Arguments specified on command line, use these instead. # Note that this method assumes MySQL is desired! PROJECT=$1 PROJECTDIR=$2 DOMAIN=$3 USEMYSQL=yes MYSQLHOST=$4 MYSQLUSER=$5 MYSQLPASSWD=$6 MYSQLDBNAME=$7 TRACVERSION=$8 REMOVEINSTALLFILES=$9 ROOTDIR=${10} fi


 * 1) PROJECT=nameofsvnproject
 * 2) PROJECTDIR=myproject
 * 3) DOMAIN=trac.somedomain.com
 * 4) USEMYSQL=no
 * 5) MYSQLHOST=mysql.somedomain.com
 * 6) MYSQLUSER=mysqluser
 * 7) MYSQLPASSWD=passwddb
 * 8) MYSQLDBNAME=mysqldb
 * 9) TRACVERSION=11
 * 10) REMOVEINSTALLFILES=no
 * 11) ROOTDIR=${HOME}/trac_packages

echo "PROJECT:${PROJECT}" echo "PROJECTDIR:${PROJECTDIR}" echo "DOMAIN:${DOMAIN}" echo "USEMYSQL:${USEMYSQL}" echo "MYSQLHOST:${MYSQLHOST:-n/a}" echo "MYSQLUSER:${MYSQLUSER:-n/a}" echo "MYSQLPASSWD:${MYSQLPASSWD:-n/a}" echo "MYSQLDBNAME:${MYSQLDBNAME:-n/a}" echo "TRACVERSION:${TRACVERSION}" echo "REMOVEINSTALLFILES:${REMOVEINSTALLFILES}" echo "ROOTDIR:${ROOTDIR}"

PKG=$ROOTDIR INSTALL=${HOME}/trac_install_files SITES=${HOME}/trac_sites SVN=${HOME}/svn
 * 1) Don't edit these

if [ $TRACVERSION == "10" ]; then TRAC=http://ftp.edgewall.com/pub/trac/trac-0.10.5.tar.gz elif [ $TRACVERSION == "11" ]; then TRAC=http://ftp.edgewall.com/pub/trac/Trac-0.11.5.tar.gz fi
 * 1) Update version information here and DIRs below.

CLEARSILVER=http://www.clearsilver.net/downloads/clearsilver-0.10.5.tar.gz GENSHI=http://ftp.edgewall.com/pub/genshi/Genshi-0.5.tar.gz CGIFRONTEND=http://area51.archtechnologies.net/DreamTracInstall/cgi-frontend.tar.gz SETUPTOOLS=http://peak.telecommunity.com/dist/ez_setup.py MYSQLDB=http://switch.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz PYSQLITE=http://oss.itsystementwicklung.de/download/pysqlite/2.4/2.4.1/pysqlite-2.4.1.tar.gz WEBADMIN=http://trac.edgewall.org/attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw PYGMENTS=http://pypi.python.org/packages/source/P/Pygments/Pygments-0.9.tar.gz

if [ $TRACVERSION == "10" ]; then TRACDIR=trac-0.10.5 elif [ $TRACVERSION == "11" ]; then TRACDIR=Trac-0.11.5 fi CLEARSILVERDIR=clearsilver-0.10.5 GENSHIDIR=Genshi-0.5 MYSQLDBDIR=MySQL-python-1.2.2 PYSQLITEDIR=pysqlite-2.4.1 PYGMENTSDIR=Pygments-0.9

echo "Download and install files" if [ ! -d ${INSTALL} -a ! -d ${PKG} ]; then #Lets make the directories [ ! -d ${PKG} ] && mkdir -p ${PKG} [ ! -d ${INSTALL} ] && mkdir -p ${INSTALL} [ ! -d ${SITES} ] && mkdir -p ${SITES}
 * 1) Only create directories and download if they do not already exist.

cd ${INSTALL}

#Lets get the files, if we don't already have them [ ! -f ${TRACDIR}.tar.gz ] && wget ${TRAC} [ ! -f ${CLEARSILVERDIR}.tar.gz ] && wget ${CLEARSILVER} [ ! -f ${GENSHIDIR}.tar.gz ] && wget ${GENSHI} [ ! -f ${MYSQLDBDIR}.tar.gz ] && wget ${MYSQLDB} [ ! -f ${PYGMENTSDIR}.tar.gz ] && wget ${PYGMENTS} [ ! -f ez_setup.py ] && wget ${SETUPTOOLS}
 * 1) I'm concerned PySQLite actually causes a bug of some kind, and Trac seems to work okay
 * 2) even if this package is not explicitly installed. Therefore, I'm disabling it.
 * 3)    [ ! -f ${PYSQLITEDIR}.tar.gz ] && wget ${PYSQLITE}

#Lets unpack the files echo "Unpacking files, please wait..." tar xzf ${TRACDIR}.tar.gz   tar xzf ${CLEARSILVERDIR}.tar.gz    tar xzf ${GENSHIDIR}.tar.gz    tar xzf ${MYSQLDBDIR}.tar.gz    tar xzf ${PYGMENTSDIR}.tar.gz
 * 1) I'm concerned PySQLite actually causes a bug of some kind, and Trac seems to work okay
 * 2) even if this package is not explicitly installed. Therefore, I'm disabling it.
 * 3)    tar xzf ${PYSQLITEDIR}.tar.gz

echo "Starting compilation"

#Create site-packages directory. Script will fail if this directory doesn't exist. mkdir -p ${PKG}/lib/python2.4/site-packages

echo "Setup Tools" #Setup Tools python ez_setup.py --prefix=${PKG}

if [ $USEMYSQL == "yes" ]; then echo "MYSQLdb" #MYSQLdb cd ${INSTALL}/${MYSQLDBDIR} python setup.py install --prefix=${PKG} else echo "SQLite" fi
 * 1) I'm concerned PySQLite actually causes a bug of some kind, and Trac seems to work okay
 * 2) even if this package is not explicitly installed. Therefore, I'm disabling it.
 * 1)        cd ${INSTALL}/${PYSQLITEDIR}
 * 2)        python setup.py install --prefix=${PKG}

echo "Genshi" #Genshi cd ${INSTALL}/${GENSHIDIR} python setup.py install --prefix=${PKG}

echo "Clearsilver" #Clearsilver cd ${INSTALL}/${CLEARSILVERDIR} export PYTHON_SITE=`/usr/bin/python -c "import sys; print [path for path in sys.path if 'site-packages' in path][0]"` ./configure --prefix=${PKG} --with-python --disable-ruby --disable-java --disable-apache --disable-csharp --disable-perl make make install

echo "Pygments" #Pygments cd ${INSTALL}/${PYGMENTSDIR} python setup.py install --prefix=${PKG}

echo "Trac" #Trac cd ${INSTALL}/${TRACDIR} python setup.py install --prefix=${PKG}

fi

echo "Setup site" if [ ! -d ${SITES}/${PROJECT} ]; then

if [ $TRACVERSION == "10" ]; then if [ $USEMYSQL == "yes" ]; then #Setup Trac Environment for MySQL ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ initenv ${PROJECT} \ "mysql://${MYSQLUSER}:${MYSQLPASSWD}@${MYSQLHOST}/${MYSQLDBNAME}" \ svn \ ${SVN}/${PROJECT} \ ${PKG}/share/trac/templates; else #Setup Trac Environment for SQLite ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ initenv ${PROJECT} \ "sqlite:db/trac.db" \ svn \ ${SVN}/${PROJECT} \ ${PKG}/share/trac/templates; fi   elif [ $TRACVERSION == "11" ]; then if [ $USEMYSQL == "yes" ]; then #Setup Trac Environment for MySQL ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ initenv ${PROJECT} \ "mysql://${MYSQLUSER}:${MYSQLPASSWD}@${MYSQLHOST}/${MYSQLDBNAME}" \ svn \ ${SVN}/${PROJECT}; else #Setup Trac Environment for SQLite ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ initenv ${PROJECT} \ "sqlite:db/trac.db" \ svn \ ${SVN}/${PROJECT}; fi   fi

# set admin user to premissions ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ permission add admins TRAC_ADMIN ${PKG}/bin/trac-admin ${SITES}/${PROJECT} \ permission add admin admins fi

echo 'Make Trac Web Accessible' mkdir -p ${HOME}/${DOMAIN}/${PROJECTDIR} cd ${HOME}/${DOMAIN}/${PROJECTDIR}
 * 1) Make Trac Web Accessible

if [ $TRACVERSION == "11" ]; then # Copy the cgi-bin dir mkdir -p ${PKG}/share/trac cp -fr ${INSTALL}/${TRACDIR}/cgi-bin ${PKG}/share/trac fi

if [ -f "${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi" ]; then rm ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi fi echo "#!/bin/bash" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "export HOME=\"/home/${USER}\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "export TRAC_ENV=\"$SITES/${PROJECT}\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "export PYTHONPATH=\"$PKG/lib/python2.4/site-packages\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "export PATH=\"$PKG/bin:$PATH\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "export LD_LIBRARY_PATH=\"$PKG/lib\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi echo "exec $PKG/share/trac/cgi-bin/trac.cgi" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi chmod 755 ${HOME}/${DOMAIN}/${PROJECTDIR}/index.cgi

if [ -f "${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi" ]; then rm ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi fi echo "#!/bin/bash" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "export HOME=\"/home/${USER}\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "export TRAC_ENV=\"$SITES/${PROJECT}\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "export PYTHONPATH=\"$PKG/lib/python2.4/site-packages\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "export PATH=\"$PKG/bin:$PATH\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "export LD_LIBRARY_PATH=\"$PKG/lib\"" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi echo "exec $PKG/share/trac/cgi-bin/trac.fcgi" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi chmod 755 ${HOME}/${DOMAIN}/${PROJECTDIR}/index.fcgi

mkdir -p ${HOME}/${DOMAIN}/${PROJECTDIR}/chrome if [ $TRACVERSION == "10" ]; then ln -sf ${PKG}/share/trac/htdocs ./chrome/common elif [ $TRACVERSION == "11" ]; then ln -sf ${PKG}/lib/python2.4/site-packages/Trac-0.11.5-py2.4.egg/trac/htdocs/ ${HOME}/${DOMAIN}/${PROJECTDIR}/chrome/common fi
 * 1) Pretty URLs

if [ $TRACVERSION == "10" ]; then cd ${PKG}/lib/python2.4/site-packages/trac/web elif [ $TRACVERSION == "11" ]; then cd ${PKG}/lib/python2.4/site-packages/Trac-0.11.5-py2.4.egg/trac/web fi perl -pi.bak -e "s/^self.cgi_location =.+$/self.cgi_location = os.path.dirname(self.__environ.get('SCRIPT_NAME'))/gi" cgi_frontend.py
 * 1) Hack the Trac base_url

if [ $TRACVERSION == "10" ]; then #WebAdmin wget ${WEBADMIN} mv TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw TracWebAdmin-0.1.2dev_r4240-py2.4.egg easy_install --prefix=${PKG} TracWebAdmin*

#AccountManager #track-hacks.org is down #easy_install --prefix=${PKG} http://trac-hacks.org/svn/accountmanagerplugin/trunk #easy_install --prefix=${PKG} http://trachacks.coderanger.net/svn/accountmanagerplugin/trunk easy_install --prefix=${PKG} http://trac-hacks.org/svn/accountmanagerplugin/0.10 elif [ $TRACVERSION == "11" ]; then easy_install --prefix=${PKG} http://trac-hacks.org/svn/accountmanagerplugin/trunk fi

echo "[components]" >> ${SITES}/${PROJECT}/conf/trac.ini echo "webadmin.* = enabled" >> ${SITES}/${PROJECT}/conf/trac.ini echo "trac.web.auth.LoginModule = disabled" >> ${SITES}/${PROJECT}/conf/trac.ini echo "acct_mgr.* = enabled" >> ${SITES}/${PROJECT}/conf/trac.ini
 * 1) set WebAdmin & AccountManager to local trac.ini

echo "[account-manager]" >> ${SITES}/${PROJECT}/conf/trac.ini echo "password_format = htpasswd" >> ${SITES}/${PROJECT}/conf/trac.ini echo "password_file = ${SITES}/${PROJECT}.passwd" >> ${SITES}/${PROJECT}/conf/trac.ini

cd ~/

if [ $REMOVEINSTALLFILES == "yes" ]; then rm -rf ${INSTALL} fi

cd ${HOME}/${DOMAIN}/${PROJECTDIR}
 * 1) Set the .htaccess file for FastCGI

if [ -f ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess ]; then rm ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess fi

touch .htaccess echo "DirectoryIndex index.fcgi" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess chmod 644 ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess

echo "Options ExecCGI FollowSymLinks" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "RewriteEngine On" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "RewriteCond %{REQUEST_FILENAME} !-f" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "RewriteCond %{REQUEST_FILENAME} !-d" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "RewriteRule ^(.*)\$ /$PROJECTDIR/index.fcgi/\$1 [L]" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess echo "" >> ${HOME}/${DOMAIN}/${PROJECTDIR}/.htaccess

cd ${SITES} touch ${PROJECT}.passwd echo "admin:\$apr1\$2PpwG/..\$09tzwaDfzKx4Yu/od5Alw0" >> ${SITES}/${PROJECT}.passwd
 * 1) Create .htpasswd file and add admin with default password 'password'

sed -i "/^RewriteRule/s|/trac/index|/index|" ${DOMAIN}/trac/.htaccess
 * 1) NEEDED FIXES:


 * 1) Nice features that you may want to add:
 * 2) NOTE: enable them directly on your script if you are running a reinstallation with older database, otherwise you should do a manual install from their websites instructions (may require upgrading the database and/or other things)


 * 1)  table of contents for wiki pages
 * 2) easy_install --prefix=$HOME/packages http://trac-hacks.org/svn/tocmacro/0.11


 * 1)  "block" and "blocked by" features in tickets
 * 2) easy_install --prefix=$HOME/packages http://trac-hacks.org/svn/masterticketsplugin/0.11

echo -- INSTALL COMPLETE! --

Trac 0.10.5

 * 1) clearsilver-0.10.4
 * 2) TracWebAdmin-0.1.2dev_r4240-py2.3.egg
 * 3) accountmanagerplugin-0.10
 * 4) setuptools
 * 5) trac-0.10.5

Trac 0.11

 * 1) clearsilver-0.10.5
 * 2) Genshi-0.5
 * 3) MySQL-Python 1.2.2
 * 4) pysqlite-2.4.1
 * 5) setuptools
 * 6) accountmanagerplugin (trunk)
 * 7) trac-0.11
 * 8) pygments-0.9

Uninstall/Reinstall Trac
In order to make reinstalling and compiling of Trac easier use this script:

THIS WILL DELETE THE TRAC INSTALL that is installed via DreamTracInstall.sh. If any of these folders exist running DreamTracInstall.sh again will FAIL!


 * 1) !/bin/sh

set -e
 * 1) Abort on any errors

if [ "$1" == "" ] then verify="n" while [ "$verify" != y ]; do       echo "Enter trac project directory: " read PROJECTDIR echo "You entered \"$PROJECTDIR\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Enter trac domain name (e.g. trac.mydomain.org): " read DOMAIN echo "You entered \"$DOMAIN\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Enter MySQL hostname (e.g. db.mydomain.org): " read MYSQLHOST echo "You entered \"$MYSQLHOST\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Enter MySQL username (e.g. trac_username): " read MYSQLUSER echo "You entered \"$MYSQLUSER\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Enter MySQL password (e.g. trac_password): " read MYSQLPASSWD echo "You entered \"$MYSQLPASSWD\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Enter MySQL DB name (e.g. trac_db): " read MYSQLDBNAME echo "You entered \"$MYSQLDBNAME\". Is this correct? (y/n)" read verify done verify="n" while [ "$verify" != y ]; do       echo "Root directory to install Trac and associated files into? (e.g. $HOME/packages): " read ROOTDIR echo "You entered \"$ROOTDIR\". Is this correct? (y/n)" read verify done else PROJECTDIR=$1 DOMAIN=$2 MYSQLHOST=$3 MYSQLUSER=$4 MYSQLPASSWD=$5 MYSQLDBNAME=$6 ROOTDIR=$7 fi

rm -fr $ROOTDIR $HOME/trac_sites $HOME/install_files $DOMAIN/$PROJECTDIR $HOME/.python-eggs $HOME/.subversion
 * 1) Remove the files

mysql -u $MYSQLUSER --password=$MYSQLPASSWD -h $MYSQLHOST -e 'DROP TABLE `attachment`, `auth_cookie`, `component`, `enum`, `milestone`, `node_change`, `permission`, `report`, `revision`, `session`, `session_attribute`, `system`, `ticket`, `ticket_change`, `ticket_custom`, `version`, `wiki`;' $MYSQLDBNAME
 * 1) Remove the tables from the database