Some notes on how to play with ULTRIX V4.0 under SIMH.

ULTRIX is DEC's own version of UNIX. It's derived from BSD (while it was not free, so this is a UNIX that has no sources included), but borrowed some things from System V. The last version (V4.5) was released in 1995. V4.0 itself appears to be from the end of the 80s.

Installation

The installation tape with the supported software, an additional tape “unsupported software” and some documentation can be downloaded from bitsavers.org. There are other ULTRIX versions available, but the 4.0 tapes seem to be the newest one that works. The original form of the distribution tapes is was available from the FTP server of the International Free Computing Task Force.

The SIMH configuration file

; chevron prompt (extended memory boot ROM) and non-volatile RAM for the
; emulated MicroVAX 3900
load -r /usr/share/simh/ka655x.bin
att nvr ultrix.nvr

; 32MB RAM
set cpu 32m
set cpu conhalt

; console interface
set tto 7b
set tti 7b

; RA90 disk drive, 1.2GB
set rq0 ra90
att rq0 rq1.dsk

; tape
set tq tk50
att tq0 Ultrix_4.0_Supported.tap

; disable stuff
set cr dis
set lpt dis
set rl dis
set ry dis
set ts dis
set tq1 dis
set tq2 dis
set tq3 dis

; use "setcap cap_net_raw=ep /usr/bin/simh-vax" to be able to run SIMH as 
; non-root. This must be a dedicated NIC on the host, in up state.
at xq0 eth1

; start the VAX
boot cpu

Booting the distribution tape

After starting the CPU, the VAX will show the chevron prompt (>>>) from the extended memory boot ROM. boot mua0 boots from tape, boot dua0 from disk. The boot command can be shortened to just b.

ULTRIX installation

The installation is pretty straightforward. Only the ADVANCED Installation can install all software sets. The default installation doesn't include a pager or even the man pages!

Partitioning: I didn't fully grok the difference between the different partition letters. The “c” partition seems to span the whole disk. Either “a” or “c” must be used to partition the disk, because these partitions start at 0, where the partition table is. Choosing the same partition for different directories will put both directories into the same partition. The default configuration scheme from the handbook is

a       root
b       swap
b       crash
g       usr
h       var

Setting the clock

The output of date '+99%m%d%H%M' on the host can be used to set the time during the installation. ULTRIX 4.0 is not Y2K-compliant. Setting a year after "99" will kick the system back to the 70s.

Software sets

Multiple software sets can be chosen by writing the numbers separated with spaces. The man pages (19) require the document preparation software (9) to be installed. I just installed everything.

Misc

Software management

setld -i list all known sofware sets and their status (installed, corrupted, …)
setld -i ULTUUCP400 show all files installed by a given software set (like dpkg -l or rpm -ql)
setld -a /dev/rmt0h show the set selection menu as seen during installation. The list is read from tape. It omits the sets that are already installed
setld -a /dev/rmt0h ULTDCMT400 installs the specified software set without prompting

Networking

netstat -i shows all available interfaces. Something like ifconfig qe0 192.168.0.7 netmask 255.255.255.0 configures one. There's a script netsetup install to put the needed commands into the startup scripts automatically.

The gateway can be set with route add default 192.168.0.1 1. How to set it permanently though?

configuring the resolver

/etc/resolv.conf must be complete for the resolver to work, i.e. it must contain both the domain and nameserver lines. Otherwise the message “*** Can't initialize resolver” is shown every time the resolver is used. Then configure the service selection (old style Name Service Switch) to use DNS lookups for hosts by setting hosts=local,bind in /etc/svc.conf. Both can be acomplished with svcsetup.

nslookup still doesnt work though.

*** Can't find server name for address 192.168.0.2: Not implemented

tcpdump shows

IP 192.168.0.7.1037 > 192.168.0.2.53: 1 inv_q+ (27)
IP 192.168.0.2.53 > 192.168.0.7.1037: 1 inv_q NotImp [0q] 0/0/0 (12)

Another thing that strikes attention while using tcpdump are the frequent “trailer-arp replies”, which I have never seen before.

Other things to try