This is an article on running Caldera Open Linux 1.3 on QEMU. I am a bit late to the party, as there is already a guide online for this exact activity. However, I originally performed this install sometime in 2018, and am primarily documenting the process I already followed. My process deviated from the existing article in a few ways, but two stand out:
- This process gets working networking
- I did not compile the X11 support; instead I opted to redirect X11 to an Xnest instance running on my local machine.
That said, I will augment this with details on getting X11 running, so both mods of X operation are documented.
So, with that out of the way, let's get started. First off, create a working directory for your VM, then create a disk image in that folder. I opted for 10 GB maximum, of which only 1.2 GB was actually used in the end.
$ qemu-img create -f qcow2 openlin.qcow2 10G
Then create a shell script to run & install the virtual machine. Here's mine for the initial setup. I opted to install direct from my optical drive; most people will probably insert a path to an ISO instead of /dev/sr0
#!/bin/sh qemu-system-i386 -machine pc \ -net nic,model=ne2k_pci \ -net user \ -device sb16 \ -device adlib \ -hda openlin.qcow2 \ -cdrom /dev/sr0 \ -boot d
Running the script should result in the initial bootloader screen:
Simply press enter (or wait) and you will eventually get to the the language selection:
At this point, just answer the usual language/keymap settings and specify to not load a saved configuration. You will reach the "Change LISA setup" dialog:
The first time through we'll do nothing here and continue (fourth option) The installer will then report detected hardware:
Just accept and confirm everything has been recognized. Select "Yes" when prompted to change disk partitioning. Select the hard drive:
After an information screen, you will be transferred to a shell session of fdisk to create your partitions.
Most of the operations work in cylinders by default, which is easy enough to compute with a 10 GB drive. With 1024 cylinders, this means each is 10 MB. I'm going to allocate 240 MB for swap, which means 24 cylinders. As such, exactly 1000 cylinders are used for data. This can be accomplished as follows:
Finally, we need to change our swap partition type, and then write the changes to disk:
We are warned to reboot, so use the QEMU Machine > Reset option do to this.
When back around the second time, proceed as before until you reach the Change Partition Table screen the second time. This time, select No.
Select the swap partition:
Install from CD-ROM:
Then select the ATAPI-CD-ROM, but change to /dev/hdc.
Next, select the partition created earlier:
Accept formatting, but don't accept the bad sector check. When prompted for installation type, INSTALL IT ALL!
Then the copy begins!
Once it is done, just pick a hostname:
For me, the networking wasn't working, even though I tried the probe option earlier. For now, just say we don't have a network card and we'll fix it after install. Just leave CMOS time on GMT/UTC and pick your time zone. Next, pick a PS/2 mouse:
But don't bother setting up a printer (unless you want to experiment with QEMU redirection). When prompted, specify a password for your root user.
Pick a reasonable name for your non-root account:
Then select default UID, group membership and home folder. Pick your shell next; there are a few choices beyond the bash default:
Then enter your full name and set the password for that user as well. The installer will then report any boot issues for you:
Specify to install LILO into the MBR of the first IDE hard drive:
And pick vmlinuz as your default boot image.
Accept the default boot entry name and no kernel boot parameters:
It will then show you the following screen that displays the LILO configuration:
The next screen shows the default services that are installed. The following are the defaults and probably all you'd want. Any of the others would likely be better suited for a modern Linux distro.
Initially, just select the VGA X server. We'll fix this later.
Probably best to say "no" to configuring it here.
Beyond this, it's just a few more dialog boxes to hit Okay on, then the the main install is done. If you forgot to disable the XFree86 configuration, it would run here. If so, just hit okay for the defaults.
And the install is done! After rebooting from the install, I suggest powering off the virtual machine and removing the CD-Rom image by removing the -cdrom and -boot lines from the shell script. This is the result:
#!/bin/sh qemu-system-i386 -machine pc \ -net nic,model=ne2k_pci \ -net user \ -device sb16 \ -device adlib \ -hda openlin.qcow2
Post-Install Configuration Fixes
So, the install is done, but the network doesn't work and X11 will be a weird resolution. Have no fear; both of these can be fixed.
First off, start up the VM and log in as root. Since we configured the network adapter as an ne2k-pci, we just need to generate the module dependency tree and then load the module:
# depmod -a # modprobe ne2k-pci
Which should detect our network card. Then we can re-run LISA
lisa, naturally) and configure networking. When LISA
starts, select the 3 System Configuration option, then
3 Network Configuration. You will end up here:
Unfortunately, I couldn't find any obvious settings to enable DHCP or run a DHCP client (I could run a server though). Thankfully, QEMU networking is well documented, so we can just set it up manually.
- Select 1 Configure Network Card
- Select Yes you have one
- Pick eth0 as your network interface.
- Enter anything valid in the 10.0.2 subnet for the IP address. I used 10.0.2.44, but it doesn't matter, as long as it's not .2 or .20 (due to a bug in LISA).
- Accept the default network mask and broadcast address.
- Select 2 Configure Network Access, then 2 Enter Router.
- Specify the IP of 10.0.2.2
I also suggest adding a hosts entry for your VM host, so you can communicate with it easily. This can be accomplished by returning to the previous screen (shown above) and...
- Select 1 Add a computer to the host table.
- Select 2 Add entry to '/etc/hosts'
- Enter the IP address of 10.0.2.2
- Enter the hostname of your machine, using the same fully-qualified parent domain as the VM. I.e., my VM is caldera.zerker.home and the hostname used for my PC is alpha.zerker.home.
- It will also ask if you want to refer to the machine by another name. Here, you should put just the base name (for me, this is alpha)
Finally, for DNS...
- Go back one more time and select 3 Configure General Network Services.
- Select the 1 Configure Domain Name Service
- Enter 10.0.2.3 as the primary DNS server. It's up to you whether to enter a secondary one; QEMU should internally use the DNS servers of your host if you configure it this way.
Go ahead and exit LISA now. You should be able to successfully ping
your HOST PC using just its bare hostname (e.g.
ping alpha for me).
However, we aren't quite done yet. The last step is to enable the
Kernel module permanently. I forget the "easy/intended" way to do
this in OpenLinux, and got bored reading the contents of
so I found the answer in /etc/rc.d/rc.modules:
Per the script, the module list is
where $PFX is
and $REL and $VER are from
uname -r and
uname -v, respectively.
Checking this on my install resulted in:
So it looks like we just need to edit
#1 Wed Aug 19 12:57:30 MST 1998.
Full disclosure: I looked in this folder much earlier, but the
dates-as-file-names confused me, so I went looking for more information.
Vi and vim users will already find their favourite editor present here,
but nano fans might be feeling dissapointed that it yields a 'not found' error.
Not to worry, let's check the available editors with an
It looks like there are actually a few non-vi terminal editors: joe, Easy-edit (ee), Jed and... pico. Yup, nano originated as a clone of pico, but here we have the original.
Pick your favourite (or check the manpages to help choose), then edit the #1 Wed file. Add ne2k-pci to the bottom of the file:
Save then restart (
reboot command if you're used to modern methods).
It should now load the ne2k-pci module on boot,
so networking will always be available.
This section is optional if you are only ever going to use X11 forwarding (see next section for that). However, native X11 is generally more convenient, so let's get started. As mentioned before, this information is based on the previous guide at the Gravis Ultrasad site, written my own words. See that site if you want to save some steps and use a precompiled version.
While we can configure and try to use the provided X server, it appears to display garbled fonts and is unusable. I was unable to isolate what part of the packaging process caused this issue, but (as mentioned at the above site), a complete rebuild of XFree86 without the packaging split solves the problem.
For this we need... the source CD. Yup. Time to add a -cdrom line back on your shell script to mount the source CD and start up QEMU with it attached.
Contrary to modern documentation, the source RPMs will install to a system path, and we need to mount the CD-ROM anyways, so go ahead and log in as root again and follow along:
- Mount the CD-ROM to
/mnt/cdromand change directory to
Install all XFree86 Source RPMs:
# rpm -i XFree86*
(add -h and/or -v if you want status)
Change directory to
- Create a subdirectory XFree86-3.2.2 to work from. Change into this subdirectory.
Extract each of the X server source tar files:
# tar xzf ../../SOURCES/X332serveronly.tgz # tar xzf ../../SOURCES/X332src-1.tgz # tar xzf ../../SOURCES/X332src-2.tgz
Feel free to add & to the end if you want to start the next before waiting for the previous to finish.
Apply the two primary patches, ignoring the rest:
# patch -p0 < ../../SOURCES/3.3.2-patch1 # patch -p0 < ../../SOURCES/3.3.2-patch2
Then just change directories, make and install:
# cd xc # make World # make install
Yup, we just hammered a fresh X11 install into the VM. Not a typically recommended process, but.. it works. We did clobber xinitrc too, so let's restore it to the provided one:
# cd /etc/X11/xinit # mv xinitrc twmxinitrc # ln -s ../wmconfig/xinitrc
So, if you replaced your XFree86 and want to use it locally, you need
to first configure it by running
Keyboard and Mouse settings should select the correct defaults, so
switch over to the Card pane and select the Cirrus Logic GD544x.
Add the following options for maximum compatibility:
Option "noaccel" Option "no_bitblt"
Then manually set the Video RAM to 4Meg.
Switch over to the Monitor pane and select Multi-frequency that can do 1280x1024 @ 60 Hz.
Then switch over to Modeselection and
pick 1024x768 at 24bpp. Feel free to try other modes later,
if you like, by re-running
Hit done and you're good to go. Time to finally log off from root and use your normal user.
X11 local use
If you followed the above setup, you should be good to go. Try
startx as your normal user. You should find yourself
in Caldera's "Looking Glass" desktop:
Have fun, play around and have a look at how things are organized and how they behave. Note that most applications are not configured in the Programs/Games groups shown by default; just left-click on the desktop to get a more comprehensive list.
Alternatively, if you are getting bored of the unique Caldera desktop
and just want some classic KDE, that's here too. Just launch using
kde command. You will find yourself in a KDE 2.0.35 desktop.
From this point, you can stop and just explore and enjoy the virtual machine. However, if you also want to try re-directing X11 to your host machine, read on to the next section.
Since the VM has networking configured, and X11 is a network-transparent protocol, the other option is to just run another X Server on your host machine and have OpenLinux connect to that. While it is technically possible for it to connect to your primary X server, the security changes needed for this configuration are not recommended. Instead, there are two options: nested X server and a second X server.
The nested X server is the simpler and more recommended option. Simply
xnest if it is not already installed, then run as follows:
$ Xnest -ac -listen tcp :1
The -ac parameter disables access protection, -listen tcp listens for TCP connections, and :1 specifies this is the second (index 1) server on the machine. Your primary X server is likely already :0. This will give you a blank window of some reasonable default size. If this size is not to your liking, resist the instinct to just resize it. Instead, quit and re-run with the -geometry parameter specified. There are other options for XNest; refer to the manual page for more info.
An initial blank Xnest window will appear as follows:
Note: most sources recommend using Xephyr nowadays for nested X servers, as it supports more modern X features. Since we are using this for a very old Linux distribution, the lack of these features is actually a benefit.
The other option is to run a second, full-screen X server on your host machine. To do this, switch to a separate TTY (e.g. by pressing ctrl + alt + F1), then run:
$ X -ac -listen tcp :1
Which is basically the same as the XNest command. Here, you'll have to use Ctrl + Alt + F7 to switch back to your QEMU session before running commands. The new X session should be available on Ctrl + Alt + F8, but I don't recommend switching away from it once you get applications running. On my machine, it doesn't re-display, but this could be NVidia's fault. It's probably just easier to make a larger Xnest window.
Regardless which method you picked, you would simply run the following command on the OpenLinux VM to set the X server to use:
$ export DISPLAY=alpha:1
Where alpha is the short hostname if your VM's host, specified when adding the entry to the hosts file earlier and :1 is the display index specified when running the nested/second X server.
Beyond this, you just need to run a window manager and some applications for your new nested X server. If you want to run the default "Looking Glass" configuration, simply execute the xinitrc file itself:
And it will show up as so:
If you ran the full-screen X server, it should switch to it automatically once a window manager starts controlling it.
Similarly, if you want to run KDE, you would run the following:
There are a few other window managers you can run separately if you like. For example, to get an Open Look window manager session running xterm and Xfm, you would run the following:
$ olwm & $ xfm & $ xterm &
And get this result:
However, xfm has problems with mouse events on anything resembling a modern X server (even XNest).
If you wish to use this sort of thing often, I suggest creating a shell script or application launcher to get XNest running quickly, then a shell script on the VM side to set DISPLAY and connect easily.
And that's it. Have fun with your Retro Linux VM.