Saturday, November 16, 2013

Retrocomputing with Redhat 3.0.3


A while back, apparently longer ago than I thought until I looked at the dates on the screenshots, I got a hold of a Redhat 3.0.3 CD and gave it a try.

For a while now, I've been trying to get a collection going of the final Redhat releases for each version. Ie. 1.1, 2.1, 3.0.3, 4.2, etc. 5.2 and up aren't too hard to find on the web but anything older than that is. You've got to get creative. Back in the mid to late 90's, various publishers produced books with names like "Linux Unleashed" that came with CD's in the back. As it turns out, one of them came with Redhat 3.0.3 and it's still available on Amazon for like a dollar.

It actually ended up costing me about $10 before I was done though. The book's just a dollar but shipping cost about $4 and the first one I ordered was missing the CD. The second one took almost a month to arrive at my house too. I had almost forgotten about it when it finally did and it was a nice surprise.


I usually try to get OS'es running in VMware but old linux boot disks don't usually like VMware. 3.0.3 was no different. LILO hung at LI. Qemu worked better though and I was able to get a complete install going.

I did this by loopback-mounting the CD, copying out the images/1213/boot0012.img disk image, along with images/ramdisk1.img and images/ramdisk2.img and running everything like:

qemu-img create redhat\ 3.0.3.img 2g
qemu-system-i386 -fda boot0012.img -hda redhat\ 3.0.3.img -cdrom picasso-i386.iso -boot a -curses

The installation was pretty straightforward. I had to swap floppies when prompted. It had that authentic '90's feel. There were a few quirky things. I had to configure X to use the VGA16 server and a "ps2-bus" mouse. Also, I don't remember exactly what happened now but after trying to set up networking over and over I eventually just gave up and told it not to configure the nework, other than to set the hostname. Otherwise the install went smoothly.

After making sure it booted, I converted the qemu disk to a vmware disk...

qemu-img convert redhat\ 3.0.3.img -O vmdk redhat\ 3.0.3.vmdk

...and migrated it over to VMware where it booted just fine.

redhat 3.0.3 - 1. first login

I guess VMware's floppy emulation isn't good enough for old linux. I've had that same issue a few times. The kernel can't boot from a floppy but the same kernel can boot just fine from the hard disk.

At any rate, once I got it running, I did some housekeeping - I added a user for myself and configured the network manually.



#>>>Device type: ethernet

#>>>Variable declarations:
#>>>End variable declarations



/etc/hosts: localhost redhat303



I disabled some services I wans't planning on using, like ancient SAMBA, NFS and the INN server. Anyone remember newsgroups? I'm waiting to run into a distro with a gopher server.

I also fiddled with X. Like other old distros, X is hard to get working well in VMware with Redhat 3.0.3. If you try to use SVGA, the video card is identified as "Generic SVGA" and resolution is constrained to 320x200.

redhat 3.0.3 - 2. svga

Hilariously unusable.

VGA16 is a little better but the color scheme is wild.

redhat 3.0.3 - 3. vga16

For whatever reason, Mono always seems to be the most usable to me.

redhat 3.0.3 - 4. Mono

X configuration was very quirky. I had to install the SVGA and Mono servers from the distro CD, even though I told the installer to install everything.

mount /mnt/cdrom
cd /mnt/cdrom/RedHat/RPMS
rpm -i XFree86-SVGA-*
rpm -i XFree86-Mono-*

Xconfigurator is quirky too. It doesn't give you the option to select the Mono server at all, it creates an XF86Config file with a Microsoft mouse, independent of whether you select that mouse type or not, and it crashes out near the end. It does create a semi-workable XF86Config though, under /etc/X11, and if you don't mind manually linking the appropriate X server to /etc/X11/X...

ln -s /usr/X11R6/bin/XF86_Mono /etc/X11/X

...then it is possible to get something working.

Remote Access

I wasn't actually all that interested in getting X working though, I really wanted to see if I could get my software working on the system and add it to my build farm.

For that, I needed to get remote access working.

Actually, before that even, I needed to get sudo working. Redhat 3.0.3 is too old to come with sudo, but version 1.6.9p23 compiled just fine from source as long as I configured it not to try to use pam, which Redhat 3.0.3 is also too old to come with.

./configure --prefix=/usr/local/sudo-1.6.9p23 --without-pam
make install

Getting ssh working was a little challenging. Again, 3.0.3 predates ssh, ssl and even a new enough version of zlib to build openssl.

openssl-0.9.6c can be built with a little coaxing.

./Configure linux-elf no-dso
make EX_LIBS=
sudo make install EX_LIBS=

That EX_LIBS= goofiness is because even though no-dso is specified, the build process still tries to link in -ldl. In the Makefile, EX_LIBS=-ldl is set. Manually overriding it on the command line works around the issue.

zlib is straightforward.

./configure --prefix=/usr/local/zlib-1.2.8
sudo make install

openssl-2.9p2 can also be coaxed into building.

You have to edit includes.h and somewhere near the top, before the #includes, add:


I'm not kidding, that's what you have to add. Feel free not to and track down why yourself. It's entertaining.

The actual build is somewhat straightforward other than having to tell it where to find zlib.

CPPFLAGS="-I/usr/local/zlib-1.2.8/include" LDFLAGS="-L/usr/local/zlib-1.2.8/lib" ./configure --host=i686-pc-linux-elf --prefix=/usr/local/openssh-2.9p2 --without-shadow --without-random
sudo make install

3.0.3 doesn't support shadow passwords, and the --without-random flag is there because, though /dev/urandom exists, it doesn't work. The configure script finds it though, and tries to use it unless you tell it not to.

After all that, I enabled X11Forwarding in the sshd_config, wrote a quick little init script at /etc/rc.d/init.d/sshd


case "$1" in
killall sshd
echo $"Usage: $0 {start|stop}"
exit 1

exit 0

...enabled it to run at boot...

chmod 755 /etc/rc.d/init.d/sshd
cd /etc/rc.d/rc3.d
ln -s ../init.d/sshd S90sshd

...and started it up.

/etc/rc.d/init.d/sshd start

Worked like a charm. xauth was installed with the main installation so X forwarding worked fine too.

Woohoo! I could ssh in.


Redhat 3.0.3 comes with the Arena web browser, which struggled with modern web sites, to say the least. Mosaic 2.7b5 and Netscape 3.04 also run but struggle as well. Netscape was neat though. Back then it had an integrated Mail and News reader and an HTML editor. I'd forgotten about all of that. It was fun to play around with it.

I tried getting a semi-modern version of lynx to build but it turned into a monumental undertaking. 3.0.3 has ncurses, but doesn't have version 5 or 6 which are the only versions lynx supports. I couldn't figure out how to make it ignore curses outright either. Weird.

I did get wget-1.5.3 to build:

./configure --prefix=/usr/local/wget-1.5.3
sudo make install

On the server side, Apache 1.0.3 was installed. It was old enough to still have an srm.conf file, but the configuration hasn't changed too much over the years and I had a quick and easy time getting it to work and even to serve CGI's.


Redhat 3.0.3 comes with gcc 2.7.2 which is modern enough to build my software. Perl 5.001m, Perl 4.036, Python 1.3 and TCL 7.4 are on there too, but they're all too old to be supported.

It came with CVS 1.7 too but it was too old to know how to use ssh. Make 3.71 was too old to understand some of the directives in my Makefiles. I had to build cvs-1.11.23 and make-3.82 from source but there were no issues doing so.

My software built and ran but I had to make a few tweaks to Rudiments. It appears that the various getXXXbyYYY_r functions (like gethostbyname_r) are defined in the header files but not implemented in the C library. Rudiments' configure script detected them by doing a test compile and was able to build the library, but later on apps linked against it failed with unresolved symbol errors. Grrrr. I updated Rudiments' configure script to do a test link rather than just compile and it successfully detected that the functions were missing.

I've had to do similar to get Rudiments to build on other platforms.

Fortunately, that's all that was required and I was able to get the SQL Relay client software working.

[dmuse@redhat303 dmuse]$ uname -a
Linux 1.2.13 #1 Sun Feb 11 01:26:41 EST 1996 i686
[dmuse@redhat303 dmuse]$ sqlrsh -host fedora19 -port 9000 -user test -password test
SQLRShell - Version 0.54
Connected to: fedora19:9000 as test

type help; for help.

0> select banner from sys.v_$version;
Oracle Database 12c Enterprise Edition Release - 64bit Production
PL/SQL Release - Production
CORE Production
TNS for Linux: Version - Production
NLSRTL Version - Production
Rows Returned : 5
Fields Returned : 5
System time : 1


Unfortunately, 3.0.3 is too old to come with any databases. No MySQL, no PostgreSQL, no SQLite even, so I couldn't run the server-side components. Maybe later I'll shoehorn a database onto it. For now, it's just neat to see it running at all.