Installing Superseding IDRs and Support Updates

An IDR can be superseded by a new IDR that addresses the same problem or by an SRU that fixes the problem. Get information about the content of the IDR package and use the -nv options to understand what the result of the pkg update or pkg install command will be.

  • Superseding IDR. IDRs can supersede other IDRs. Usually, an existing IDR is updated with new fixes, and a superseding IDR is not necessary. In some cases, modifying an existing IDR is not feasible and a new IDR is created that supersedes the previous IDR.

    A superseding IDR is needed when a change would modify a package that is already modified by a different IDR. For example, IDR1 delivers a fix to usr/sbin/cron, which is part of the system/core-os package. IDR2 delivers unrelated fixes to other packages and includes a fix for usr/sbin/svcadm, which also is part of system/core-os. IDR1 and IDR2 cannot both modify the system/core-os package. A superseding IDR package is necessary and can take one of the following forms:

    • IDR2 includes the fix for IDR1. IDR2 supersedes IDR1. IDR1 is renamed to IDR2 so that when you explicitly install or update the IDR1 package, the IDR2 package is installed instead, and the IDR1 package is removed if it was already installed on your system.

    • IDR3 includes the fix for IDR1 and the fix for IDR2. IDR3 supersedes both IDR1 and IDR2.

  • Superseding SRU. If the issue addressed by the IDR is fixed in an SRU, then the IDR package will be renamed to the package where the fix was made. If you update to the SRU that installs the version of the package to which the IDR package was renamed, then the IDR package will be removed.

    Update to an SRU that includes a newer version of the fixed package but does not fix the problem will be blocked. To accomplish the update, uninstall the IDR or reject the IDR package. Note, however, that using these methods to remove the IDR leaves the system exposed to the problems that the IDR addresses.

Example 4-8 Install a Superseding IDR

The following output shows that this image has version 1 of idr1834 installed. Version 2 of idr1834 is available from idr1929.2.p5p, which was added as a solaris publisher origin in How to Install an IDR.

$ pkg list -af 'idr*'
NAME (PUBLISHER)      VERSION IFO
idr1834               2       --r
idr1834               1       i--
idr1929               2       ---

Show Whether an IDR is Renamed showed that in version 2, the idr1834 package is renamed to idr1929. When you update idr1834, the installed version 1 is removed and idr1929 is installed. No version of the idr1834 package is installed after the update.

$ pkg update -v idr1834
            Packages to remove:         1
           Packages to install:         1
     Estimated space available:  30.42 GB
Estimated space to be consumed: 718.51 MB
       Create boot environment:        No
Create backup boot environment:        No
          Rebuild boot archive:        No

Changed packages:
solaris
  idr1834
    1,5.11:20150708T000258Z -> None
  idr1929
    None -> 2,5.11:20150624T090120Z
...

$ pkg list -af 'idr*'
NAME (PUBLISHER)      VERSION IFO
idr1834               2       --r
idr1834               1       ---
idr1929               2       i--

If you tried to install idr1929 instead of update idr1834, that installation operation would have failed because idr1834 would still constrain the packages on the system to a lower version than the version to which idr1929 moves.

Example 4-9 Update to an SRU That Fixes the IDR Issue

To determine whether an installed IDR is fixed in an SRU, look for a version of that IDR package in the support repository. Since IDRs are not delivered in SRUs, an IDR package in the support repository indicates that the IDR is fixed. In this example, the support repository is configured for the solaris publisher.

The following pkg search command shows that the problem that was addressed in idr4494 is fixed in SRU 24. Use the -f option to show packages that would otherwise be excluded by installed incorporations:

$ pkg search -fo name,value idr4494
NAME            VALUE
pkg.description idr4494 terminal package for Oracle Solaris 11.4SRU24.75.2
pkg.fmri        pkg://solaris/idr4494@4,5.11:20200821T162221Z
pkg.summary     idr4494 terminal package

The following pkg info command also shows that idr4494 is obsolete because the problem that was addressed in idr4494 is fixed in SRU 24, as shown in the Description. Use the -r option to show information about the package in the support repository, not information about the installed package.

$ pkg info -r idr4494
          Name: idr4494
       Summary: idr4494 terminal package
   Description: idr4494 terminal package for Oracle Solaris 11.4SRU24.75.2
         State: Not installed (Renamed)
    Renamed to: pkg:/consolidation/osnet/osnet-incorporation@11.4,5.11-11.4.24.0.1.75.3
     Publisher: solaris
       Version: 4
        Branch: None
Packaging Date: August 21, 2020 at  4:22:21 PM
          Size: 2.52 kB
          FMRI: pkg://solaris/idr4494@4:20200821T162221Z

The version of the IDR that is currently installed in the image, for example idr4494@3, is automatically removed when the image is updated to the SRU that is named in the terminal IDR package.

Example 4-10 Update to an SRU That Does Not Fix the IDR Issue

If the SRU does not update any packages that the IDR modifies, then the pkg update command will update to the SRU and the IDR will remain installed.

If the SRU updates any packages that the IDR modifies but does not fix the problem addressed by the IDR, then the update operation will fail. You could use the following command to remove the IDR and proceed with the update if you are willing to lose the fix that the IDR provides:

$ pkg update --reject idr1929

If you are not willing to lose the fix that the IDR provides, then contact your support representative and request a new IDR for the new SRU. A new IDR will be generated that supersedes the existing IDR, enabling the system to be updated to the new SRU and IDR without losing the fixes.

If you update to an SRU that is not the newest available SRU, then you need to specify the superseding IDR package in the update. One way to do this is shown in the following example:

$ pkg update entire@intermediate-version superseding-idr '*'