**************************
* Bugzilla RT migration
* Javier Garcia
* Snow Valley
* javier(dot)garcia(at)snowvalley(dot)com
* 24/04/2009
**************************
Environment:
- OS: Debian Etch 2.6.18-6-486
- RT version: 3.8.2
- MySQL version: 5.0.32-Debian_7etch8-log
I. Download and untar migration files
-----------------------------------
tar -xvzf bugzilla-rt-convert.tar.gz
II. Read README file
-----------------------------------
Please, pay attention to the README file inside bugzilla-rt-convert folder
III. Replace initial data file
-----------------------------------
The original /opt/rt3/etc/initialdata file on RT3.8 has no groups information. We have to insert this
information in our DB in order to avoid future issues loading tickets and queues.
@Groups = (
{ Name => '',
Type => 'Everyone',
Domain => 'SystemInternal',
Instance => '',
Description => 'Pseudogroup for internal use',
InsideTransaction => undef,
},
{ Type => 'Privileged',
Domain => 'SystemInternal',
Instance => '',
Name => '',
Description => 'Pseudogroup for internal use',
InsideTransaction => undef,
},
{ Name => '',
Type => 'Unprivileged',
Domain => 'SystemInternal',
Instance => '',
Description => 'Pseudogroup for internal use',
InsideTransaction => undef,
},
{ Name => '',
Type => 'Owner',
Domain => 'RT::System-Role',
Instance => '',
Description => 'SystemRolegroup for internal use',
InsideTransaction => undef,
},
{ Name => '',
Type => 'Requestor',
Domain => 'RT::System-Role',
Instance => '',
Description => 'SystemRolegroup for internal use',
InsideTransaction => undef,
},
{ Name => '', Type => 'Cc',
Domain => 'RT::System-Role',
Instance => '',
Description => 'SystemRolegroup for internal use',
InsideTransaction => undef,
},
{ Name => '',
Type => 'AdminCc',
Domain => 'RT::System-Role',
Instance => '',
Description => 'Pseudogroup for internal use',
InsideTransaction => undef,
},
);
IV. print_prod.pl
-----------------------------------
This script loads tickets information from bugzilla in a file. There are issues in some of the loaded data, as
lots of creation date fields contain the string ‘now()’ instead of a valid date. The best way to fix this is to
replace the following lines in the script:
### sub print_prod
my $created = 'now()';
...
print "\t Description\t=> $desc,\n";
print "\t Created\t=> $created,\n";
With these ones (NOTE: we are adding a random created date. Some people will need to modify this as they have to
use the current date and time. Perl provides lots of time functions for this):
### sub print_prod
my $created = 'now()';
...
print "\t Description\t=> $desc,\n";
#
### ADDED TO AVOID now() DATES WHICH CAUSE LOADING ERRORS ON RT
if ($created eq 'now()') {
print "\t Created\t=> '2009-04-22 11:00:00',\n";
}else {
print "\t Created\t=> $created,\n";
}
V. print_bugs.pl
-----------------------------------
This script loads bugs information from bugzilla in a file. We are in the same situation again, as
there a lots of corrupted data. The best way to fix this is to replace the following lines in the script:
### sub print_bugs
my $created = 'now()';
...
print "\t Type\t=> 'ticket',\n";
print "\t Created\t=> $created,\n";
With these ones (NOTE: we are adding a random created date. Some people will need to modify this as they have to
use the current date and time. Perl provides lots of time functions for this):
### sub print_bugs
my $created = 'now()';
...
print "\t Type\t=> 'ticket',\n";
#
### ADDED TO AVOID now() DATES WHICH CAUSE LOADING ERRORS ON RT
if ($created eq 'now()') {
print "\t Created\t=> '2009-04-22 11:00:00',\n";
}else {
print "\t Created\t=> $created,\n";
}
VI. migrate.sh
-----------------------------------
Modify create_user function adding a line for the DB initialization. This initialization is needed as ‘Nobody’
and ‘System’ users are not automatically added by the original script.
create_user(){
passwd=$1
perl $setup --action drop --dba root --dba-password $passwd
# We have to initialize the DB, as we need to insert Nobody and
# System users, which are required and the original script doesn't
# carry this out
perl $setup --action init --dba root --dba-password $passwd
# don't insert scrip here
perl bugimport --action init --dba root --dba-password $passwd
perl print_users_groups.pl $passwd > data.pl
perl $setup --action insert --datafile ./data.pl --dba root --dba-password $passwd
perl insert_ids_map.pl $passwd
}
VII. Stop emailing
-----------------------------------
In order to avoid thousands of emails to be sent automatically, every time a new ticket is created, we have to
stop our mail client
VIII. Run migration script
-----------------------------------
The best way to run the script is redirecting the standard error (which contains also Perl warning
and informational messages) to a file
sh migrate.sh 2> output
IX. Delete queued emails
-----------------------------------
Before restarting the email client we have to delete all the queued emails:
rm -f /var/spool/mqueue/* /var/spool/mqueue-client/*
NOTE: If there are too much pending emails, rm won’t work and you will need to use the following command instead:
cd /var/spool/mqueue
find . -name '*' -print0 | xargs -0 rm
cd /var/spool/mqueue-client
find . -name '*' -print0 | xargs -0 rm
X. Restart email client
-----------------------------------