I recently discovered (courtesy of Ubuntu Geek Portable Ubuntu, a Portable Windows application which uses Cooperative Linux [version 0.7.3] to run a Linux kernel as a Windows process! I was very pleased, but found a few small glitches in the installation and upgrade from Ubuntu 8.04 LTS to the latest Jaunty 9.04 release which I’ll document here.
Upgrade to Jaunty
First, as mentioned above, Portable Ubuntu comes with 8.04. I upgraded to 9.04 by replacing all references to
jaunty, and ran apt-get dist-upgrade [the default version doesn’t include aptitude]. This upgrade went perfectly; I was a little nervous about skipping a version completely, but it worked just fine.
Enlarging the root filesystem
I had to enlarge the main partition soon afterwards: to do that, shut down Portable Ubuntu, and open a DOS prompt in the images folder. Run:
fsutil file createnew more_space.img SIZE_TO_ADD_IN_BYTES
copy /b rootfs.img+more_space.img rootfs_.img
move rootfs_.img rootfs.img
Boot Portable Ubuntu, and run
sudo resize2fs -f /dev/cobd0.
TAP for Host<->coLinux communication
As mentioned on the networking page, the default slirp networking is not very efficient, although it is perfect for portability. I added a TAP device by downloading the coLinux modified TAP driver, extracting to an empty directory, and running
tapcontrol.exe install OemWin2k.inf TAP0801co
At first I was worried that this might interfere with my Tap device for OpenVPN (driver version 0.9), but it didn’t. To configure this device, I renamed the device to “coLinux_Tap”, set it as always connected (coLinux_Tap Properties -> configure -> Advanced -> Media Status == “Always Connected”), and assigned a static IP address of 192.168.3.1.
I downloaded the daemon package from colinux for version 0.7.3, and extracted
colinux-net-daemon.exe into my Portable_Ubuntu folder. This step is very important; without it, the tap device in colinux will not connect to the tap device in windows.
The next step was to actually create an eth1 in coLinux which would be intended for use with the Tap device. I added the following line to
Finally, I booted Portable_Ubuntu, and added the following to
iface eth1 inet static
Once I did this, I had my tap device ready for local communication. In order to have X use it, I edited
export DISPLAY=192.168.3.1:0 instead of the default (which was the slirp IP).
The only remaining problem was PulseAudio. I had to edit the
pulseaudio-0.9.6\default.pa file, and modify the first two lines to read
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.3.2
load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.3.2