Installing Ultrix 4.5 on SIMH
This WORK-IN-PROGRESS guide will be a simple guide to installing ULTRIX 4.5 for VAX on SimH.
Contents
Requirements
The following is a list of things required for installation
- A recent version of the SIMH emulator
- Make sure the binary you're using includes Ethernet support
- I'm using a self-compiled version (git revision 0e8c0aea)
- An ISO image of ULTRIX 4.5 for VAX
- See the "Resources" section for a download link
- It's probably also possible to install it from tape, although I don't know if any installation tapes for ULTRIX 4.5 exist
- Optional stuff (might get added to the guide later):
- Starfish Ultrix Freeware CDs from here
SimH configuration
The machine I'm using to run ULTRIX has the following configuration
- DEC MicroVAX 3800
- 64mb memory
- DELQA network card (XQ0)
- Two RA90 disk drives (with 1.2gb each) attached to an RQDX3 controller (RQ0 and RQ1)
- CD ROM drive attached to the same RQDX3 controller as unit 2 (RQ2)
- TK50 tape attached as unit 0 on the first TQK50 controller (TQ0)
- DZV11 terminal multiplexer with 16 lines, attached to telnet port 1005 (DZ)
- LPT line printer attached to text file
printer_output.txt
Here's my config file (I called it simh.conf
)
; ; SimH 4.0 Configuration file for MicroVAX 3800 ; ; Host System : DEC MicroVAX 3800 ; Operating System : DEC Ultrix v4.5 ; Memory : 64mb ; Network config : XQ: Ethernet, 08:00:2b:04:14:02 ; Disks : RQ0: RA90, 1.2gb ; RQ1: RA90, 1.2gb ; CDROMs : RQ2: iso file ; Tape config : TQ0: TK50, 94mb ; load -r ka655x.bin ; NVRAM attach NVR nvram.bin ; CPU config set CPU 64m set CPU conhalt set CPU idle=all ; configure console to 7-bit only set TTO 7b set TTI 7b ; Disk drives set RQ0 ra90 attach RQ0 rq0-ra90.dsk set RQ1 ra90 attach RQ1 rq1-ra90.dsk set RQ2 CDROM attach -r RQ2 ultrix-vax-os-v4.5.mode1.ufs.iso ; MD5 sum: 19df0753c27f195e9f1d2f139a3b4629 *ultrix-vax-os-v4.5.mode1.ufs.iso set RQ3 dis ; Tape set TQ tk50 ;attach tq0 filename-to-tape-file set TQ1 dis set TQ2 dis set TQ3 dis ; serial port, simulated by Telnet to port 1005 set DZ LINES=16 set DZ 8B attach DZ 1005 NoBuffer ; printer set LPT enable attach LPT printer_output.txt ; Disable unused peripherals set CR dis set RL dis set TS dis ; Network interface (08-00-2b is the DEC prefix, the 04-14-02 part is arbitrary) set XQ MAC=08-00-2b-04-14-02 attach XQ0 eth0 ; serial console (launch directly after booting CPU) set console telnet=1001 ; experimental ;set QVSS en ; boot the system ;boot CPU
Note that I'm using a telnet console (for easier copy/paste on Windows), which means that directly after running this config file (via do simh.conf
from Simh) you will need to connect via telnet to localhost:1001 or the boot will abort. If you are on Linux, or just don't want that, remove the set console telnet=1001
line.
Also note that you might need to attach XQ0 to a different ethernet device. Use "show ether" in SimH to list all available devices on your system and modify the attach XQ0 eth0
line accordingly.
Running the Emulator
Either run vax.exe simh.conf
from the Windows command line, or just double-click the VAX.EXE executable and type do simh.conf
.
On the first launch it might take some time because SimH has to create the disk images (~2.5 gb total). It should look something like this
MicroVAX 3900 simulator V4.0-0 Beta git commit id: 0e8c0aea NVR: buffering file in memory RQ2: unit is read only Listening on port 1005 WinPcap version 4.1.2 (packet.dll version 4.1.0.2001), based on libpcap version 1.0 branch 1_0_rel0b (20091008) Eth: opened OS device \Device\NPF_{A41A1651-DD4D-4735-A4E0-88353165C2EC} Listening on port 1001 sim>
Type the following to start the emulation (note: you can also uncomment that line from the end of the config file to have the emulation start right away)
sim> boot cpu Waiting for console Telnet connection
Now would be a good time to connect your telnet session (I use a batch file for this), otherwise the boot process will timeout.
On your console, you should see something like this:
Connected to the MicroVAX 3900 simulator CON-TEL device KA655-B V5.3, VMB 2.7 Performing normal system tests. 40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25.. 24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09.. 08..07..06..05..04..03.. Tests completed. >>>
This is the VAX's boot prompt. Normally you just type
>>>boot <device>
where <device> is one of the following
- MUA<num>: TK tape device number <num> (1 to 4)
- DUA<num>: RQ disk device number <num> (1 to 4)
You can use show device
to see the installed (and detected) devices you can boot from, and show boot
to see which device will be the default if you just type boot
(or b
for short):
>>>show device UQSSP Disk Controller 0 (772150) -DUA0 (RA90) -DUA1 (RA90) -DUA2 (RRD40) UQSSP Tape Controller 0 (774500) -MUA0 (TK50) Ethernet Adapter 0 (774440) -XQA0 (08-00-2B-04-14-02) >>>show boot MUA0
Since we want to boot from CDROM, which is unit 2, we can use
>>>boot DUA2
Note: You can add flags to boot into single user mode, or to boot in interactive mode (so-called conversational boot, where the system prompts you for a kernel file name to load). For details see the Guide to ULTRIX-32 System Startup and Shutdown, linked to in the References section. To use it, add the /R5:<flags>
option to the boot
command, where flags is 0 (default multi-user), 1 (conversational multi-user), 2 (single-user) or 3 (conversational single-user). For example
>>>boot/r5:3 dua0
Note: You can also boot from ethernet (boot XQA0
) but this requires a DEC-specific boot server in your network (the protocol is called MOP for Maintenance Operations Protocol), which is beyond the scope of this document. I did get it to work a few years ago though, but it was a bit difficult to set up.
For a list and description of all commands available in the bootloader (hint: there are lots), see the KA655 CPU System Maintenance guide mentioned in the References section..
Bootstrapping ULTRIX
You will see the following output on the first boot.
>>>boot dua2 (BOOT/R5:0 DUA2 2.. -DUA2 1..0.. Ultrixboot - V4.5 Sun Sep 17 13:03:13 EDT 1995 Loading (a)vmunix ... Sizes: text = 945424 data = 1290240 bss = 757940 Starting at 0x5219 ULTRIX V4.5 (Rev. 47) System #2: Wed Oct 18 12:06:55 EDT 1995 real mem = 67043328 avail mem = 61517824 Buffer configuration adjusted to run with small system page table using 123 buffers containing 1007616 bytes of memory KA655 processor with an FPU CPU microcode rev = 6, processor firmware rev = 83 Q22 bus uda0 at uba0 uq0 at uda0 csr 172150 vec 774, ipl 17 klesiu0 at uba0 uq16 at klesiu0 csr 174500 vec 770, ipl 17 ra1 at uq0 slave 1 (RA90) ra2 at uq0 slave 2 (RRD40) ra0 at uq0 slave 0 (RA90) tms0 at uq16 slave 0 (TK50) WARNING: clock gained 47 days -- CHECK AND RESET THE DATE! *** STANDALONE ULTRIX ENVIRONMENT *** If you select the BASIC Installation option from the list that follows, the installation software creates file systems on default partitions on your system disk and loads the mandatory ULTRIX software subsets. If you require additional installation choices, select the ADVANCED Installation option. Select one of the following options: 1) BASIC Installation 2) ADVANCED Installation 3) System management Enter your choice:
Now we want to do an ADVANCED Installation, but when we try to, it will take a few seconds until the installation program dumps us to a prompt because it couldn't find a valid device to install from and to:
Enter your choice: 2 *** SOFTWARE DISTRIBUTION DEVICE SELECTION *** The 'Guide to Installing ULTRIX' explains the following table of software distribution devices and which installation media you should load on it: No valid device is found. Contact a DIGITAL field service representative. #
The problem seems to be that the hardware SimH emulates is not fully supported by ULTRIX (or is misdetected -- I'm not entirely sure myself). The good thing is that the internet has the correct solution, which is to fix some lines in the installation shell script. The fact that the basic system that is running at this point doesn't have vi, or even cat, makes this a bit harder ;-)
The only option you have is ed, the old UNIX editor. For a quick introduction, see here.
To load the file in the editor, use
# ed install.1 16763
You can see the entire file with
1,$l
but be warned, the output is quite long and it'll take some time to print it all out.
To fix it, use the following commands (the lines in bold is what you type, everything else is the response from ed)
# ed install.1 16763 173l BTD=`btd` 173s/`btd`/ra2/ 173l BTD=ra2 193l rz* ) 193s/rz/ra/ 193l ra* ) w 16761 q #
First, we list line 173, then we change it from BTD=`btd`
to BTD=ra2
, which happens to be the CDROM device and unit number we're installing from (if you changed that in your config, use the correct name here!)
Then we change line 193 from rz* )
to ra* )
since we're trying to install on an RA type disk which was apparently not supported in ULTRIX out of the box.
After writing the file with w
and quitting ed with q
, we're back at the prompt, at which point we can use CTRL+D to retry the installation:
# ^D *** STANDALONE ULTRIX ENVIRONMENT *** If you select the BASIC Installation option from the list that follows, the installation software creates file systems on default partitions on your system disk and loads the mandatory ULTRIX software subsets. If you require additional installation choices, select the ADVANCED Installation option. Select one of the following options: 1) BASIC Installation 2) ADVANCED Installation 3) System management Enter your choice: 2 *** SYSTEM DISK SELECTION *** The 'Guide to Installing ULTRIX' explains the following table of system disk drives. Select one of the devices below to contain the root file system: SYSTEM DISK TABLE Selection Device ULTRIX Device Controller Controller Name Name Number Name Number ---------------------------------------------------------------------- 1 RA90 ra0 0 RQDX3 0 2 RA90 ra1 1 RQDX3 0 ---------------------------------------------------------------------- Enter your choice: 1 You selected RA90, device number 0. Make sure this disk drive is on line and write-enabled (if applicable to your disk drive), then confirm your choice. Use RA90, ra0, for your system disk? (y/n) []: y The installation procedure now allocates the root file system on partition 'a' of the system disk, ra0 RA90. Making the root file system on ra0 RA90. The installation procedure is now restoring the root file system to partition 'a' of the system disk, ra0 RA90. The installation procedure now checks the root file system on partition 'a' of the system disk, ra0 RA90. ** /dev/rra0a ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 226 files, 4547 used, 11004 free (20 frags, 1373 blocks, 1.0% fragmentation) *** BOOTSTRAP COMMAND SEQUENCE *** Enter the following boot sequence at the console mode prompt after the installation software halts the processor: >>> b dua0 syncing disks... done ?06 HLT INST PC = 8007F799 >>>
After this, you will be back at the VAX boot prompt (if you used set CPU CONHALT
in your config) or at the SimH emulator prompt (if you used set CPU SIMHALT
, which is the default). In the latter case you will have to do boot cpu
again to get to the VAX boot prompt.
First boot
Now we can boot the installed system from harddisk for the first time.
If you want to, now would be a good time to take a backup copy of your disk files (or just create a btrfs snapshot or something if you have the possibility ;-)
Okay, then let's boot from DUA0
>>>boot dua0 (BOOT/R5:0 DUA0 2.. -DUA0 1..0.. Ultrixboot - V4.5 Sun Sep 17 13:03:13 EDT 1995 Loading (a)vmunix ... Sizes: text = 1153664 data = 281088 bss = 1043548 Starting at 0x5219 ULTRIX V4.5 (Rev. 47) System #3: Wed Oct 18 11:49:00 EDT 1995 real mem = 67043328 avail mem = 62008320 Buffer configuration adjusted to run with small system page table using 121 buffers containing 991232 bytes of memory KA655 processor with an FPU CPU microcode rev = 6, processor firmware rev = 83 Q22 bus uda0 at uba0 uq0 at uda0 csr 172150 vec 774, ipl 17 klesiu0 at uba0 uq16 at klesiu0 csr 174500 vec 770, ipl 17 qe0 at uba0 csr 174440 vec 764, ipl 17 qe0: DEC DELQA Ethernet Interface DEQNA-lock Mode, hardware address 08:00:2b:04:14:02 lp0 at uba0 csr 177514 vec 200, ipl 17
Here, it will seem to hang for a loooong time. A few minutes. Don't worry, it will eventually continue to boot. I guess it's probing for other devices which are not present.
You might be able to speed this up a bit by interrupting SimH (press CTRL+E in the SimH console window) and then using set CPU noidle
followed by go
to resume emulation.
Eventually, you will have to decide on a hostname. Note that if you want to play around with DECnet at some point, your hostname should be no longer than 6 characters.
ra1 at uq0 slave 1 (RA90) ra2 at uq0 slave 2 (RRD40) ra0 at uq0 slave 0 (RA90) tms0 at uq16 slave 0 (TK50) *** SYSTEM NAME SPECIFICATION *** Select the name of your system using alphanumeric characters. The first character must be a letter. For example, tinker. Enter your system name: yuki You selected yuki as the name of your system. Is this correct? (y/n) [y]: y
Next up is the time configuration. Since Ultrix 4.5 is not Y2k compliant (AFAIK), I decided to set the clock back a whopping 20 years. Note that the timezone and daylight saving settings are for my location (Germany) and will probably vary for you.
*** DATE AND TIME SPECIFICATION *** The current date and time should be specified using the following format: yymmddhhmm Use two digits for year (yy), month (mm), day (dd), hour (hh), and minute (mm). Enter the time in 24-hour format. For example, 02:54 p.m. on Feb 2, 1993 would be entered as: 9302021454 Enter the date and time: 9512052336 *** TIME ZONE SELECTION *** Select the time zone for your area, using the options listed in the table below. You can also enter the number of hours (-12 to 12) in time east of Greenwich. Selection Time Zone --------------------------------- e Eastern c Central m Mountain p Pacific g Greenwich --------------------------------- Enter your choice: 1 Does your area alternate between Daylight Savings and Standard time? (y/n) [y]: y Select your geographic area for Daylight Savings Time, using the options in the table below. Selection Geographic Area -------------------------------- u USA a Australia e Eastern Europe c Central Europe w Western Europe -------------------------------- Enter your choice [u]: c The current date and time is Tue Dec 5 23:36:46 EST 1995
Next up is the root password. Note that Ultrix will not echo anything here, I added the asterisks just for this guide :)
*** SPECIFY THE SUPERUSER PASSWORD *** The Guide to Installing ULTRIX instructs you on how to enter the superuser password. Changing password for root Enter new password: ****** Verify: ******
Next up is the filesystem layout, which is a bit more involved than what you know from more modern systems like MS DOS ;-)
In ULTRIX, partitions are defined for each disk type in a file called /etc/disktab
. Note that the partitions overlap, so you shouldn't use them all at the same time. The setup script actually takes care of that for you, but if you later create a new filesystem on the wrong partition you WILL lose data!
Normally, partition c is the whole disk, which is useful for add-on disk drives for example. Partitions a and b are always available and are traditionally used for the system and the swap-space respectively. The swap partition is also used for crashdumps if no separate crash-dump partition is created. The rest of the disk can be used either as a single partition (which is usually g) or as 3 individual partitions (d to f). If the disk is larger than 1 gigabyte, you will get another partition, h, after the g partition, probably because the filesystem cannot cope with partitions >1gig
In our case, we will have the following partitions on the first disk (RA0):
- Partition a of 32 mb for /root
- Partition b of 64 mb for swap+crashdump
- Partition c of 1.2 gig (whole-disk, not used on our setup)
- Partition d and e of 200 mb each (not used)
- Partition f of 400 mb (not used)
- Partition g of 800 mb (overlaps with d, e and f; will become /usr)
- Partition h of 256 mb (will become /usr/var)
This way we still have the whole second disk available for later use.
So here it goes:
*** FILE SYSTEM DEFAULT OPTION *** The following table shows the default file system layout on RA90, ra0: partition bottom top size overlap default a 0 32767 32768 c root b 32768 159839 127072 c swap, dump d 159840 580036 420197 c,g /usr If you choose the defaults, the var area will be allocated to /usr/var. Do you want to choose the default file system layout? (y/n): n
No, we do not want to use the defaults...
First, we select disk 1, partition g, for the /usr file system:
*** /usr FILE SYSTEM ALLOCATION *** You can allocate the /usr file system to one of the disks listed in the table below. See the Guide to Installing ULTRIX for an explanation of this table: /usr FILE SYSTEM ALLOCATION TABLE Selection Device ULTRIX Device Controller Controller Name Name Number Name Number ---------------------------------------------------------------------- 1 RA90 ra0 0 RQDX3 0 2 RA90 ra1 1 RQDX3 0 ---------------------------------------------------------------------- Enter your choice: 1 You selected RA90, device number 0. Make sure this disk is on line and write-enabled (if applicable to this drive) and then confirm your choice. Use RA90, ra0 for /usr file system? (y/n) []: y The disk ra0 you selected from the previous table has the following partitions available, on which you can allocate the /usr file system: partition size (Kbytes) overlap ------------------------------------------------ d --- 210098 c,g e --- 210098 c,g f --- 420196 c,g g --- 840393 c,d,e,f h --- 267763 c ------------------------------------------------ Type the letter of the partition on which you want to allocate the /usr file system [d]: g Making the new file system for /usr on /dev/rra0g RA90
Next, we select disk 1, partition b for swap (only 1 swap partition) and for crashdumps:
*** ALLOCATE THE SWAP1 SPACE *** You can allocate the swap1 space to one of the disks listed in the table below. See the Guide to Installing ULTRIX for an explanation of this table: SWAP1 SPACE ALLOCATION TABLE Selection Device ULTRIX Device Controller Controller Name Name Number Name Number ---------------------------------------------------------------------- 1 RA90 ra0 0 RQDX3 0 2 RA90 ra1 1 RQDX3 0 ---------------------------------------------------------------------- Enter your choice: 1 You selected RA90, device number 0. Make sure this disk is on line and write-enabled (if applicable to this drive) and then confirm your choice. Use RA90, ra0 for swap1 space? (y/n) []: y The disk ra0 you selected from the previous table has the following partitions available, on which you can allocate the swap1 space: partition size (Kbytes) overlap ------------------------------------------------ b --- 63536 c h --- 267763 c ------------------------------------------------ Type the letter of the partition on which you want to allocate the swap1 space [b]: b *** ALLOCATE THE SWAP2 SPACE *** Do you want to allocate a second swap space? (y/n) [n]: n *** ALLOCATE THE CRASH DUMP SPACE *** You can allocate the crash dump space to one of the disks listed in the table below. See the Guide to Installing ULTRIX for an explanation of this table: CRASH DUMP SPACE ALLOCATION TABLE Selection Device ULTRIX Device Controller Controller Name Name Number Name Number ---------------------------------------------------------------------- 1 RA90 ra0 0 RQDX3 0 2 RA90 ra1 1 RQDX3 0 ---------------------------------------------------------------------- Enter your choice: 1 You selected RA90, device number 0. Make sure this disk is on line and write-enabled (if applicable to this drive) and then confirm your choice. Use RA90, ra0 for crash dump space? (y/n) []: y The disk ra0 you selected from the previous table has the following partitions available, on which you can allocate the crash dump space: partition size (Kbytes) overlap ------------------------------------------------ h --- 267763 c b --- 63536 c ------------------------------------------------ Type the letter of the partition on which you want to allocate the crash dump space [b]: b
Finally we select partiton h for the /var file system. This might not be large enough later on but then we can always migrate the data away if we need to...
*** ALLOCATE THE var FILE SYSTEM *** You can allocate the var file system to one of the disks listed in the table below. See the Guide to Installing ULTRIX for an explanation of this table: var FILE SYSTEM ALLOCATION TABLE Selection Device ULTRIX Device Controller Controller Name Name Number Name Number ---------------------------------------------------------------------- 1 RA90 ra0 0 RQDX3 0 2 RA90 ra1 1 RQDX3 0 ---------------------------------------------------------------------- Enter your choice: 1 You selected RA90, device number 0. Make sure this disk is on line and write-enabled (if applicable to this drive) and then confirm your choice. Use RA90, ra0 for var file system? (y/n) []: y The disk ra0 you selected from the previous table has the following partitions available, on which you can allocate the var file system: partition size (Kbytes) overlap ------------------------------------------------ h --- 267763 c g --- 840393 c,d,e,f ------------------------------------------------ Type the letter of the partition on which you want to allocate the var file system [no default]: h Making the new file system for var on /dev/rra0h RA90
Installing the distribution files
Resources
Some of the resources I used for creating this guide: