Package Version Numbers, why are they so important
- by Chris W Beal
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
pkg://tools/[email protected],0.5.11-0.0.0
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://solaris/system/[email protected],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.
[email protected],5.11-0.175.0.0.0.2.1:20111019T070457Z
core-os = Package Name0.5.11 = Component - in this case we're saying it's a SunOS 5.11 package, = separator5.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 separator20111019T070457Z = Time stamp when the package was published
So from that we can see the Branch Version seems rather complex. It is necessarily so, to allow us to describe the hierachy of releases we do
In this example we see the following
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 developersTake a hypothetical example
[email protected],5.11-0.175.1.5.0.4.1:<something>
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.