Installing Windows 98 using PXE boot
Here's how I installed Windows 98 on an old machine by without using any physical boot floppies/CDs. The idea is to first PXE boot a network bootdisk from another machine, which allows copying the Windows install cd files to the target machine's hard drive. Next, it's just a matter of booting a Windows 98 boot disk and starting the installer. Unfortunately all of this is a huge crapshoot that requires lots of old janky components to work together.
- The Tftpd32 DHCP/TFTP server.
- PXELinux. I used this zip in particular.
- A PXELinux configuration file. This contains information on the menu structure and floppy images to use. Put this in a pxelinux.cfg subdirectory of wherever you put PXELinux.
- A network card that will sucesfully PXE boot, which is a crapshoot. Couldn't get it to work with Intel Pro/100 cards.
- A network boot disk image that supports your network card. Difficult to find, and many require you to build them using tools that don't work on modern Windows versions. I used this one, which happily supported the Compaq network card my machine uses. I've also added a generic NDIS network driver to this image that should work with all network cards as long as PXELinux is used with the keeppxe option (see my linked config file); however this did not work for me. To add support for another network card, open the file in WinImage and consult the text in 'autoexec.bat'.
- WinImage to edit floppy images.
- A Windows 98 boot disk image.
- A Windows 98 iso image or cd; extract the files within to a shared folder.
Here's how I saved/unzipped all that stuff on my host machine (running Windows 8.1):
D:\RETROMEUK | tftpd32.chm | tftpd32.exe | tftpd32.ini | +---boot | ldlinux.c32 | libutil.c32 | memdisk | menu.c32 | netboot.IMA | pxelinux.0 | winb98.IMA | \---pxelinux.cfg default
pxelinux.0, memdisk and the .c32 files are part of the SysLinux distribution and can be found in (deep) within its zip file.
- Disable your network's main DHCP server (i.e. built into your router).
- Disable all network adapters other than your main ethernet connection; VMware network adapters kept somehow preventing Tftpd32 from binding to my main network card.
- If your PXE boot prompt lists a DHCP server, make sure it's using your server machine's IP address. When trying to do all this using a VMware client, it kept listing the virtual VMware adapter's (i.e. installed on the host) IP address, probably due to some sort of DHCP forwarding mechanism. This prevented it from successfully PXE booting.
- Create a shared folder with the Windows 98 setup files.
- Run Tftpd32.
My Tftpd32 configuration
Once you've got everything going far enough that the target machine gets a DHCP address and manages to start PXELinux, you'll be presented with a blue menu. Pick 'Network boot disk' and hit Enter. At this point my machine kept crashing; the cause was using a too-high-density SDRAM stick; you've been warned. The network boot disk will ask you for a domain to join; just enter whatever if you're using a workgroup-based network. When prompted for a user name, make sure to use quotes if your user name includes a space. The shared folder you entered during the setup phase will be bound to the I:\ drive letter.
Unfortunately I couldn't get my main Windows user's credentials to work; an alternative is to give 'Everyone' read/write access in the shared folder's settings. Also, make sure to turn off 'Password protected sharing' in your Windows networking settings. Then, just log in using a random user name and password. If you don't want to reboot and use the boot disk's menu each time, try commands such as net logoff and net use [drive] [share].
Once you've successfully booted, use fdisk and format to partition the target machine's hard drive, if needed. Next, just copy over the Win98 files to some directory.
The network boot disk does not leave enough free memory available to run Windows Setup. So just reboot, this time run the Windows 98 boot disk, cd to wherever you put the installer files and run setup.