The key changes from before are as follows:

The depenguinator now works with recent FreeBSD releases.

The makefs code borrowed from NetBSD is updated, and as a result will compile on more recent versions of Linux.

Instead of setting a root password, the depenguinator now installs an SSH public key.

Instead of constructing a disk image which must be written to the first 40MB of the boot drive (which would often fail if that space contained an active filesystem), the depenguinator now constructs a disk image which can be written to a swap partition (after swapping is turned off, of course) and then booted via GRUB.

Without further ado, here are the steps I needed to upgrade an Ubuntu 7.10 system to FreeBSD 7.0-RC1:

Install some bits which the depenguinator needs which aren't included in the default Ubuntu install. apt-get install curl apt-get install bsdtar apt-get install libc6-dev apt-get install zlib1g-dev Download the depenguinator and verify its SHA256 hash. curl http://www.daemonology.net/depenguinator/depenguin-2.0.tar.gz > depenguin-2.0.tar.gz sha256sum depenguin-2.0.tar.gz The computed SHA256 hash should be aa5d98dd3998545600f5af1d406196832ef8bea59cb022bc3a5efb303ac57cf7 . Extract the depenguination code. tar -xzf depenguin-2.0.tar.gz cd depenguin-2.0 Create the depenguinator configuration file. mv depenguinator.conf.dist depenguinator.conf nano depenguinator.conf This configuration file contains basic networking configuration parameters, so that the system can get back online after it boots into FreeBSD. Download the FreeBSD disc1 ISO image and verify its SHA256 hash (change "7.0" and "7.0-RC1" as appropriate.) curl ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.0/7.0-RC1-i386-disc1.iso > disc1.iso sha256sum disc1.iso Compare the SHA256 hash against the hash contained in the announcement signed by the FreeBSD release engineer -- we've never found any signs of Evil People deliberately tampering with release ISO images, but a few years ago there was a mirror which was corrupting ISO images due to a faulty network switch. Create the disk image. Change "7.0-RC1" to the appropriate release name, and replace ~/.ssh/authorized_keys by the path to the SSH public keys you want to be authorized to login as root. sh -e makeimage.sh disc1.iso 7.0-RC1 ~/.ssh/authorized_keys Turn off swapping. swapoff -a Write the disk image to the partition which used to contain the swap space (in my case, /dev/sda2 ). dd if=disk.img of=/dev/sda2 Add FreeBSD to GRUB's list of operating systems, and set it as the default system to boot into. In my case, this meant adding title FreeBSD root (hd0,1) makeactive chainloader +1 to /boot/grub/menu.lst and changing the default line to default 3 . Reboot into FreeBSD. shutdown -r now After waiting for the system to reboot, SSH back in; FreeBSD is now running in a memory disk; so now you can slice, partition, and create file systems on the hard drive(s) and install FreeBSD however you wish.

If you find this useful, please consider donating to the FreeBSD Foundation and sending me an email to let me know that you have done so -- it's remarkably gratifying to see such a concrete demonstration that people appreciate what I've done.

Now go forth and depenguinate!