NOTE
Although by now Solaris 11 Express is officially obsolete and OpenSolaris has been left behind by Oracle, there are still community efforts to reestablish open-source variants, such as OpenIndiana and SmartOS, both running over a lagging-behind kernel called Illumos based on the original open-source version of the SunOS 5.11. But unfortunately, that kernel isn't as nearly modernized and optimized as Oracle's current closed-source product.But in spite of all that, Solaris 11 Express major benefit was to early incorporate many Solaris advancements over Solaris 10 and still run under a legacy 32-bits platform! Yes! This is key, because despite the official business strategies and propaganda focusing on 64-bits mid and high-end big-iron, the truth is that there's a lot of legacy hardware can still be put to good service to the crowds on the 3rd world which are thriving to evolve and that do not count on a lot of money and other powerful and current resources.
The initial GA release of Solaris 11 Express didn't perform well, perhaps due to a lot of debugging hooks (code assertions) and conservative strategies, after all it was a key transitional milestone of Solaris. But fact is that those who had payed for a support contract could benefit from regular updates, called SRU (service release updates), which fixed many issues and greatly improved the system performance, including booting speed. By the last general SRU, SRU-13, things were noticeably better.
For instance, Solaris 11 Express SRU-13 rivals the speed of Solaris 11.3 GA and certainly runs faster than OpenIndiana 2017.04. In my opinion, a relative comparison among "recent" Solaris distros could be depicted by the following table:
To enjoy all the power of SRU-14 on ordinary systems, some homework is necessary in order lift the impeding constrain embedded on the update.
NOTE
I'll assume that a support repository has already been made available by means described on procedures I've visited on the past, such as, the IPS repository update post.For instance, consider the following local support repository:
# zfs list -o mountpoint -H -r /depot
/depot
/depot/solaris
/depot/solaris/11e
/depot/solaris/11e/release
/depot/solaris/11e/sru-13
/depot/solaris/11e/sru-14
At first, an usual update attempt from SRU-13 to SRU-14 fail:
# pkg update --be-name solaris-11e-sru-14
Creating Plan ...
pkg update: No solution was found to satisfy constraints
Plan Creation: Package solver has not found a solution
to update to latest available versions.
This may indicate an overly constrained
set of packages are installed.
latest incorporations:
pkg://solaris/consolidation/gnome/gnome-incorporation@...151.0.1.14...
pkg://solaris/consolidation/sfw/sfw-incorporation@...151.0.1.14...
pkg://solaris/consolidation/osnet/osnet-incorporation@...151.0.1.14...
pkg://solaris/entire@...151.0.1.14...
The following indicates why the system cannot update to the latest version:
Reject: pkg://solaris/entire@...151.0.1.14...
Reason: A version for 'require-any' dependency on
pkg:/system/platform/exalogic/firstrun cannot be found
From the diagnostic messages above it's possible to realize that the SRU-14 was crafted to be applied as part of an automated installation of Solaris 11 Express target to the Exalogic Engineered System. The only constrain was a missing IPS package delivering a one-time-run SMF service performing initial configurations to Exalogic:
pkg:/system/platform/exalogic/firstrun.NOTE
It's noticeable that in more recent releases, the description of the technique for tailoring a one-time-run IPS packages has evolved while it was completely lacking on Solaris 11 Express. Nevertheless, the simpler and straightforward instructions found on Solaris 11/11 Information Library is enough to perfectly work under Solaris 11 Express. Despite the evolution in documentation it still lacks a lot of clarity by sticking to do it that way instead of building knowledge, unfortunately. For this post I'll stay as much as possible with the clearer and simpler procedures which seem to still work equally well in terms of backward compatibility.The major steps in creating the missing package are:
- Creating a SMF service manifest for a dummy service.
- Deploying the special IPS package unlocking SRU-14.
1. Creating a SMF service manifest for a dummy service.
In recent versions of Solaris, this has been somewhat simplified by svcbundle(1M), but I won't rely on it at this moment. I prefer to know all the details and stay in control as much as possible.
# mkdir /tmp/sru-14-unlock
# cd !!$
# cat sru-14-unlock.xml
...
<?xml version="1.0" ?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle name="sru-14-unlock" type="manifest">
<service name="sru-14-unlock" type="service" version="1">
<create_default_instance enabled="false"/>
<single_instance/>
<dependency name="multi_user" type="service" grouping="require_all" restart_on="none">
<service_fmri value="svc:/milestone/multi-user:default"/>
</dependency>
<exec_method name="start" type="method" exec=":true" timeout_seconds="60"/>
<exec_method name="stop" type="method" exec=":true" timeout_seconds="60"/>
<exec_method name="refresh" type="method" exec=":true" timeout_seconds="60"/>
<!-- must be defined at this exact place -->
<property_group name="startd" type="framework">
<propval name="duration" type="astring" value="transient"/>
</property_group>
</service>
</service_bundle>
<?xml version="1.0" ?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle name="sru-14-unlock" type="manifest">
<service name="sru-14-unlock" type="service" version="1">
<create_default_instance enabled="false"/>
<single_instance/>
<dependency name="multi_user" type="service" grouping="require_all" restart_on="none">
<service_fmri value="svc:/milestone/multi-user:default"/>
</dependency>
<exec_method name="start" type="method" exec=":true" timeout_seconds="60"/>
<exec_method name="stop" type="method" exec=":true" timeout_seconds="60"/>
<exec_method name="refresh" type="method" exec=":true" timeout_seconds="60"/>
<!-- must be defined at this exact place -->
<property_group name="startd" type="framework">
<propval name="duration" type="astring" value="transient"/>
</property_group>
</service>
</service_bundle>
# svccfg validate !!$
...
2. Deploying the special IPS package unlocking SRU-14.
This amounts to the creation and installation of the missing package.
What matters most is the package name, highlighted below.
# pwd
/tmp/sru-14-unlock
# mkdir -p ./prototype/lib/svc/manifest/site
# cp sru-14-unlock/sru-14-unlock.xml !!$
...
# cat sru-14-unlock.p5m
set \
name=pkg.fmri \
value=system/platform/exalogic/firstrun@1.0,5.11
set \
name=pkg.summary \
value="SRU-14 unlock."
set \
name=pkg.description \
value="Dummy package to unlock SRU-14 installation."
set \
name=org.opensolaris.smf.fmri \
value=svc:/sru-14-unlock
set \
name=org.opensolaris.consolidation \
value=userland
set \
name=info.classification \
value="org.opensolaris.category.2008:System/Packaging"
file \
path=lib/svc/manifest/site/sru-14-unlock.xml \
mode=0444 owner=root group=sys
NOTE
The extension .p5m most probably means package v5 manifest.# pkglint !!$
Lint engine setup...
Starting lint run...
This package must be placed into a package repository, from which it can be subsequently installed. If the installation is to be part of an automated install (AI), then the repository must created on a location accessible to AI clients during the first boot. On this post I'm not using AI, so I'll just create the repository under /tmp which suffices to a one-time interactive install.
# pwd
/tmp/sru-14-unlock
# pkgrepo create ./repo
# pkgrepo add-publisher -s ./repo solaris
# pkgsend publish -d ./prototype -s ./repo sru-14-unlock.p5m
pkg://solaris/system/platform/exalogic/firstrun@1.0,5.11:...Z
PUBLISHED
# pkg list -af -g ./repo
NAME (PUBLISHER) VERSION IFO
system/platform/exalogic/firstrun 1.0 ---
# pkg info -g ./repo firstrun
Name: system/platform/exalogic/firstrun
Summary: SRU-14 unlock.
Description: This dummy package...
State: Not installed
Publisher: solaris
Version: 1.0
... Release: 5.11
Branch: None
... Date: ...
Size: 928.00 B
FMRI: pkg://solaris/system/platform/exalogic/firstrun...
# pkg install -g ./repo -nv firstrun
Packages to install: 1
Estimated space available: ... GB
Estimated space to be consumed: 14.31 MB
Create boot environment: No
Create backup boot environment: No
Rebuild boot archive: No
Changed packages:
solaris
system/platform/exalogic/firstrun
None -> 1.0,5.11:...
# pkg install -g ./repo -v firstrun
...
DOWNLOAD PKGS FILES XFER (MB)
Completed 1/1 1/1 0.0/0.0
PHASE ACTIONS
Install Phase 7/7
PHASE ITEMS
Package State Update Phase 1/1
Image State Update Phase 2/2
PHASE ITEMS
Reading Existing Index 8/8
Indexing Packages 1/1
# pkg info firstrun
Name: system/platform/exalogic/firstrun
Summary: SRU-14 unlock.
Description: Dummy package to unlock SRU-14 installation.
Category: System/Packaging
State: Installed
Publisher: solaris
Version: 1.0
...
# svcadm restart manifest-import
On the console one sees:
Loading smf(5) servicd descriptions: 1/1
# svcs -a |grep sru-14
disabled 19:36:52 svc:/sru-14-unlock:default
And voilĂ !
For a default text-installation of Solaris 11 Express with SRU-13 one gets:
# pkg update -nv --be-name solaris-11e-sru-14
Packages to update: 15
Estimated space available: ... GB
Estimated space to be consumed: 366.68 MB
Create boot environment: Yes
Activate boot environment: Yes
Create backup boot environment: No
Rebuild boot archive: Yes
Changed packages:
solaris
SUNWcs
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/gnome/gnome-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/osnet/osnet-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/sfw/sfw-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
database/sqlite-3
3.6.23,5.11-0.151.0.1.4:... -> 3.7.5,5.11-0.151.0.1.14:...
entire
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
image/library/libpng
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
library/desktop/gtk2
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
library/libtasn1
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
runtime/python-26
2.6.4,5.11-0.151.0.1:... -> 2.6.4,5.11-0.151.0.1.14:...
system/file-system/zfs
0.5.11,5.11-0.151.0.1.11:... -> 0.5.11,5.11-0.151.0.1.14:...
system/kernel
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
system/kernel/platform
0.5.11,5.11-0.151.0.1.12:... -> 0.5.11,5.11-0.151.0.1.14:...
system/library
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
system/network/nis
0.5.11,5.11-0.151.0.1.8:... -> 0.5.11,5.11-0.151.0.1.14:...
# pkg update --be-name solaris-11e-sru-14
Packages to update: 15
Create boot environment: Yes
Create backup boot environment: No
DOWNLOAD PKGS FILES XFER (MB)
Completed 15/15 1743/1743 41.8/41.8
PHASE ACTIONS
Removal Phase 58/58
Install Phase 52/52
Update Phase 4258/4258
PHASE ITEMS
Package State Update Phase 30/30
Package Cache Update Phase 15/15
Image State Update Phase 2/2
PHASE ITEMS
Reading Existing Index 8/8
Indexing Packages 15/15
A clone of ... exists and has been updated and activated.
On the next boot the Boot Environment solaris-11e-sru-14 will be
mounted on '/'. Reboot when ready to switch to this updated BE.
----------------------------------------------------------
NOTE: Please review release notes posted at:
http://www.oracle.com/pls/topic/lookup?ctx=E23824&id=SERNS
----------------------------------------------------------
# init 6
SUNWcs
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/gnome/gnome-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/osnet/osnet-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
consolidation/sfw/sfw-incorporation
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
database/sqlite-3
3.6.23,5.11-0.151.0.1.4:... -> 3.7.5,5.11-0.151.0.1.14:...
entire
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
image/library/libpng
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
library/desktop/gtk2
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
library/libtasn1
0.5.11,5.11-0.151.0.1:... -> 0.5.11,5.11-0.151.0.1.14:...
runtime/python-26
2.6.4,5.11-0.151.0.1:... -> 2.6.4,5.11-0.151.0.1.14:...
system/file-system/zfs
0.5.11,5.11-0.151.0.1.11:... -> 0.5.11,5.11-0.151.0.1.14:...
system/kernel
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
system/kernel/platform
0.5.11,5.11-0.151.0.1.12:... -> 0.5.11,5.11-0.151.0.1.14:...
system/library
0.5.11,5.11-0.151.0.1.13:... -> 0.5.11,5.11-0.151.0.1.14:...
system/network/nis
0.5.11,5.11-0.151.0.1.8:... -> 0.5.11,5.11-0.151.0.1.14:...
# pkg update --be-name solaris-11e-sru-14
Packages to update: 15
Create boot environment: Yes
Create backup boot environment: No
DOWNLOAD PKGS FILES XFER (MB)
Completed 15/15 1743/1743 41.8/41.8
PHASE ACTIONS
Removal Phase 58/58
Install Phase 52/52
Update Phase 4258/4258
PHASE ITEMS
Package State Update Phase 30/30
Package Cache Update Phase 15/15
Image State Update Phase 2/2
PHASE ITEMS
Reading Existing Index 8/8
Indexing Packages 15/15
A clone of ... exists and has been updated and activated.
On the next boot the Boot Environment solaris-11e-sru-14 will be
mounted on '/'. Reboot when ready to switch to this updated BE.
----------------------------------------------------------
NOTE: Please review release notes posted at:
http://www.oracle.com/pls/topic/lookup?ctx=E23824&id=SERNS
----------------------------------------------------------
# init 6
And this concludes this post.