Monday May 09, 2011

OTN Sys Admin Day

I'll be at the Hyatt in San Diego on Tuesday, May 17 to introduce the first OTN (Oracle Technology Network) Sys Admin day; we'll be focusing on Solaris 11 Express this time around.  This is a free technical seminar w/ hands-on labs, and is a great chance to try out some of the new technology in Solaris 11.   You can also offer feedback to both technical folks and Marketing (er, Product Management).  I'll talk about some of the changes in S11 Express of particular interest to system administrators, and discuss the new packaging system and installers.

More info, including location and registration link can be found here.

Here's the agenda:

8:00 a.m. Registration
System Shakedown (optional)
9:00 a.m. Overview of Oracle Solaris 11 Express for Sysadmins
10:00 a.m. Hands-On Lab: Oracle Solaris ZFS
11:00 a.m. Hands-On Lab: Oracle Solaris Security
12:00 noon Lunch
1:00 p.m. Hands-On Lab: Oracle Solaris Virtualization
2:00 p.m. Oracle Enterprise Manager Ops Center Lecture
3:00 p.m. Discussion: Most Pressing Sys Admin Issues
4:00 p.m. Raffle and Closing

Wednesday Feb 04, 2009

Fattening packages - supporting multiple variants in a single package

Dealing with parts of a package

Traditionally, packaging systems have placed optional components of a package in separate packages, and established conventions for naming such components, such as -localization, -locale, -devel, -doc, etc. This method of ad-hoc decomposition makes it more difficult for GUI programs to offer the appropriate choices when selecting components, makes the introduction of new optional components difficult and makes installing documentation after the fact a painful process.

Packaging options also exist which are mutually exclusive; the typical example is which architecture the package supports. One cannot select both sparc and x86, since the two architecture's files collide - /usr/bin/ls is either a sparc binary or a i386 binary. Other examples of such colliding options include debug vs non-debug kernel binaries, and global vs nonglobal zones.

Initially we started solving the problem of selecting parts of a package using more or less ad-hoc client-side filtering, but it became clear that the publisher of the package needed to be able to describe what components intersected or were optional, and that we needed to be able to clearly distinguish between the two cases. Thus, we refer to options that may be selected or not selected in any combination, such as various locales, documentation, etc., as facets. Options which must be mutually exclusive are called variants. Both variants and facet appear as tags on IPS actions, and result in the action being selected or de-selected for installation.

An example of variant tags on an action is:

dir group=sys mode=0755 owner=root path=kernel/drv/amd64

Here this directory action is tagged with variant.arch=i386, indicating that this directory should only be installed on i386 machines (Solaris doesn't distinguish between 32 and 64 bit architectures) and, which shows that this directory should only be installed in the global zone and not in local zones as those don't contain kernel components.

Note that any action in the repository can be so tagged, including dependencies.

During installation planning, all actions not applicable to the current image are removed from consideration. If a user with a down-rev version of IPS that doesn't understand variants attempts to install a fat package, either an exception will occur indicating that duplicate actions have been found, or if a set action is found with an architecture tag an assertion will trigger. In either case the solution is either to stop attempting to install fat packages, or upgrade your version of IPS to the latest available for your build.

The initial implementation in build 106 supports only variants (facets are coming later on). To faciliate detection of attempts to install packages on the wrong architecture, our publication code now inserts set actions into packages to indicate what architectures the package supports:

set name=variant.arch value=sparc value=i386 

Publishing Fat packages

We produce fat packages by publishing separately on each architecture, and then merging the resulting manifests. Actions which are identical for both architectures are not tagged w/ variant tags; those that differ or exist only for one architecture are tagged.  Packages that exist only on one architecture are tagged to indicate that as well. This step can be repeated for different variants, and more than two variants types can be combined at once, so packages containing debug kernel binaries could be merged w/ non-debug versions, and then merged across several architectures. An example of a merged manifest can be seen here. Of course, those using pkgsend to create packages can simply insert the appropriate tags directly. For the curious, the code to merge packages can be seen here. Further work is needed to improve the performance of publishing the merged packages; allowing multiple repositories to share the filestore would help greatly here.


An engineer's viewpoint on Solaris...


« June 2016