On my Ubuntu 16 installation (let’s call it
example1.com) I have a project on this version of
$ lsb_release -d Description: Ubuntu 16.10 $ tracd --version tracd 1.0.12
I had good(-ish) reasons to migrate the entire project to a copy on an Ubuntu 10 machine.
$ lsb_release -d Description: Ubuntu 10.04.4 LTS
These are the resources that you need to be aware of:
I first installed
trac via the
$ sudo apt-get install trac
This installed an earlier version than the one I had.
$ tracd --version tracd 0.11.7
Setting up the new (old) trac
Rather than upgrading the entire system with
do-release-upgrade, I decided to work with this version.
You will need the
python-mysqldb module on
example2.com to access a MySQL database. If you’re using PostgreSQL the procedure should be similar. YMMV.
$ sudo apt-get install python-mysqldb
First, copy the assets of the project environment. This is a directory tree that you can copy over using
rsync -r example1.com:/path-to-trac-env example2.com:/path-to-trac-env
For simplicity we’ll keep everything the same: file directories, database name and database credentials, although you could change these. Your database settings are in the
/path-to-trac-env/conf/trac.ini file. You want the database variable under the
[trac] section, which should look something like:
[trac] database = mysql://tracuser:tracpassword@localhost:3306/trac-env
You will want to create an empty MySQL database where your project will live. You will need the MySQL client on
example2.com, so if you don’t have it, install it with:
sudo apt-get install mysql-client
You will then want to login as root
mysql -u root -p
and create the database, (using the
CREATE DATABASE `trac-env` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
and finally create the user:
GRANT ALL ON `trac-env`.* TO tracuser@localhost IDENTIFIED BY 'tracpassword';
Exit the MySQL client with
Ctrl-D and import a standard SQL dump of your database from
example1.com. For instance, if you like one-liners, you might do this on
ssh example1.com "mysqldump -u tracuser -ptracpassword --single-transaction trac-env | gzip -9" | zcat | mysql -u tracuser -ptracpassword trac-env
Nasty hack FTW
tracd and visit the installation via your web browser. You should see an error like this:
Trac detected an internal error: ValueError: timestamp out of range for platform time_t
This is because all timestamps in this newer version of
trac are in microseconds, rather than seconds. Here is a (somewhat) relevant ticket.
I went ahead and hacked the DB thusly:
update ignore attachment set time = floor( time / 10000000); update ignore auth_cookie set time = floor( time / 10000000); update ignore revision set time = floor( time / 10000000); update ignore ticket set time = floor( time / 10000000); update ignore ticket set changetime = floor( changetime / 10000000); update ignore ticket_change set time = floor( time / 10000000); update ignore version set time = floor( time / 10000000); update ignore wiki set time = floor( time / 10000000);
These are all the timestamp columns in the DB. Dividing by a million converts millionths of a second to seconds and the
floor function makes sure that the result is still an integer.
ignore argument is there only because I had one single collision in one ticket comment. Needless to say, this is a nasty hack, so don’t rely on it too much.
But, for my purposes, “It Works™”!