(only in English - doar in engleza)
hawk.ro / stories / Slackware 2.3 on a 486

Slackware 2.3 (& neofetch) on a 486

Starting from a challenge on linuxquestions, I ended up playing with old versions of Slackware on old computers. The main challenge was to run neofetch on a "pre-Pentium computer". Neofetch is a handy tool that presents all kinds of information regarding the computer it's run on, in a visually pleasant form. Its only requirement is bash 3.2 (and ncurses). After meeting the challenge requirement, I decided to go even further, on a 386DX/40MHz with 8MB of RAM. For that one I used Slackware 3.0 and noticed that it had been the second Slackware distribution I have used(the first being Slackware 2.3). However, in doing that I cheated a little bit, by using a virtual machine for the more time consuming tasks (the actual installation of packages and compiling of the newer bash). However, the proper run was done on the real thing.

That gave me an idea: let's go back in time and see how an actual installation would be, using real hardware of that era (apart from the monitor). This means creating the boot & root diskettes and either perform the installation from CD-ROM or from another HDD, using the actual machine. In order to do it slightly faster I'll no longer use that 386 for installation but another computer from my collection: this time my old 486/100.

Easier said than done: that 486 is rather unstable at the present. Problem seems to be related to the VL-Bus graphic card (apparently an intermittent contact problem). Back to the Amigo1 then.

But first, some hardware changes: add a CD-ROM and also an IDE HDD enclosure for easier access to the harddrive. While I'm at it, I also remove the (unsupported in Linux 1.2.8) PCI network card and replace it with an older ISA 3Com 509 (I've checked the kernel to make sure it includes drivers for this one). And with this, first troubles: it seems that the 3c509 card doesn't work in this computer. After some investigation, the problems seems to be with the Plug-and-Play (PRAY!) BIOS of the mainboard. While the card doesn't require PnP, it honours it by default and it's left in an unusable configuration. There is no BIOS option to disable ISA PnP! However, after reconfiguration using 3Com software (that I was lucky to have as a floppy image) the card works.. until the next reset. I then notice that the 3Com software has an option to disable PnP on the card. This will force the card to stay in a fixed configuration regardless of BIOS PnP requests. Yeah, I remember now why I loved jumpered cards back then!

Welcome screen (after reading both diskettes)

Network connectivity solved, it's time for install. Typical (CD-ROM) installation process would require creating two diskettes (using rawrite): one that contains the kernel (called boot diskette) and another one that contains a ramdisk image of the "setup" filesystem (called root). The Slackware installation presents a multitude of options for kernel (boot) as well as some variants for root. For boot, idecd looks like a promising choice, given the hardware configuration. There is also a kernel that provides network support, but at the time network installation only meant NFS. Pass. For root "color144" provides the new, color, curses-based setup program (that looks quite similar to the one used nowadays, over 20 years later).

Good news: fdisk already has the option to specify partition sizes (as opposed to number of cylinders, forcing one to use a calculator to compute the size).

Create a swap partition, as well as a (reasonably sized: 250MB) Linux partition, then run setup.

QUICK (Choose quick or verbose install mode) - Quick allows me to select packages to be installed at the beginning of each set (a, ap etc.). The installation would proceed automatically until the next set. Verbose would have asked before installing each package (and would have presented more information). I don't want to MAKE TAGS.

ADDSWAP, /dev/hda1, mkswap, swapon. Yes, move to TARGET.

/dev/hda2, Format, 4096 (1 inode/4096 bytes). Yes, move to SOURCE.

Install from CD-ROM, Most IDE-interface, /dev/hdb (primary slave). slakware: normal installation. Disk sets: a, ap, d, f, n, x, xap, y (base, applications, development, FAQs and HOWTOs, networking, X, X applications, games). Move to INSTALL.

Now this CD-ROM drive is showing its age. After a few packages that went without problems, it suddenly decides it has had too much and refuses to read the kernel. Since I'm using quite a large (850MB) HDD for this experiment, there is plenty of room for a DOS partition that would contain the whole Slackware 2.3 installation kit (under 100MB). Why a DOS partition? Well, because it's more in tone with the times. Even on the CD-ROM, the packages are inside a directory called SLAKWARE in order to fit the DOS limitation of 8.3 characters filenames. Besides, I'm not in the mood of removing the HDD (despite the fact that it's in an enclosure for precisely that purpose).

So, (convoluted) procedure is as follows. Copy SLAKWARE directory to my Novell Netware server using a newer CD-ROM (well, DVD-Writer but that's beside the point). Boot the Amigo from (DOS) diskette, connect to Netware, create DOS partition, format it, copy SLAKWARE directory. By the way, the sets (A, AP and so on) are further separated into directories, each big enough to fit one diskette (e.g. instead of just a/ there is a1/ a2/ a3/ a4/ each containing a few tgz files). Boot again into Slackware (boot, root), and after logging in:

mkdir /inst
mount -t msdos /dev/hda3 /inst
setup

I do everything as before, except for SOURCE I chose Install from a pre-mounted directory. Which directory? /inst

Everything goes fine now, except...

I don't know what this is. It keeps rolling, nothing works. And at the last (Y) set too! It might be that this CPU is not meant to run without a heatsink after all? I open the cover and it seems somewhat warm to the touch. I install a heatsink (but no fan, since I don't have one, and maybe - just maybe - the underclocking from 100 to 66 would keep things under control).

Again with the installation process. This time I choose verbose and "install everything", despite warnings that this might not be a great idea. For one (I remember that!) X will be a symlink to the last server installed.. but that will be solved with xf86config. This time the installation (finally) goes well (and takes just a tad over half an hour). Configuration is next, skip bootdisk, I don't have a modem, yes I want to configure my mouse: Microsoft compatible connected to /dev/ttyS0 (COM1), don't have a CD-ROM (well...) I don't want custom screenfonts, modem speed.. 38400, why not (doesn't matter I said no at the beginning), LILO:

Configure network, hostname: amigo23, domain local, I don't plan to ONLY use loopback, IP, gateway, yes I'll be accessing a nameserver, run GPM, don't install sendmail.cf, timezone is EET, done.

Reboot

LILO
and hangs there. No prompt. No continuation. TAB does nothing. :( Keyboard buffer fills-up so it's clear LILO is not processing keyboard input.

Reboot, start from BOOT diskette, type mount root=/dev/hda2 ro to boot using the installation kernel. System boots ok like this. I attempt to reinstall LILO (/etc/lilo.conf looks ok) but to no avail. I suppose that, despite being careful to avoid going over the 500MB limit, this old LILO doesn't like my big HDD.

Well, having a DOS partition (apart from memories of the era) gives rise to another idea: loadlin

Boot DOS, fdisk/mbr removes LILO and allows DOS boot, then unzip loadlin to DOS partition, copy slakinst/kernels/net.b/zimage (network kernel) to c:\loadlin
edit c:\loadlin\linux.bat to run

c:\loadlin\loadlin  c:\loadlin\zimage  root=/dev/hda2  ro
(I don't know why double spaces but since that's how the original was..)

Finally it boots. Running pkgtool to remove some unneeded packages yelds an amusing message:

xf86config has no surprises, X runs on first attempt. I don't know why it starts with lowest resolution but Ctrl+Alt+Plus (numlock plus) increases the resolution to its maximum 1024*768 with 8bpp (256 colors).

Next, new bash. configure finises in about 14 minutes but make.. well:

[...]
gcc: unrecognized option `-rdynamic'
shell.o: In function `main':
/home/hawk/bash-3.2.48/shell.c:475: undefined reference to `libintl_gettext'
[... lots of those ...]
make: *** [bash] Error 1
Command had non-zero exit status 2
..after another quarter of an hour.

This seems like the end of that. However, why doesn't configure catch this? Apparently bash is trying to use its internal functions (that it has previously compiled). Might it be that another flag (-L./lib/intl/libintl.a) was needed? Well, nowadays we have search engines, and a search reveals that exact same problem encountered by someone else while compiling gnu binutils. International (NLS) support can be disabled by running configure with --disable-nls. The same applies to bash. So finally that means neofetch can run as well:

Finally!
Doom will take over the palette when it has keyboard focus

Not only that, but we also have xtetris, xmahjongg and xdoom. The last one having a funny effect. While its window has the focus it also changes the colormap (VGA palette). So it's either DOOM or the rest. Such was the life in 256 colors :)

All in all, this was a reminder that things were not that much simpler back then, despite some rose-tinted memories. Nevertheless it was a pleasant journey in the past and nowadays with the luxury of choosing what fits (as opposed to making do with what's available) it wasn't that bad.


1 Amigo: Another 486-based computer that was used in my previous Slackware experiments. Maybe one day it will have its own page.


Published 2019-05-14 by Mihai Gaitos - contacthawk.ro