NeXTstep on the HP 712 Part 1: Installation

It’s been a long time since my last pizzabox post - over a year! There’s been a lot going on in my life but I’m excited that lately I’ve had a lot more free time, which means more time to explore the world of workstations and share with you!

I’m also excited announce that I’m trying out YouTube videos - not instead of these posts, but in addition to them. This post has a sibling video, so if that’s more your jam, check it out.

This post is part one of a multi-part series about running NeXTstep on the HP 712. Today I’ll dive in to installation process.

NeXTstep is a historically interesting OS (more on that in a bit) and while I do own some original NeXT hardware, it’s a difficult to actually use - one of my longer-term projects is to make adapters for the NeXTstation to use more common input devices. That doesn’t stop me from playing with NeXTstep, though, because it also runs on one of my favorite pizzaboxes, the HP 712.

A note on cAPitALIZAtion

NeXT used a variety of capitalizations of NeXTstep, including

Regardless of historical accuracy, I think “NeXTstep” looks the coolest, so I’m going to use that throughout

The NeXTstep in computer evolution

The OS I’m installing is NeXT, inc’s NeXTstep. NeXTstep was made up of:

nextstep logo, from Quick Start manual

nextstep logo, from Quick Start manual

Those components make it sound like “yet another boring 1980s-1990s commercial Unix”. However, the NeXT few layers (NO APOLOGIES FOR PUNS) made it quite different from other Workstation OSes. It had:

I’ll dive deeper in to what features made NeXTstep special in a future post, but suffice to say: NeXTstep was incredibly important for the future of operating systems. While NeXT themselves didn’t have much success selling their workstations (or their OS…or their toolkits…), their work directly forms the basis of MacOS X and indirectly influenced the development of other OSes.

In the mid 1990s, NeXT’s effort to replace their Motorola 68000-based workstation architecture with a RISC one fizzled out. When they stopped selling hardware, they started selling new ports of NeXTstep for other architectures: Intel’s IA-32, Sun’s SPARC, and HP’s PA-RISC. The version I’m installing is NeXTstep 3.3 - the first and final version for PA-RISC.

This pizzabox Hewlett-Packs a punch!

The hardware I’m using is the HP 9000 Model 712. I’ve written about setting it up to use its native HP-UX OS, but that’s not the only trick up its sleeve. The 32-bit first-generation PA-RISC machines in HP’s 9000 family can run NeXTstep and are much faster than NeXT’s 68000 hardware. The 712 is a later model from that generation, packaging the power of earlier models in to a less expensive and smaller package.

Important things to know about my 712 are that it has:

Besides the computer, the other ingredients I’ll need are:

Disk configuration mis-STEPs

Approaching this naively, I’d expect the SCSI2SD’s default settings to work. Out of the box, it’s configured to have SCSI ID 0 be a 2GB hard disk - nothing fancy. I tried this, and the installation seems like it’s going to work, but when it comes time to format the disk, it runs in to problems:

disk initialization failed

disk initialization failed

Digging around on the internet a bit gave me a clue - NeXTstep is picky about drive geometry. Some fine folks on the “NeXT Computers” forum geometry settings that will work with NeXTstep on a SCSI2SD. Unfortunately, the scsi2sd-util software doesn’t have a way to set the important sectorsPerTrack and headsPerCylinder. Instead, I had to save the configuration to an XML file, open it up and edit those settings, and re-import the config in the utility. The offending default geometry settings were:


I changed them to the recommended settings from the forum:


This is good enough to get all the way through the install and software installation process, but it will just hang on the first true post-installation boot:

hanging after installation

hanging after installation

There’s a lot going on here, and it doesn’t explicitly tell you what’s going on, but there are clues. The first interesting bit is:

Checking disks
/dev/rsd0a file system clean: skipping check
mountfs: illegal remount request
mount: /dev/sd0a on /: Invalid argument
mount: giving up

In a typical Unix boot sequence, the root filesystem is first mounted read-only, checked with fsck, then re-mounted read-write. It sounds like that re-mount didn’t work! There’s more indication that the root is still read-only further down when it attempts to start syslogd:

Starting early daemons: syslogdFeb 15 23:35:26 localhost syslogd: cannot create /dev/log: Read-only file system

So, it seems like I’m having trouble with /dev/sd0a, the root partition. In a normal world, I’d expect that that corresponds to:

Given that I have my hard disk at SCSI ID 0 and CD-ROM at ID 3, you’d think that sd0a would be the hard disk. You would be wrong. If you read a little higher in this boot output, it says:

The following scsi disks have been found:
  sd0 at target 3
  sd1 at target 0

Excuse me? sd0 is SCSI ID 3? That’s…my CD-ROM drive. I guess it makes sense that it can’t be mounted read/write?! It took some digging, but I found an explanation as to why from an unlikely source - a NeXT knowledge-base article from 1997! NeXTAnswers #1684 explains:

Q: How are SCSI device numbers assigned on HP hardware?

A: Unlike NEXTSTEP on NeXT and Intel-based hardware, NEXTSTEP for PA-RISC assigns SCSI device numbers in order of decreasing SCSI ID numbers. In other words, NEXTSTEP scans down by SCSI ID, assigning device number 0 to the first device encountered, device number 1 to the second, etc.

For example, a typical HP SCSI setup consists of a hard disk at SCSI ID 6 and a CD-ROM drive at SCSI ID 2. In this example, the hard disk is assigned SCSI device number 0, while the CD-ROM drive is assigned device number 1. A second hard disk added at ID 1 would then be assigned device number 2.

Well that seems unusual! Why would NeXT number differently on PA-RISC than other platforms? It turns out…this is how HP does it. In the Owner’s Guide for the HP 712 on page C-13 it has a table to help you choose SCSI IDs, and it notes that your internal hard drive would normally be ID 6 (the “Winchester Disk”). On page 6-2 (the beginning of the section about CD-ROM drives) it notes:

The instructions in this chapter assume that your CD-ROM drive is set to the factory default address of SCSI ID 2.

The boot disk being SCSI ID 6 and an external CD-ROM being ID 2 is not what I would typically expect. On a Mac (at least!), it’s traditional to have the internal boot drive be ID 0 and a CD-ROM be ID 3. I can’t say I know why HP numbers things differently from other manufacturers, but…it seems that they do.

To bring this back around: what’s happening here is the bootloader is starting up the kernel from the drive it’s on, then telling it to proceed to mount /dev/sd0a as root. Because my IDs are set in a “typical” fashion, that results in it trying to mount the CD-ROM as root instead of the boot disk. Renumbering my SCSI drives to have the disk at a higher ID than the CD-ROM fixes the problem.

My final SCSI2SD configuration had the hard disk at ID 6, and the CD-ROM drive at ID 3.

Finally doing the install

Now that we know that:

and have the SCSI2SD set up correctly, it’s time to actually start the installation! Booting from the CD-ROM brings up the NeXTstep bootloader, a language choice screen, and the installation main menu. Once I give my consent for beginning the installation, it goes through what looks like a pretty normal Unix boot.

Once the system is up, the installer shows which disk it thinks it should install to. If I accept that choice of target disk, the installer gives me one last change to opt-out before the point of no return.

As the main-menu warning indicates, the installer will entirely take over your hard disk. There are some notes online about it just being generally impossible to construct a disk with an HP-UX and NeXTstep partitions. I suspect that’s why NeXTstep uses a bootloader, rather than passing kernel parameters from the firmware prompt like most of its contemporary workstations - the firmware isn’t capable of reading deeply enough in to the disk.

First the disk needs to be “prepared” - I’m assuming that behind the scenes it’s writing a partition table and formatting the disk. Then, files are copied from the CD-ROM. The formatting takes about 5 minutes; the copying takes about 12 minutes.

After the copying stage, it’s time to reboot from the the hard disk for software installation. This time, it’s not in text mode anymore! My HP 712 isn’t currently connected to a network, so the networking part of the boot process complains. A quick “Control-C” nudges the process alaong.

The first graphical step is to configure hardware. Since NeXT knows exactly which components are in this workstation (since it’s a specific HP model, instead of an arbitrary PC), I can just proceed with the defaults. After configuration, I get to select software I want to install (on top of the base system). The options are:

I’m going to install everything - the process takes about 35 minutes.

After a post-installation reboot, I get a chance to select which language to use. Folks who’ve installed Mac OS X may find this screen rather familiar:

keyboard and language choice

keyboard and language choice

and that’s it! I’ve successfully installed NeXTstep 3.3 on an HP PA-RISC workstation and I get my reward: the NeXTstep desktop.

first boot - clean desktop

first boot - clean desktop

What’s the NeXT step? (SEE WHAT I DID THERE?!?!)

This post is only the first part of my NeXTstep on PA-RISC project. I’m planning on there at least being a Part 2 on setting up networking and finding and installing useful software (like the developer tools!) and a Part 3 of reflections on the experience, its similarity to (and differences from!) the modern Mac OS. Further in the future, I’d love to do a Part 4 about developing a full application on NeXTstep.

This is the part where you come in - do you have any stories about using NeXTstep? I’d love for you to send them to me via email to! Also, please let me know if you’d be willing for me to include quotes from your stories in part 3 of this series (and how you’d like to be cited).