For anyone that's comfortable messing with filesystems in Linux, you can create a bootable SD Card from scratch using just the update.zip firmware file. The only difference right now is that the serial number listed in the About dialog is garbage, which means it's probably stored as ASCII characters somewhere. I can login to Kobo and Google Play just fine, though, so I'm not going to worry about it.
All I needed to know to start was what the partition table looked like:
Code:
4 heads, 16 sectors/track, 244224 cylinders, total 15630336 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xcf3814cc
Device Boot Start End Blocks Id System
/dev/sdb1 92160 616448 262144+ 83 Linux
/dev/sdb2 616449 1665025 524288+ 83 Linux
/dev/sdb3 1665026 4286466 1310720+ 5 Extended
/dev/sdb4 4286467 15523839 5618686+ 83 Linux
/dev/sdb5 1665088 3762240 1048576+ 83 Linux
/dev/sdb6 3762303 4286466 262082 83 Linux
Take a fresh card and create the partitions. As far as I can tell, the size only matters with the first and possibly second partitions. The other important bit is the start sector for partition 1. The kernel and initial ramdisks are stored raw in the space before block 92160. So I used fdisk to create partition 1 and 2 using start and end sectors exactly as above. If you're using another 8GB card, go ahead and create the rest of the partitions with exactly the same start and end blocks as well.
I used a 16GB card, though. Partion 3 is an extended partition that's split between the /data (partition 5) and /cache (partition 6). Partition 4 is /mnt/sdcard. I decided to split 4GB between data (3.5GB) and cache (512MB) and put the rest (~10GB) into sdcard.
Once the partion table's written, format partitions 2, 5 and 6 as ext4.
Now find the firmware update that you want. The current firmware can be downloaded in 1MB chunks from http://download.kobobooks.com/vox/images/eng.CAN.20111117.182539.40022/x000 through x166 and concatenated into a sideloadable update.zip file. I used a script with wget to get all the pieces. There's a slightly older one at http://download.kobobooks.com/vox/update.zip that's easier to download, but your Vox will update automatically to the latest when you first boot.
Create a directory and unzip the update.zip file into it. Cd into the directory so you see system.img, uImage, and the rest of the update files. If you want to make changes to the file system, now's the time (mount system.img as loopback and, perhaps, add "su"). Then, as root, run the following commands,
making sure you change /dev/sdb to match where your SD Card's device.
Code:
dd if=/dev/zero of=/dev/sdb bs=1 seek=30408704 count=1
dd if=./u-boot.bin of=/dev/sdb bs=1024 skip=1 seek=1
dd if=./uImage of=/dev/sdb bs=1048576 seek=1
dd if=./uramdisk.img of=/dev/sdb bs=1048576 seek=11
dd if=./recovery-uramdisk.img of=/dev/sdb bs=1048576 seek=12
dd if=./system.img of=/dev/sdb1 bs=512
Once this is done, mount partition 2 as ext4 and copy update.zip (if you made changes to system.img, make sure you rezip the directory) to the partition, naming it recovery_backup_signed.zip. Sync and unmount the partition. Your card should now be bootable. Mine took extra-long to boot because it sets up the /data and /cache partitions, but if you get to the Kobo book animation, you should be home free.