Customizing MVS

 

I wrestled a bit when I was trying to formulate a title for this page.  Perhaps a better title would have been Some Thoughts on My Philosophy of Installing and Modifying MVS ... but I decided to stay with the shorter title.

Everybody who installs MVS eventually makes some distinctive change(s) to their system that makes it uniquely theirs.  Even if you have downloaded (or ordered a CD-ROM copy of) the Turnkey MVS built by Volker, if you use the system for any significant length of time, you are going to make some changes that result in your installation being unique.  However, there are some methods of implementing changes to MVS that have been proven over time to have less desirable results over the long run.  The goal of this page is to share some of the knowledge that I have gained from older and wiser Systems Programmers that might help you to avoid some pitfalls.

 

Rule #1 - Minimize Changes to IBM's Datasets/Programs 

By this I do not mean you should not apply PTFs or make changes that are necessary to make your MVS system easier to use the way you prefer to use it.  What I do mean is that you should seek to make your modifications reside alongside the datasets installed during System Generation rather than make drastic changes, deletions, and/or additions to IBM's datasets.  Some examples of doing this are:

You may recognize that we have already done all these as we set our system up.

Datasets generated to contain IBM load modules, objects, and data are named with the high level qualifier SYS1.  As a general rule, when you need to create additional load modules, objects, and data that address a similar function as those in an existing IBM dataset, you should create a new dataset with the same low level qualifiers, but with a high level qualifier of SYS2.  Attributes for the datasets you are creating should be the same as the attributes of the corresponding IBM generated dataset.  Where necessary, you can then make changes to the requisite system control information to inform MVS that your secondary dataset is also to be searched whenever the IBM generated dataset is searched (ie., SYS2.LINKLIB can be added to the Link List along with SYS1.LINKLIB; SYS2.HELP and SYS2.CMDLIB can be added to the default TSO Logon procedure; etc.).  If you do not already know how to set these relationships up, ask in the Hercules' MVS discussion group or send me your question by email.

Following this same general naming convention, any permanent Operating System related datasets you create should have a high level qualifier of SYS2.  The use of SYS2 as a qualifier for this type of dataset is a time honored practice of System Programmers.  When you see a dataset name in a catalog or VTOC listing beginning with SYS2, it is an immediate signal that the dataset is one which is related to the functionality of the MVS Operating System, although not necessarily originated by IBM.

There are several reasons minimizing change to IBM's datasets is a good rule to follow.  The most important are:

  1. The datasets allocated during System Generation are defined with adequate space to hold the components expected to be placed in them during System Generation.  If you add additional components in the datasets after System Generation, you will eventually exceed the space allocated.  Expansion of the libraries is not always easy and, in some cases, may be impossible.  Compressing SYS1.LINKLIB is extremely risky!  I have personally seen the process bring an MVS system (in a real world, production environment) to a halt.
  2. If you isolate changes you make to the operating system components from those installed during System Generation, you lessen the chance that your changes will cause the operating system to be come unstable and/or unusable.  I do not mean to imply that isolating your changes will absolutely prevent destabilizing the OS, but it will lessen the chance and make it easier to back out whatever change caused the OS to become unstable if it does happen. 

 

Rule #2 - Make a Backup Before Changing IBM Datasets/Objects

If PTFs are applied using SMP, they can be backed out later.  But if you make changes to the contents of datasets installed during System Generation directly, it is your responsibility to back up either the entire dataset or the specific objects that are changed before making the changes.  

The reason this is a good idea should be obvious - it is so that you can easily recover from a mistake by removing changes you made, simply by restoring the original IBM objects from the back up copy.  

 

Rule #3 - Isolate Your Modifications 

When you create supplemental datasets, place them on DASD volumes other than:

The reason for this rule is that if you decide you want to rebuild your MVS Operating System from the distribution tapes (or libraries) it will be much easier if you don't have to worry about losing the contents of datasets that you have created on the volumes which the System Generation process expects to be empty and available exclusively for the use of the MVS system datasets.  If the datasets you originate are isolated, after rebuilding MVS from the distribution you can simply recatalog your datasets in the new MVS Master Catalog without having to recreate them.

Of course, if you have followed my instructions for building MVS 3.8j, you know that I do not follow this rule strictly since I create some of my supplemental MVS OS related datasets on MVSRES and SMP000, and MVS000, which is sort of an extension of MVSRES as I have planned the system.  But, on my system, I follow Rule #4 to minimize the impact of rebuilding MVS from scratch (something I have done a number of times).

 

Rule #4 - Document Your Changes 

It is certainly not an original idea to maintain a System Notebook wherein you record any changes you make to your Operating System.  The term "notebook" can encompass any method to record changes made, and I have seen "notebooks" maintained as members of Partitioned Datasets, in sequential datasets with much embedded formatting directives (ala Script or locally written formatting programs), in VSAM datasets maintained with CICS programs, or in documents maintained on personal computer word processing programs.  So, whatever approach you want to take, just make sure that you can utilize the information recorded in your System Notebook to reconstruct your currently executing version of MVS from either the most recent complete backup or from a vanilla system newly emerged from System Generation.

I found myself frequently rebuilding MVS from the distribution tapes; either to learn more about the System Generation process, to improve my instructions for building MVS here on this site, or to change some aspect of MVS that could only be altered during System Generation.  So my solution for documenting my customizations to the Operating System was driven by this.  I needed a method that not only documented the changes but kept available the many jobstreams (and requisite datasets) necessary to apply the changes.  My system has worked well for me and I recommend it as a way of being able to easily reproduce customization to an MVS system.  

I created a 3380 DASD image with the volume serial SYSP01 (Systems Programming 01).  At the time I wasn't sure I wouldn't be creating volumes 02, 03, etc., but I have found that a single 3380 volume not only holds all my changes, but has plenty of room for future additions and even affords me some occasional work space.  I don't use compressed DASD volumes (CCKD), so the size of the image file is 603 megabytes, which conveniently fits on a regular CD-ROM for the purpose of keeping a current backup.  I created a User Catalog - UCSYSP01 - on the volume and allocated 30 tracks (2 cylinders) to the Data Space that holds the User Catalog.  An alias of SYSP is defined in the Master Catalog related to this User Catalog, and all of the datasets created on the volume have the high level qualifier of SYSP.  Therefore, all datasets defined on the volume are catalogued in the User Catalog contained on the volume.  This way, when I generate a new MVS system, I simply import this User Catalog into the Master Catalog on the new system and all the contents of SYSP01 are available on the new system just as they existed on the prior system.  Of course, that doesn't replicate the changes made to MVS, but this sets up the required environment.  The contents of the datasets on SYSP01 are described below.

Since the purpose of the SYSP01 volume is documenting change, it is important that the contents of the volume itself are strictly controlled and documented.  The first dataset that appears in a VTOC listing of the volume is SYSP.$INDEX, which is nothing more than a physical sequential dataset (FB, 80, 3120) in which an entry is made describing each dataset contained on the volume.  Here is an excerpt of this dataset:

THIS DATASET IS PROVIDED AS A MEANS TO DOCUMENT THE CONTENTS OF THE 
REMAINING DATASETS ON THIS VOLUME (SYSP01). 

DATASET                  CONTAINS 
=======                  ======== 
SYSP.$INDEX              THIS DATASET 
SYSP.ALGOL.LIB           ALGOL LIBRARY UNLOAD (IEBCOPY)
SYSP.ALGOL.LOAD          ALGOL COMPILER UNLOAD (IEBCOPY)
SYSP.ALGOL.PROCS         ALGOL COMPILE PROCEDURES UNLOAD (IEBUPDTE)
                           .. REF SYSP.INSTALL.JCL(MVTALGOL) 
SYSP.CBT.INSTALL.JCL     JOBSTREAMS TO INSTALL CBT SOFTWARE 
SYSP.COBOL.LIB           COBOL LIBRARY UNLOAD (IEBCOPY)
SYSP.COBOL.LOAD          COBOL COMPILER UNLOAD (IEBCOPY)
SYSP.COBOL.PROCS         COBOL COMPILE PROCEDURES UNLOAD (IEBUPDTE)
                           .. REF SYSP.INSTALL.JCL(MVTCOBOL) 
SYSP.FORTRAN.LIB         FORTRAN LIBRARY UNLOAD (IEBCOPY)
SYSP.FORTRAN.LOAD        FORTRAN COMPILER UNLOAD (IEBCOPY)
SYSP.FORTRAN.PROCS       FORTRAN COMPILE PROCEDURES UNLOAD (IEBUPDTE)
                          .. REF SYSP.INSTALL.JCL(MVTFORT)              
SYSP.FSE.ASM             FSE SOURCE & INSTALL JOBSTREAMS
SYSP.HERCCMD.LOAD        HERCCMD LOAD MODULE UNLOAD (IEBCOPY)            
SYSP.IEHMAP.OBJECT       OBJECT MODULES FOR IEHMAP INSTALLATION          
                           .. REF SYSP.CBT.INSTALL.JCL(IEHMAP)           
SYSP.IND$FILE            IND$FILE LOAD MODULES                           
                           .. REF SYSP.INSTALL.JCL(IND$FILE)             
SYSP.INSTALL.DOCS        DOCUMENTING MY CUSTOMIZATIONS TO MVS 3.8        
SYSP.INSTALL.JCL         JOBSTREAMS TO CUSTOMIZE MVS 3.8                 
SYSP.MACLIB              MY ADDITIONAL MACROS FOR MVS ASSEMBLER          

 ...

You may notice that I embed some comments following the dataset description lines naming the member of the INSTALL.JCL Partitioned Dataset that is used to access the dataset.

The dataset listed third from the bottom of the list, SYSP.INSTALL.DOCS, is my equivalent of  the System Notebook.  This Partitioned dataset (FB, 80, 3120) contains members with narrative describing my customizations.  It has an index member, similar to the index dataset for the SYSP01 volume which names and briefly describes each member of the library.  Here is an excerpt of this member:

$INDEX   THIS MEMBER 
======   =========== 
CBTLOAD  INSTALLING MATERIAL FROM THE CBT TAPE 
IEFACTRT SMF STEP ACCOUNTING EXIT 
IKJEFTE2 AUTHORIZING TSO COMMANDS 
MVTLANG  MVT COMPILERS (ALGOL, COBOL, FORTRAN (G & H), PL/1, RPG) 
MYRTNS   MY DATE ROUTINES AND FIELD EDITING ROUTINES 
NETSOL   CUSTOMIZED NETWORK SOLICITOR 
NEWDASD  CREATING NEW DASD USING #NEWDASD SCRIPT 
NEWJES2  CUSTOMIZING JES2 PARAMETERS 
PROLOG   OVERVIEW AND JOB SUBMISSION PROCEDURE 
QUEUE    QUEUE TSO COMMAND 
RPF      ROB'S ISPF CLONE 
SMF      SMF EXIT (IEFU29) AND PROCEDURES 
STEP01   ESTABLISH PRE-REQUISITES FOR MVS CUSTOMIZING (VOLUMES)  
 ...

In general, each member of this dataset contains a narrative describing the process required to modify/install a single component, including the jobstream to be submitted and any requisite datasets.  Although the contents of this member are in alphabetical order by member name, the narrative they contain is not intended to be read in this order.  Each member is a self-contained document describing a single task.  These "documents" are intended to be printed using an IEBPTPCH jobstream.  The jobstream to print the entire document is also contained in the INSTALL.JCL library and prints the entire "System Notebook" in the correct order.  I maintain a current hardcopy version of this document, but if everything was lost except the latest CD-ROM containing this volume, even the hardcopy notebook can be easily reproduced.  The first logical section of the documentation is contained in the PROLOG member:

The basic assumption for this documentation is that prior to this 
point a full, normal SMP and System Generation have been completed 
using the instructions on www.jaymoseley.com/hercules/installmvs. 

A backup should have been made after shutting down the starter 
system. The purpose of this documentation is to guide the rapid 
installation of all local customizations made to the basic MVS 3.8j 
Operating System that has been installed. As a means of achieving 
this goal, any time that a change is made to the OS configuration, 
an entry is made in this documentation and the corresponding 
JCL, Procedures, Parameters, source, or other required machine 
readable materials will be placed in the appropriate libraries on 
the 3380 DASD volume 'SYSP01'. 

The datasets contained on the SYSP01 volume include, but are not 
limited to: 

SYSP.INSTALL.DOCS 
SYSP.INSTALL.JCL 

The INSTALL.DOCS PDS contains the documentation you are now        
reading.  The INSTALL.JCL PDS contains jobstreams that you will    
submit to apply the customization.  The jobstreams may require     
and utilize additional datasets on the SYSP01 volume.              
                                                                   
TSO is not initially available on the newly generated MVS 3.8j     
system, so an alternative method must be utilized to submit the    
jobstreams from the SYSP.INSTALL.JCL PDS.  The following jobstream 
will add a procedure to the SYS1.PROCLIB that will allow you to    
submit jobstreams from the MVS console:                            
                                                                   
   //IEBUPDTE JOB (001),'INSTALL PROC',CLASS=A,MSGCLASS=A          
   //IEBUPDTE EXEC PGM=IEBUPDTE,REGION=1024K,PARM=NEW              
   //SYSUT2   DD  DSN=SYS1.PROCLIB,DISP=SHR                        
   //SYSPRINT DD  SYSOUT=A                                         
   //SYSIN  DD DATA,DLM='><'                                       
   ./ ADD    NAME=SYSMODS,LIST=ALL                                 
   //SYSMODS PROC MEMBER='********'                                
   //IEBGENER EXEC PGM=IEBGENER                                    
   //SYSIN    DD  DUMMY                                            
   //SYSPRINT DD  SYSOUT=*                                         
   //SYSUT1   DD  DSN=SYSP.INSTALL.JCL(&MEMBER),                
   //             UNIT=3380,VOL=SER=SYSP01,DISP=SHR             
   //SYSUT2   DD  SYSOUT=(A,INTRDR)                             
   ./ ENDUP                                                     
   ><                                                           
                                                                
After running this job, you can submit any of the jobstreams in 
SYSP.INSTALL.JCL by using this command on the MVS console:      
                                                                
   s sysmods,member=????????                                    
                                                                
and substituting the name of the JCL member to be submitted for 
the question marks (????????).                                  
 ...                                                            

Yes, the detail is excessive for a hobby system running under Hercules, but this is the sort of detail I would expect on a real world system, as well as being the level of detail I am used to utilizing and producing, so it is the solution I devised for my system.  There have been times when I have not started Hercules/MVS for several months and when I come back after a period of time, I am sometimes glad to have this level of detail available to refresh my memory.  For your own system, you may use the level of detail you desire ... I only submit this as an example of what I do and it works well for me.

I keep the DASD image for SYSP01.3380 backed up regularly to CD-ROM.  It takes only a few minutes to burn a copy and from this image I can recreate my entire system.  Of course, regular backups of all the other DASD images utilized under Hercules/MVS is a good idea, as well.  I accidentally preformed a SCRATCH VTOC PURGE on a volume a few weeks ago and was I ever glad I had a recent backup that included the entire hard drive that contains my MVS DASD image files.


I hope that you have found my instructions useful.  If you have questions that I can answer to help expand upon my explanations and examples shown here, please don't hesitate to send them to me:


Return to Site Home Page Frequently Asked Questions


This page was last updated on January 17, 2015 .