Even one-step Ubuntu upgrades from what I hear have a lot of potential to go south, and you should be ready to do a fresh install.
The one time I tried to do an in-place upgrade, this is exactly what happened. Granted, that was 6+ years ago and I've heard that it's gotten a
lot better since then, but I'm not doing that again. Fresh installs can be rather easy to set up in order to hit the ground running, but it depends on how the initial install went.
It was actually during the process of prepping for 13.04's install that I finally found the solution that makes it fairly easy on the installation front. I'd read - and tried - suggestions for a couple release cycles that basically required using
deselect to do the work (which also relies on the not-very-descriptive output of
dpkg --get-selections), and trying this never worked out too well.
But down inside /var/log/apt/ is the real log of everything apt has done over the installation period, and this will tell you whether you installed, purged, or if something came in on a dist-upgrade. It also makes it easy to focus only on what changed
after installation, since the contents of the base install will be the first entry or two, and then everything else is yours. You can get all of that, figure out which ones are actually necessary, and have the entire installation command at the end.
So you either use
less /var/log/apt/history.log
or
zless /var/log/apt/history.log.1.gz (and so on; as many as there are for the number of months 11.04 has been installed)
to view them or dump them out to a another file you can write to. Then use this for the analysis work to see what to keep and what not to keep and construct a one-line installation command for. Also remember that if any external repositories were added, these need to be written down as well so that any packages from them can be properly restored.
Another invaluable tool is
dpkg-repack, which can reconstruct a .deb file from an installed program (such as one installed from source only, provided it was installed using either debian rules or
checkinstall). The typical use case for it is not to migrate between old and new versions of the OS, but to move horizontally between two computers with the same version. Using it for vertical migration is a bit lazy, but if that's the only thing that can be done in time/money constraints, then so be it.
The other part is making sure that - at the very least - that / and /home are on different partitions so that you can just write over the old / with 13.04 and voila, the configuration gets kept and the install command worked out above will manage to get it all back (or reasonably close, accounting for differences to some package names or removal of certain stuff) to how it was with 11.04. A separate /home is old hat kind of stuff but I can't imagine going without it now.
In summary,
- Separate / and /home partitions is a precondition.
On 11.04
- Make note of all the external repositories, if applicable.
- Unless you want to recompile any source-only packages, try to use dpkg-repack to recreate them (and hope that nothing really integral in the base system has changed so it can install cleanly on 13.04).
- Assess the contents of /var/log/apt/history.log and its sisters to get the list of necessary post-install software.
On 13.04
- Restore the external repositories, if applicable (add-apt-repository can be used if you don't want to mess with doing it through the GUI or editing sources.list by hand).
- Use the installation command garnered from /var/log/apt/history.log.
- Install any of those regenerated .deb files, if applicable.
- Assorted other post-install things like dist-upgrading the kernel and so forth.