Saturday, November 16, 2013

Retrocomputing with Redhat 2.1


Not long after getting Redhat 3.0.3 running, I dug around on a bit, looking for 2.1. It turns out, if you google it and search through 10 or 12 pages of the results, you'll find a forum discussion where someone indicates that it can be obtained at: Ha ha!

Oddly, there's no wikipedia entry on InfoMagic. In the 80's and 90's, they and similar organizations, downloaded everything they could from BBS's and the fledgling internet, put it on CD and sold it cheap. Even with a decent modem, it was often more convenient to get software on CD from InfoMagic than to download the software yourself. As the "" website says, "Who knew that the companies looking for a quick buck through the late 1980's and early 1990's with "Shovelware" CDs would become the unwitting archivists of the BBS age? No one did, but here we are, looking back, muttering thanks to these souless con artists as we plunder the very data they themselves took from a time now past." Yeah, yeah. I'm not taking sides.

At any rate, apparently InfoMagic put out a CD with Redhat Linux 2.1 on it at some point and now it's archived at Excellent.


Creating something installable from the files available at that URL was a bit of a challenge, but I was up to it.

I downloaded...

wget -np -l 0 -r

...moved things around and removed the "value-add" software and other cruft...

mkdir bluesky-i386
mv* bluesky-i386
rm -rf
cd bluesky-i386
rm -rf libs demos Networking JE
rm -rf rr_moved ls_lr_2
rm -f `find . -name TRANS.TBL`
rm -f `find . -name index.html`
cd ..

...fixed permissions...

cd bluesky-i386
for file in `file \`find .\` | grep executable | cut -f1 -d":"`; do chmod u+x $file; chmod g+x $file; done
cd ..

...and created an iso image.

mkisofs -J -r -R -v -T -o bluesky-i386.iso bluesky-i386

I read somewhere that the codename for 2.1 was "bluesky" so I called the image bluesky-i386.iso. In case you were wondering.

The installation was nearly identical to Redhat 3.0.3. I copied out the boot0012.img and ramdisks. VMware was a no-go, so I installed in QEMU...

redhat 2.1 - 1. install

...and converted the resulting image to a VMware disk, which ran just fine.

redhat 2.1 - 2. First Login

The only issue I had was that during install, creation of a swap device failed. It apparently put the swap configuration in the /etc/fstab, but the partition wasn't properly formatted. So, post-install I had to manually format it.

mkswap /dev/hda 133024

This gave a warning. Apparently that number wasn't exactly right, but it still appeared to work.

Post install, I did the standard set of housecleaning tasks. I added a user for myself, disabled services I didn't plan on using and fiddled around with X windows.

X Windows gave me as much trouble under 2.1 as it did under 3.0.3.

SVGA was constrained to 320x200.

redhat 2.1 - 3. SVGA

VGA kind-of worked but looked weird.

redhat 2.1 - 4. VGA

Mono was ok.

redhat 2.1 - 5. Mono

See my 3.0.3 notes for getting it working. The process is nearly identical. The only difference is that mounting the CD is a little trickier under 2.1. There's no /mnt/cdrom or fstab entry, so you have to do a little more work:

mkdir /mnt/cdrom
mount /dev/hdc /mnt/cdrom

Manual network configuration was identical to 3.0.3 except that I used a different hostname and IP address.

Remote Access

Getting remote access working was very similar to 3.0.3. I had to build openssl-0.9.6c, zlib-1.2.8 and openssh-2.9p2 from source. I even had to add the V1_3_WILL_DO_THIS_FUNKY_STUFF line. But there were some subtle differences.

openssl required a "no-threads" option:

./Configure linux-elf no-dso no-threads

openssh didn't require the "--without-random" option.

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

zlib was the same.

Enabling the sshd server was identical.


As with 3.0.3, 2.1 came with the Arena browser, but it struggled even harder than the version that 3.0.3 came with. I'm not sure it even supported HTTP 1.1.

I was able to get the same versions of Mosaic and Netscape running. 2.7b5 and 3.04 respectively:

redhat 2.1 - 5. Mosaic redhat 2.1 - 6. Netscape

I did get lynx-2.8.7 to build from source by tweaking src/LYCurses.h and moving the chtype definition above the #ifdef:

typedef unsigned long chtype
#ifdef USE_SLANG

...and disabling color-style.

./configure --prefix=/usr/local/lynx-2.8.7 --disable-color-style
sudo make install

I built wget-1.5.3 without issue too.

On the server side, apache-0.8.14 was available, enabled by default and straightforward to configure.

More X Tweaking

After getting all that running, I tweaked X Windows some more. Enabling xdm was as simple as setting the runlevel to 5 in /etc/inittab.


...and rebooting.

redhat 2.1 - 6. xdm

Not exactly beautiful, but it worked.

I also ran an X server under Cygwin on my Windows machine and ran an entire X session to it. This made it possible to see what the session was kind-of supposed to look like.

redhat 2.1 - 7. remote X session

Again, not exactly beautiful, but if I remember correctly, in those days everybody had .fvwmrc files that they'd been fine-tuning for years. Nobody used the default desktop except maybe on SGI machines.


Playing with X windows is fun, but the end goal for me is to get my software running and put the VM in my build farm.

Redhat 2.1 comes with gcc-2.7.0 - sufficient to build my stuff. Perl 5.001m and 4.036 are also available, as is Python 1.2 and TCL 6.4, all too old for me.

As on 3.0.3, I had to build cvs-1.11.23 and make-3.82 from source. Though 2.1 comes with both, the CVS it comes with doesn't know how to use sshd and the make that it comes with doesn't understand some of my Makefile directives.

The only quirky issues I ran into while building my code were in Rudiments. No surprise there. Since Rudiments is the abstraction layer that all the rest of my software is built on, it's supposed to be the place where all the issues crop up. Apparently RTLD_GLOBAL isn't defined at all on Redhat 2.1, the dlsym() function takes a char * argument rather than const char *, and netinet/tcp.h isn't extern "C" wrapped. All easy to work around.

Before long I could access Oracle via SQL Relay.

[dmuse@redhat21 dmuse]$ uname -a
Linux 1.2.13 #1 Mon Oct 23 21:56:50 EDT 1995 i686
[dmuse@redhat21 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 : 2


But nobody even considered running a database on Linux of this vintage so the server components were hopelessly useless.


2.1 is very similar to 3.0.3. The installers were almost identical. The X sessions were the same. They were both elf and libc5-based. They both used kernel 1.2.13. 3.0.3 came out less than a year after 2.1 with some important but subtle improvements. I read somewhere that 3.0.3 almost came out as 2.2 but somebody decided it would be better to name it 3.X. It would seem that there is some validity to that, or if not, I could see how someone might imagine it to have been true.