Understanding Oracle Solaris 11 Package Versioning
By Glynn Foster
Published June 2014, updated July 2018
How to interpret IPS package versioning using Oracle Solaris 11 to understand the state of software installed on your systems.
Oracle Solaris 11 uses a new network-based packaging system called the Image Packaging System to manage the complete software lifecycle—including the installation, upgrade, and removal of software packages. This article summarizes how to interpret package versioning using Oracle Solaris 11 so you can better understand the state of software installed on your systems.
Showing a Package Version
Oracle Solaris 11 uses package constraints, called incorporations, to control different versions of software installed on the system. This ensures that the state of the system is consistent and, more importantly, that a set of package versions has been tested by Oracle and that the package versions work well together.
A package called entire
is the primary
incorporation package that determines the overall state of a system. We can take a look at the version of the entire
incorporation package using the pkg info
command, as shown in Listing 1:
root@solaris:~# pkg info entire
Name: entire
Summary: entire incorporation including Support Repository Update (Oracle Solaris 11.3.32.4.0).
Description: This package constrains system package versions to the same
build. WARNING: Proper system update and correct package
selection depend on the presence of this incorporation.
Removing this package will result in an unsupported system.
For more information see:
https://support.oracle.com/rs?type=doc&id=2045311.1
Category: Meta Packages/Incorporations
State: Installed
Publisher: solaris
Version: 0.5.11 (Oracle Solaris 11.3.32.4.0)
Build Release: 5.11
Branch: 0.175.3.32.0.4.0
Packaging Date: Fri Apr 27 23:24:05 2018
Size: 5.46 kB
FMRI: pkg://solaris/entire@0.5.11,5.11-0.175.3.32.0.4.0:20180427T232405Z
Listing 1 - Package Information Oracle Solaris 11.3
From the output in Listing 1, we can see that the version installed on this system is Oracle Solaris 11.3.32.4.0. What this translates to is that it is a system based on Oracle Solaris 11.3 that has been updated with Support Repository Update (SRU) 32. SRUs are monthly updates Oracle provides to supported customers, which fix bugs, provide security alerts, or provide support for new hardware.
As of Oracle Solaris 11.4 the versioning was slightly tweaked. Listing 2 shows example output of the pkg info
command:
root@solaris:~# pkg info entire
Name: entire
Summary: Incorporation to lock all system packages to the same build
Description: This package constrains system package versions to the same
build. WARNING: Proper system update and correct package
selection depend on the presence of this incorporation.
Removing this package will result in an unsupported system.
Category: Meta Packages/Incorporations
State: Installed
Publisher: solaris
Version: 11.4 (Oracle Solaris 11.4.0.0.1.10.0)
Branch: 11.4.0.0.1.10.0
Packaging Date: Mon Jul 02 17:33:43 2018
Last Install Time: Wed Jul 11 03:16:23 2018
Size: 2.53 kB
FMRI: pkg://solaris/entire@11.4-11.4.0.0.1.10.0:20180702T173343Z
Listing 2 - Package Information Oracle Solaris 11.4
As you can see the output has been simplified for easier reading. Further explanation can be found below.
Breaking Down the Package FMRI
The package Fault Management Resource Identifier (FMRI) is a unique string that describes a package version. As stated above, the structure of the FMRI was slightly changed between Oracle Solaris 11.3 and Oracle Solaris 11.4.
Oracle Solaris 11.3 and older
In Oracle Solaris 11.3 and earlier the package FMRI for the entire
package is like pkg://solaris/entire@0.5.11,5.11-0.175.3.32.0.4.0:20180427T232405Z
.
The FMRI can be generalized into the elements shown in Listing 3:
pkg://<publisher>/<name>@<component_version>,<release>-<branch_version>:<timestamp>
Listing 3
If we use the generalized form shown in Listing 2a and break down the entire
package FMRI, we get the elements shown in Table 1.
FMRI Segment | Value | Description |
---|---|---|
publisher | solaris | Publisher |
name | entire | Package name |
component_version | 0.5.11 | Component version |
release | 5.11 | Release version, for example, Oracle Solaris 11 |
branch_version | 0.175.3.32.0.4.0 | Branch version |
timestamp | 20180427T232405Z | Package time stamp (ISO 8601 UTC format) |
We can also further break down the branch_version
(0.175.3.32.0.4.0
for the entire
package) as shown in Listing 4:
<trunk_id>.<update>.<sru>.<reserved>.<buildid>.<nightly_id>
Listing 4
Using the form in Listing 4 with entire
, we get the elements shown in Table 2:
FMRI Segment | Value | Description |
---|---|---|
trunk_id | 0.175 | Build number of development gate |
update | 3 | Update version, for example, Oracle Solaris 11.3 |
sru | 32 | SRU version |
reserved | 0 | Reserved (not currently used) |
buildid | 4 | Build number of SRU |
nightly_id | 0 | Nightly build number |
So in summary, this system is installed with Oracle Solaris 11.3 SRU 32.4. Note that in this case the component_version
and the release
are very similar because the version of entire
and the version of Oracle Solaris are linked. For most components, especially FOSS components, this will not be the case. There the component_version
will reflect the version of the software in question and the release
will reflect the version of Oracle Solaris this software version first shipped with.
Oracle Solaris 11.4 and newer
In Oracle Solaris 11.4 and newer the package FMRI for the entire
package is like pkg://solaris/entire@11.4-11.4.0.0.1.10.0:20180702T173343Z
.
The FMRI can be generalized into the elements shown in Listing 5:
pkg://<publisher>/<name>@<component_version>-<branch_version>:<timestamp>
Listing 5
If we use the generalized form shown in Listing 5 and break down the entire
package FMRI, we get the elements shown in Table 3.
FMRI Segment | Value | Description |
---|---|---|
publisher | solaris | Publisher |
name | entire | Package name |
component_version | 11.4 | Component version |
branch_version | 11.4.0.0.1.10.0 | Branch version |
timestamp | 20180702T173343Z | Package time stamp (ISO 8601 UTC format) |
We can also further break down the branch_version
(11.4.0.0.1.10.0
for the entire
package) as shown in Listing 6:
<minor>.<update>.<sru>.<reserved>.<reserved>.<buildid>.<nightly_id>
Listing 6
Using the form in Listing 3 with entire
, we get the elements shown in Table 2:
FMRI Segment | Value | Description |
---|---|---|
minor | 11 | The version of Oracle Solaris |
update | 4 | Update version, for example, Oracle Solaris 11.4 |
sru | 0 | SRU version |
order | 0 | Reserved (for internal use) |
platform | 1 | Reserved (for internal use) |
buildid | 10 | Build number of SRU |
nightly_id | 0 | Nightly build number |
So in summary, this system is installed with Oracle Solaris 11.4 with no SRU installed.
Note that here too in this example the component_version
and the first part of the branch_version
are the same because in this case we're looking at the entire
package. In many case this will not be the case and the component_version
will reflect the version of the software you'd install or have installed, and the branch_version
the version of Oracle Solaris that this software was first released in. For example the FMRI of the Git package in this version of Oracle Solaris 11.4 is pkg://solaris/developer/versioning/git@2.15.2-11.4.0.0.1.9.0:20180618T171726Z
, showing the version of Git is 2.15.2
and it was last updated in build 9 of Oracle Solaris, and as we saw earlier we have build 10 installed.
Package Versions with Interim Diagnostic Reliefs
Interim Diagnostic Reliefs (IDRs) are essentially package updates that help diagnose customer issues or provide temporary relief for a problem until a formal package update has been issued. Usually they are applied by a single customer and made available only through a standalone package archive (as indicated by a .p5p
file name extension). In the event that an IDR fix is applied, a package version might have two additional elements included in the branch_version
, for Oracle Solaris 11.3 and earlier this could be as follows:
<trunk_id>.<update>.<sru>.<reserved>.<buildid>.<nightly_id>.<idr>.<idr_id>
For Oracle Solaris 11.4 and newer you'd get a similar extension to the branch version.
You can see whether any IDRs have been applied to a system by using the pkg list
command, as follows:
root@solaris:~# pkg list 'idr*'
NAME (PUBLISHER) VERSION IFO
idr104 1 i--
Assuming an IDR has been formally fixed and released as part of a subsequent SRU release, when you do a pkg update
to get to this new SRU, the IDR will automatically be backed out.
Additional Resources
More information about managing Oracle Solaris 11 software can be found in the following resources on My Oracle Support:
- "The Oracle Solaris 11 Package Branch Version Scheme" (1378134.1)
- "Oracle Solaris 11.3 Support Repository Updates (SRU) Index" (2045311.1)
- "Interim Diagnostic or Relief (IDR)" (1019471.1)
- "How to Install & Remove IDRs with pkg on Solaris 11 and Later Releases" (1452392.1)
And here are some additional Oracle Solaris resources:
- Download Oracle Solaris 11
- Access Oracle Solaris 11 product documentation
- Access all Oracle Solaris 11 how-to articles
- Learn more with Oracle Solaris 11 training and support
- See the official Oracle Solaris blog
- Follow Oracle Solaris on Facebook and Twitter
About the Author
Glynn Foster is a principal product manager for Oracle Solaris. He is responsible for a number of technology areas including OpenStack, the Oracle Solaris Image Packaging System, installation, and configuration management.
Revision 1.1, 07/23/2018 |
Revision 1.0, 06/25/2014 |