MigrateBugzillaToRT

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
**************************
 * 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
 -----------------------------------