Ubuntu 8.04 on Linode: Cloning and Upgrading to 10.04
Here are some jumbled notes from my Linode VPS's upgrade from Ubuntu "Hardy Heron" 8.04 to "Lucid Lynx" 10.04. I wanted to do a test run before such a huge upgrade, and I did so by cloning my VPS to a VMware Fusion virtual machine. Note that I also used Linode's backup feature before the real upgrade, just to be on the safe side.
Before the Storm: Finnix
I had no experience with Finnix before this upgrade, but it was exactly what I needed throughout the process. It's built into the Linode dashboard so you can use it as a recovery console if things go wrong. I also used it as my boot disk while cloning the Linode hard disk to my VM.
The Backup
rsync
is my weapon of choice, since it allows for transport over SSH
and incremental backups. I used this article to get started with
some suggested rsync
flags. I ran this several times throughout the
process:
rsync -avzPH --numeric-ids --delete --delete-excluded \
--exclude-from=backup.lst root@server.example.com:/ /mnt/sda1/
Here's my backup.lst
exclusion file:
+ /dev/console
+ /dev/initctl
+ /dev/null
+ /dev/zero
- /dev/*
- /proc/*
- /sys/*
- /tmp/*
- *lost+found
After rsync
, chroot
to the cloned filesystem:
mount -R /proc /mnt/sda1/proc
mount -R /dev /mnt/sda1/dev
chroot /mnt/sda1 /bin/bash
vi /etc/fstab # update mountpoints. change xvda to sda1, xvdb to sda2
Install a bootloader. The Linode VPS is in Xen and doesn't normally boot its own kernel. (I know next to nothing about Xen, but this is what I've gleaned.)
apt-get install grub
mkdir -p /boot/grub
cp -r /usr/lib/grub/i386-pc/{stage1,stage2,e2fs_stage1_5} /boot/grub
apt-get install linux
echo defoptions=vga=791 >>/boot/grub/menu.lst
update-grub
Reboot. Make sure you kill your cron jobs while the VM is on, as many are probably inappropriate for a backup server.
sudo service cron stop
I recommend taking a snapshot of your backup, here. It may actually be
faster to just rsync
again, but it's nice to have a complete backup at
the ready.
I used a couple commands to update IP addresses on my backup so I could more accurately test services post-upgrade:
sudo ~/bin/ack --follow -al '207\.192\.74\.235' /etc | sudo xargs sed -i.bak 's/207\.192\.74\.235/172.16.226.130/g'
sudo ~/bin/ack --follow -al '69\.164\.216\.5' /etc | sudo xargs sed -i.bak 's/69\.164\.216\.5/172.16.226.131/g'
The Upgrade
The following notes were taking during my test upgrade, and referenced during the real upgrade. I referenced the Ubuntu Community Documentation project's "Upgrading to Ubuntu 10.04 LTS" page. There is also a Linode article on upgrading to Ubuntu 10.04.
On the first pass, python-setuptools
killed my install. This was fixed
by manually reinstalling before upgrade:
sudo dpkg -r python-setuptools && apt-get install python-setuptools
Ensure the update manager is installed, and issue the upgrade command:
sudo apt-get install update-manager-core
sudo do-release-upgrade
I encountered conflicts in the following packages, where I had modified local files. Also included is my resolution, which may or may not be helpful to anyone else.
/etc/securetty
-- keep currently installed version; package adds some unneeded ones, and removes tty0 (but does include the Xen ones added by Linode)/etc/sysctl.conf
-- use new; uncomment "kernel.prink = 4 4 1 7
" and add "fs.inotify.max_user_watches = 524288
"/etc/mysql/my.cnf
-- kept my version/etc/dhcp3/dhclient.conf
-- kept Linode version: "request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, ntp-servers;
"/etc/dbconfig-common/config
-- nothing meaningful in the diff; use new/etc/dovecot/dovecot.conf
-- kept mine/etc/default/openvpn
-- was missing; installed package version/etc/snmp/snmpd.conf
-- kept mine/etc/apache2/apache2.conf
-- kept mine, as well as other apache2 files (but I did use the newmime.types
file)/etc/stunnel/stunnel.conf
-- kept mine/etc/default/stunnel4
-- kept mine/etc/udev/rules.d/75-persistent-net-generator.rules
-- kept installed, looked like theGOTO="persistent_net_generator_end"
at the start was intentional
Got a warning about vulnerable SSL keys generated by older versions of
Ubuntu; solution is to regenerate your keys. The dialog recommended
using openssl-vulnkey
and openvpn-vulnkey
to test.
Other than having to resolve the file conflicts, the upgrade was very smooth. I found some notes about fixing the Xen serial console, and syslog breaking in 10.04. I also upgraded to a newer paravirt kernel in the Linode dashboard.
python-setuptools error
More about that error with python-setuptools
: this thread was
helpful. From /var/log/apt/term.log
:
Log started: 2010-10-06 08:35:15
Setting up python-setuptools (0.6c9-0ubuntu1) ...
pycentral: pycentral pkginstall: not overwriting local files
pycentral pkginstall: not overwriting local files
dpkg: error processing python-setuptools (--configure):
subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
python-setuptools
Log ended: 2010-10-06 08:35:15
Per the article, ran "apt-get remove python-setuptools" and "apt-get install python-setuptools"
Post-upgrade Recompiling
Something required apt-get install libltdl-dev
. Useful info for this
post, no?
I recompiled all my custom stuff, including nginx
, memcached
,
mod_php
and php-fpm
, and mysqld
.