Package Version Numbers, why are they so important
By Chris W Beal on Nov 29, 2011
One of the design goals of IPS has been to allow people to easily move forward to a supported "Surface" of component. That is to say, when you
# pkg update
your system, you get the latest set of components which all work together, based on the packages you already have installed. During development, this has meant simply you update to the latest "build" of the components. (During development, we build everything and publish everything every two weeks).
Now we've released Solaris 11 using the IPS technologies, things are a bit more complicated. We need to be able to reflect all the types of Solaris release we are doing. For example Solaris Development builds, Solaris Update builds and "Support Repository Updates" (the replacement for patches) in the version scheme. So simply saying "151" as the build number isn't sufficient to articulate what you are running, or indeed what is available to update to
In my previous blog post I talked about creating your own package, and gave an example FMRI of
But it's probably more instructive to look at the FMRI of a Solaris package. The package "core-os" contains all the common utilities and daemons you need to use Solaris.
$ pkg info core-os Name: system/core-os Summary: Core Solaris Description: Operating system core utilities, daemons, and configuration files. Category: System/Core State: Installed Publisher: solaris Version: 0.5.11 Build Release: 5.11 Branch: 0.175.0.0.0.2.1 Packaging Date: Wed Oct 19 07:04:57 2011 Size: 25.14 MB FMRI: pkg://email@example.com,5.11-0.175.0.0.0.2.1:20111019T070457Z
The FMRI is what we will concentrate on here. In this package "solaris" is the publisher. You can use the pkg publisher command to see where the solaris publisher gets it's bits from
$ pkg publisher PUBLISHER TYPE STATUS URI solaris origin online http://pkg.oracle.com/solaris/release/
So we can see we get solaris packages from pkg.oracle.com. The package name is system/core-os. These can be arbitrary length, just to allow you to group similar packages together. Now on the the interesting? bit, the versions, everything after the @ is part of the version. IPS will only upgrade to a "higher" version.
So from that we can see the Branch Version seems rather complex. It is necessarily so, to allow us to describe the hierarchy of releases we do In this example we see the following
core-os = Package Name
0.5.11 = Component - in this case we're saying it's a SunOS 5.11 package
, = separator
5.11 = Built on version - to indicate what OS version you built the package on
- = another separator0.175.0.0.0.2.1 = Branch Version
: = yet another separator
20111019T070457Z = Time stamp when the package was published
0.175: is known as the trunkid, and is incremented each build of a new release of Solaris. During Solaris 11 this should not change
0: is the Update release for Solaris. 0 for FCS, 1 for update 1 etc
0: is the SRU for Solaris. 0 for FCS, 1 for SRU 1 etc
0: is reserved for future use
2: Build number of the SRU
1: Nightly ID - only important for Solaris developers
Take a hypothetical example
This would be build 4 of SRU 5 of Update 1 of Solaris 11
This is actually documented in a MOS article 1378134.1 Which you can read if you have a support contract.