Building a VMS 3+ subset on a 10 Mb disk
(or how to cram a pig into a shoebox)

by Alex Wong
Automated Systems Pty Ltd
VAX PROFESSIONAL, FEB 1986


Scenario: You have a 750 with 2 RA81's and an RL02. Your ex-programmer is no longer mad at you for inquiring about the way he rounds up the cents in the accounts programs. After all, won't you have enough problems booting up the next day without DCLTABLES.EXE ?

There are a lot of situations where you would have given an arm and a leg for a small bootable system on an RL02. With such a pack, you can:
  1. examine the system after a startup failure or other problems.

  2. do a full backup of the system disk instead of using the rather simple-minded standalone backup.

  3. modify the SYSUAF/alternate UAF files on the system disk if you've forgotten the system manager's password.

  4. perform diagnostics eg. UETP with system disk offline.
Sites that will find such a pack useful are those with a 730 (RL+R80) or those with fixed drives and RL02. It is expected that this pack would only be used under exceptional circumstances and that there should not be a lot of users (due to small PAGEFILE and no SWAPFILE).

On distribution media, VMS takes up about 20 Mb but after installation and AUTOGEN, the page, swap and dump files will usually be created/extended. The trick is to build up VMS on the RL02 with just the bare essentials and then add in all the goodies you require. This article will outline the steps necessary to create a small bootable VMS on the 10.4 Mb RL02 pack. Bear in mind that these were done on VMS 3.6 and there are slight differences for earlier versions. With Version 4, I expect things to be different as well.
  1. Initialise and mount pack.

    After initialising the disk, create VMS directory structure on disk. You have to cook up some synonym directories for compatibility with VMS V2 also.

             $ INIT DLA0:  TINYVMS
             $ MOUNT DLA0:  TINYVMS
             $ CREATE/DIR DLA0:[SYS0.SYSERR],[SYS0.SYSEXE],[SYS0.SYSHLP]
             $ CREATE/DIR DLA0:[SYS0.SYSMGR],[SYS0.SYSTEST],[SYS0.SYSUPD]
             $ COPY/CONTIG SYS$SYSTEM:SYSBOOT.EXE,VMB.EXE -
                   DLA0:[SYS0.SYSEXE]*.*;1
             $ CREATE/DIR DLA0:[SYSMAINT],[SYS0.001001],[SYS0.001002]
             $ SET FILE/ENTER=DLA0:[SYS0]SYSMAINT.DIR DLA0:[0,0]SYSMAINT.DIR
             $ SET FILE/ENTER=DLA0:[SYS0]SYSLIB.DIR;1 DLA0:[SYS0]001001.DIR;1
             $ SET FILE/ENTER=DLA0:[SYS0]SYSMSG.DIR;1 DLA0:[SYS0]001002.DIR;1
             $ CREATE/DIR DLA0:[SYSEXEMIN]
             $ SET FILE/ENTER=DLA0:[0,0]SYSEXE.DIR;1 DLA0:[0,0]SYSEXEMIN.DIR;1
             $ SET FILE/ENTER=DLA0:[SYSEXEMIN]SYSBOOT.EXE -
                   DLA0:[SYS0.SYSEXE]SYSBOOT.EXE
             $ SET PROT=(S:R,O:R,G,W) DLA0:[0,0]SYSEXEMIN.DIR;1
             $ SET FILE/REMOVE DLA0:[SYS0.SYSEXE]SYSBOOT.EXE;
             $ SET FILE/ENTER=DLA0:[SYS0.SYSEXE]SYSBOOT.EXE -
                   DLA0:[SYSEXEMIN]SYSBOOT.EXE
    
  2. Writeboot the disk.

    Invoke the WRITEBOOT utility to mark the disk as bootable (necessary for those with 750).
             $ MCR WRITEBOOT
             DLA0:[SYS0.SYSEXE]VMB.EXE
             1
             200
    
  3. SYSEXE files

    Look at SYS$MANAGER:VMSIMAGES.DAT, note down all the file names in there and copy them to corresponding directories on DLA0: . Next, get all the required bootstrap files and device drivers. These are found in SYS$SYSTEM:

    *DRIVER.EXE ERRFMT INILOA JOBCTL OPCOM OPCCRASH REPLY RMSSHARE RUNDET SCSLOA SHUTDOWN.COM STARTUP.* SYS.* SYSGEN SYSINIT SYSLOA730 SYSLOA750 SYSLOA780 SYSUAF.*
             $ MCR SYSGEN
             CREATE DLA0:[SYS0.SYSEXE]PAGEFILE.SYS/SIZE=4000    !  pagefile
    
    Now, move across all the useful command images to the RL02. Examples of the files that I normally copy are:

    ACC ANALYZOBJ ANALYZRMS AUTHORIZE BACKUP BAD BADBLOCK BOOTBLOCK CANCEL CONVERT CREATE DIFF DISKQUOTA DISMOUNT DUMP F11AACP F11BACP FINDHSC FLX INPSMB LINK MACRO32 MAILEDIT.COM MTAAACP PATCH PHONE.* PIP PRTSMB QUEMAN RENAME RMS RTB SDA SEARCH SYE TECO TYPE VERIFY VMOUNT WRITEBOOT ZAP etc.

  4. SYSLIB files

    Copy the following from SYS$LIBRARY to DLA0:[SYS0.SYSLIB]:

    CONVSHR CRFSHR DEBUG DELTA.* RTLVECTOR.OBJ TRACE

  5. SYSMGR files

    Copy the following files from SYS$MANAGER to DLA0:[SYS0.SYSMGR]. If you have devices to be connected at boot time using SYSGEN, modify the SYSTARTUP.COM file after creating a blank one.

    CHARTYPE FORMSTYPE LOADNET LPA11STRT NETCONFIG NETICP RTTLOAD STARTNET VMSIMAGES.*

             $ SET DEF DLA0:[SYS0.SYSMGR]
             $ CREATE SYSTARTUP.COM     !  dummy file
             ^Z
             $ CREATE SYSHUTDWN.COM     !  dummy file
             ^Z
    
  6. SYSMSG files

    Copy all the files in SYS$MESSAGE to DLA0: as they do not take up much space (although not all of them are required).
             $ COPY SYS$MESSAGE:*.* DLA0:[SYS0.SYSMSG]*
    
  7. Diagnostic programs

    Some of the UETP test programs in SYS$TEST are quite helpful occasionally when you need to exercise the disks, terminals, etc. More comprehensive diagnostic programs can be found in SYS$MAINTENANCE but you'll probably not require them as field service will have their own diagnostic packs. Useful UETP programs are:

    UETP.COM UETINIT00 UETINIT01 UETPHAS00 UETDISK00 UETTAPE00 UETTTYS00 UETLPAK00 UETCOMS00 UETDMPF00 UETDR1W00 UETDR7800 UETMA7800

  8. SYSUPD files

    The following command procedures in SYS$UPDATE should be copied across:

    AUTOGEN CONSCOPY DXCOPY LINEPAGE.* OLDVMSINS SETDEFBOO STABACKIT SWAPFILES VMSINSTAL VMSKITBLD.* VMSUPDATE

By now, you should have a small bootable VMS with some useful utilities and diagnostics. Should you feel greedy and with space permitting, you can include some of the following:

FORTRAN compiler

Total space required: 3500 blocks
     $ COPY SYS$SYSTEM:FORTRAN.EXE DLA0:[SYS0.SYSEXE]
Now, move the following files from SYS$LIBRARY to DLA0:[SYS0.SYSLIB]

FORDEF FORIOSDEF IMAGELIB LIBDEF MTHDEF SIGDEF STARLET.OLB

HELP libraries

These are library files found in SYS$HELP for all kinds of utilities eg. EDT, SDA, DEBUG, etc. Check the utilities you have on RL02 now and copy the appropriate help files across. The DCL help library, HELPLIB.HLB is quite large so it is not worth getting it. Do the following only if you really, really suffer from DCL help withdrawal symptoms:
     $ COPY SYS$SYSTEM:VMSHELP.EXE DLA0:[SYS0.SYSEXE]
     $ COPY SYS$HELP:HELPLIB.HLB DLA0:[SYS0.SYSHLP]
Depending on your available disk space, copy any other files you feel may be useful. Of course, leave some space, say 1000 blocks for scratch files,etc. With such a small system, it is generally not advisable to set up batch/print queues. Note that there is no swap file and in the event of a crash, nothing will be placed in the dump file. This is purely a space trade-off. The files ACCOUNTNG.DAT, OPERATOR.LOG and ERRLOG.SYS will still be active so periodically purge/delete them.

Refer to the VAX/VMS Software Installation Guide for details on how to boot up from an RL02 on your machine. Briefly, on a 730 enter "B DQ1" when the console prompt ">>>" comes on. This implies putting your auto restart switch to "off" when you start up. On a 750, the boot device for RL02 is usually "B" but check with your field service or use the console medium instead. You may experience some delay in response time as would be expected from running VMS on a slow disk. All in all, this exercise will probably take about half a day but it will be effort well spent in anticipation of the mysterious boot failures and the inevitable bugchecks.