************************** * 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 -----------------------------------