Permanently Applying PTFs & Why Doing So is Important

Many of you (well, hopefully, all of you!) regularly apply PTFs to your systems to keep them current with fixes from IBM.  Doing so ensures that you will always have the latest code updates from Big Blue to keep your IBM i environments running as problem-free and as securely as possible, and it is simply the tried & true best practice for maintaining fixes for the platform.

What we frequently find with customer systems is that many shops do attempt to keep their PTFs as current as possible (e.g. applying cumulative PTF packages every 12-18 months on average), but what we have also found is that the majority of shops are woefully negligent in “permanently” applying their PTFs on a regular basis as they are not aware of the importance of doing so.

From a very fundamental standpoint, there are basically three distinct code levels on IBM i that you regularly apply PTF fixes to:

  1. The Licensed Internal Code (or “LIC”) and these are all the MFnnnnn numbered fixes under product ID 5770999 and the LIC is the code level that interacts with the hardware and provides low-level system functions to the operating system
  2. The base IBM i operating system and these are all the fixes under product ID 5770SS1 and this code level constitutes the base operating system functionality
  3. The Licensed Program Products (or “LPPs”) and these are all of the fixes for the optionally installed licensed programs on your system

When you apply new PTFs you will typically apply them temporarily so if any of the new fixes introduce any operational issues they can be removed with a RMVPTF command.  The recommended flow is that you apply say a cumulative PTF package on an IPL with all PTFs set to be applied temporarily and let the system run for a few weeks with the temporarily applied PTFs to ensure the new fixes did not introduce any problems to the system, if no problems are found then you can run the following command to set all PTFs to permanently apply on the next IPL for all code levels (LIC, base operating system, and all LPPs):

APYPTF LICPGM(*ALL) APY(*PERM) DELAYED(*YES) IPLAPY(*YES)

The running of the above APYPTF command after newly applied PTFs have been deemed stable is what most shops are not doing on a regular basis and they should be.

So specifically “why” is permanently applying PTFs important?  Well, it’s primarily for these two reasons:

  1. Conserving disk space
  2. Ensuring the integrity of the first system IPL of the restored Licensed Internal Code (LIC) after the LIC has been installed on a D-mode IPL off of SAVSYS media

How does permanently applying PTFs save space?  Well, it’s because when a PTF is temporarily applied, the code that is getting replaced with the fix is “moved” to a holding area and kept there until the PTF is permanently applied.  That way, if the temporarily applied fix needs to be removed, the RMVPTF command will put the old code in the holding area back to where it originally was, so you can imagine if you have hundreds and hundreds of temporarily applied PTFs the amount of disk space being consumed by the old/replaced code in the holding area can be substantial.  This is especially important for the LIC code level (product ID 5770999) where all of the fixes must be kept on the system’s dedicated load source unit which has a finite amount of space.

How does permanently applying PTFs ensure the integrity of a disaster recovery D-mode IPL off of SAVSYS media?  Customers not permanently applying PTFs for the Licensed Internal Code (product 577099) is a condition that we encounter on a regular basis when doing system migrations to new IBM Power servers, and to understand why it can be an issue you need to understand how fixes to the LIC are stored and saved to media.  There are two “sides” to the Licensed Internal Code, an “A” side and a “B” side.  The “A” side contains all of the LIC fixes that have been permanently applied, and the “B” side contains all of the fixes that have been permanently applied plus all of the fixes that have been temporarily applied.  In regular day-to-day operations you IPL your system from the “B” side and that is the normal side that you run off of, however, when you do any save operation that invokes the SAVSYS command to save the LIC to media that you can IPL from (e.g. physical tape or virtual tape), both the “A” and “B” sides of the LIC get saved to the media and will be re-installed after you do a D-mode IPL off that media and select to install the Licensed Internal Code, however, the 1st IPL that you perform after the restore of the LIC will be off of the “A” side (permanent side) of the Licensed Internal Code not the “B” side that you are currently running off of in your normal daily operations.  So, say you have been diligent and you keep your PTFs for 5770999 current but you have not permanently applied PTFs for 5770999 in perhaps years, that means that the 1st IPL of the LIC that you perform on a system restore you will load a very old version of your LIC and, as IBM documentation will frequently note, “unpredictable results may occur”!

At iTech, we do regular PTF maintenance on a very large population of customer systems, and we always follow this cadence:

  • Apply new PTFs temporarily (cumulative, groups, etc.)
  • After 3 months of ensuring that the new PTFs are stable, permanently apply them using the specific APYPTF command that I noted above on an unattended IPL
  • 3 months after permanently applying the PTFs, temporarily apply the next round of PTFs and repeat the sequence

At the very least, permanently apply all the PTFs for your Licensed Internal Code (5770999) before you do your next SAVSYS to ensure the media you are saving to can be successfully IPL’d from in the event of a disaster.  You can determine if your LIC PTFs are permanently or temporarily applied by entering command DSPPTF to display the screen below, the display will indicate “Temporarily applied” or “Permanently applied” to inform of the applied status.

More from this month:

Leave a Comment

Your email address will not be published. Required fields are marked *