Upgrading Ubercart from Drupal 5 to Drupal 6

This page will guide you through the process to update your Drupal 5 Ubercart installation to Drupal 6. You should follow any and all instructions given by the Drupal project when updating, as well as any contributed modules' instructions. This is especially true and necessary when upgrading a site using CCK.

Nevertheless, this page intends to be able to at least roughly guide you through the whole process. If you follow it to the letter the worst thing that can happen is you'll have to restore your backup...

BACK EVERYTHING UP, INCLUDING YOUR WHOLE SITE'S FILES, AND THE DATABASE!
Seriously. I lost count of how many times I had to rollback while I was doing this. If you don't back up you're going to shoot yourself in the foot.
Upgrade ImageCache to 5.x-2.x
This step is recommended by Ubercart god Lyle. You may want to backup again after you take this step, so you won't have to repeat
it if something gets screwed up.
Disable all modules but core:
You might be able to get away with leaving Core - Optional enabled, but I didn't risk it.
Backup your sites/ folder, and your files folder (may vary depending on your configuration):
Make sure that you preserve the permissions of these folders. It will help you later. In Linux to do this you do something
like cp -rp sites/ files/ ../backup/
Delete all your sites files:
Yes, delete all of them. Now you see why I told you to backup before. If you haven't already done that, DO IT BEFORE YOU TAKE THIS STEP!
Install Drupal 6's files where your old site was:
In the same folder you just deleted everything, unpack your shiny new Drupal 6 installation.
Move back sites/ and the files/ directory into the new Drupal 6 installation:
As far as I know, most installations will have sites/default/settings.php for instance, so you shouldn't have to worry too much about that (multi-site configurations could potentially be much harder)
With your files directory though, you're going to want to ensure that wherever you had it configured at before, you put it in the exact same spot. Drupal is going to update and look for it in the same spot, so make sure you do this. It was a source of a lot of headaches for me during this process.
QUIRK: add a language field to the url_alias table:
I don't know what's up with this, but I had to do this to make everything work. Using phpmyadmin (or similar), create a field 'language' (VARCHAR length 2) in the url_alias table. I have not filed a bug against this (or checked if it's already been reported), but it was necessary to upgrade for me. You'll get a (harmless) warning later about how it tried to create the field and it already existed, you can ignore that.
You can track the progress of this issue on drupal.org at http://drupal.org/node/194588. Hopefully soon this step can be stricken from the record. Smiling
Run update.php:
Navigate to yoursite.com/update.php. If you get an access denied error then you may have to edit your settings.php file. You'll see a variable definition: $update_free_access = FALSE; ...change the FALSE to TRUE, and then you'll be able to update. WARNING: Remember as soon as you're done with the update process, to return this to FALSE, otherwise you will introduce a security hole.
Click 'Continue', then click 'Update'. If this process fails there is a serious problem with your Drupal site. I have never encountered this, so you'd be better off asking in the proper channels.
Delete all old contribs and move new contribs into sites/all/modules:
Again, for most configurations, you'll put your contribs in sites/all/modules. Completely delete everything first though, don't just replace, as this could cause unexpected errors.
Run update.php again:
Yep, same deal... Click 'Continue', then 'Update'. Hopefully everything will update without stopping. (As long as you don't see something like 'unrecoverable error' or similar, you can usually safely ignore the error messages that crop up. Upgrade paths can be complex and 'field already exists'-type errors are harmless usually.)

Alright! So at this point you should (God-willing! Laughing out loud) have a site up that resembles your old site, but it's in Drupal 6 now... On to a couple of tweaks needed for Ubercart...

Make sure your files/ directory is writeable!
This was another source of drama for me, the error messages relating to this are too cryptic (directory already exists) and it can be very confusing to figure out what's happening.
In Linux you can do something like chmod -R 0777 files/ to make files/ (recursively, meaning all its sub directories as well) world-writeable. I put www-data in the same group as the owner of these files, so I make mine 0775, but you may find that isn't possible with your setup. If you want, try it, and if it doesn't work, make it fully world-writeable (is this a security issue..?)

Great, hopefully at this point you have an Ubercart site that is working in Drupal 6 now! The only thing that might be sketchy as of now are things like custom workflow stuff, unfortunately I don't have enough experience with that to be able to offer any tips. Bug Ryan... Eye-wink
P.S. Remember that if you set $update_free_access = TRUE; in settings.php, to change TRUE back to FALSE. Seriously, or puppies will eat your firstborn goldfish.

note: http://drupal.org/node/427658#comment-2094034 : if you are missing images in product grids, check:
Administer - Content Type - Product - Ubercart Product Settings - Product image field (Select the image field from the list)
note: In the Conditional Actions menu there is a tool to convert your workflowng data to conditional actions.