Peter's Solaris Zone

Minimalized Installation

This is my second attempt at doing this test. There are also some details of the first attempt that I had, for background.

For many purposes you want a server to have an absolutely minimal setup - as little as possible should be installed. I've been doing a bit of testing on a B100s blade server.

You could start off with the SUNWCreq metacluster, or SUNWCrnet, or something similar. However, this is likely to be rather suboptimal as (unless you're like Eric Boutilier and are trying to get it down to something basic enough to which you then install everything else from source to get a complete system) you wouldn't be able to do much with it. I want to get a working system with no additions required. So I started with SUNWCrnet.

The Solaris installer won't let you remove some packages:

WARNING: Cannot deselect required cluster (SUNWCib)
WARNING: Cannot deselect required cluster (SUNWCfca)
WARNING: Cannot deselect required cluster (SUNWCfct)

Now that's odd - it won't let you create a system without Infiniband or fibre channel, which is bogus because (at least on sparc) it can conditionally add packages for certain hardware, so it doesn't need to force these packages on every machine.

My profile also gave rise to the following warnings:

WARNING: SUNWsshdu depends on SUNWgss, which is not selected
WARNING: SUNWsshu depends on SUNWgss, which is not selected
WARNING: SUNWusb depends on SUNWaudd, which is not selected

Now, the first two is a killer, as ssh didn't start. The last one is plain daft - why on earth should usb support require audio drivers.

But my basic SUNWCrnet install gave me 100 packages and completed pretty quickly. But with no network services and no automounter, I had difficulty logging in. But the basic plan is sound - the system boots and works up to a point.

After trying SUNWCrnet, I went back to SUNWCreq. At least this way I can log into the box. I'll go back to SUNWCrnet once I can work out exactly how much I need to log in using ssh. (And in a networked environment that's actually quite a lot - nfs client, automounter, NIS+, ssh.)

OK, so I start with the following cluster:

cluster         SUNWCreq
cluster         SUNWCnfss       delete
cluster         SUNWCbs         delete
cluster         SUNWCmd         delete
cluster         SUNWCaudd       delete
cluster         SUNWCudf        delete
cluster         SUNWCssh        add
cluster         SUNWCntp        add
cluster         SUNWCfwcmp      add
cluster         SUNWCfwshl      add
cluster         SUNWCib         delete
cluster         SUNWCfca        delete
cluster         SUNWCfct        delete
cluster         SUNWChbaapi     delete
cluster         SUNWCged        delete
cluster         SUNWCtavor      delete
cluster         SUNWChmd        delete
cluster         SUNWCqfe        delete
cluster         SUNWCqus        delete
package         SUNWtnamd       delete
package         SUNWtnamr       delete
package         SUNWtftp        delete
package         SUNWtftpr       delete
package         SUNWftpr        delete
package         SUNWftpu        delete

(The installer balks at 5 of those deselected clusters and installs them anyway.)

Further tweaking

What I then decided to do was to install a system as above and then use pkgadd/pkgrm to refine matters. Specifically, manually pkgrm all the useless fat (at least, the stuff I believe should be useless). So off we go and eradicate the following:

SUNWerid
SUNWhmd
SUNWjfca SUNWjfcau
SUNWssad
SUNWxge
SUNWtnetc SUNWtnetr SUNWtnetd
SUNWdtcor
SUNWiscsiu SUNWiscsir
SUNWjss
SUNWudapltr SUNWudapltu SUNWtavor
SUNWrpcib SUNWudaplu SUNWudaplr SUNWipoib SUNWib
SUNWqlc SUNWses
SUNWfchba SUNWfchbar SUNWcfclr SUNWcfcl
SUNWcfpl SUNWcfplr SUNWluxop SUNWluxopr
SUNWfcmdb SUNWfcsm SUNWfcip
SUNWfcp SUNWfctl
SUNWipmi
SUNWuedg SUNWusbs SUNWugen SUNWusb
SUNWxwdv SUNWxwmod
SUNWroute SUNWcnsu SUNWcnsr
SUNWzsh SUNWbash
SUNWipfr SUNWipfu

So I can get down to 83 packages (and under 200meg disk used) pretty easily. The biggest piece of software at this point is actually perl.

I had a closer look, and managed to eliminate the following, by using the machine for a day and then seeing if any of the files in the package had ever been accessed. Essentially what I do is grep /var/sadm/install/contents for the package, then pick out the lines that have "f" in column 2 (I'm not interested in symlinks, hard links, or directories, only files) and then do ls -u on the resulting list.

SUNWflexruntime
SUNWlexpt
SUNWcpp
SUNWidnl
SUNWlldap
SUNWkey
SUNWpd

What is interesting is that most stuff still works at this point. OK, so I have /usr/local/ and /usr/X11R6 with a lot of software NFS mounted, but most of the command line utilities work. Graphics is another matter - no java, no openwin, no Motif, no gtk, no gnome. But if all I wanted to do was run something like a nameserver, this would work great.

What I'm left with

This is the package list I'm left with, split into functional groups (so I've tried to identify what the base OS needs, and what I myself need to integrate into my environment).

Core OS and essential drivers (12 packages)
SUNWcakr                     Core Solaris Kernel Architecture (Root)
SUNWcar                      Core Architecture, (Root)
SUNWckr                      Core Solaris Kernel (Root)
SUNWcnetr                    Core Solaris Network Infrastructure (Root)
SUNWcsd                      Core Solaris Devices
SUNWcsl                      Core Solaris, (Shared Libs)
SUNWcslr                     Core Solaris Libraries (Root)
SUNWcsr                      Core Solaris, (Root)
SUNWcsu                      Core Solaris, (Usr)
SUNWced                      Sun GigaSwift Ethernet Adapter Driver
SUNWesu                      Extended System Utilities
SUNWkvm                      Core Architecture, (Kvm)
Essential dependent libraries and the like (15 packages)
SUNWlibC                     Sun Workshop Compilers Bundled libC
SUNWlibms                    Math & Microtasking Libraries (Usr)
SUNWlibmsr                   Math & Microtasking Libraries (Root)
SUNWlibsasl                  SASL v2
SUNWlxml                     The XML library
SUNWopenssl-libraries        OpenSSL Libraries (Usr)
SUNWpr                       Netscape Portable Runtime
SUNWtecla                    Tecla command-line editing library
SUNWtls                      Network Security Services
SUNWzlib                     The Zip compression library
SUNWloc                      System Localization
SUNWgss                      GSSAPI V2
SUNWgssc                     GSSAPI CONFIG V2
SUNWkrbr                     Kerberos version 5 support (Root)
SUNWkrbu                     Kerberos version 5 support (Usr)
Things I'm still not sure about (2 packages)
SUNWrmodu                    Realmode Modules, (Usr)
Things I need to manage the system (16 packages)
SUNWadmap                    System administration applications
SUNWadmlib-sysid             System and Network identification libraries
SUNWadmr                     System & Network Administration Root
SUNWbzip                     The bzip compression utility
SUNWfmd                      Fault Management Daemon and Utilities
SUNWgzip                     The GNU Zip (gzip) compression utility
SUNWinstall-patch-utils-root Install and Patch Utilities (root)
SUNWpiclr                    PICL Framework (Root)
SUNWpiclu                    PICL Libraries, and Plugin Modules (Usr)
SUNWpkgcmdsr                 SVr4 package commands (root)
SUNWpkgcmdsu                 SVr4 packaging commands (usr)
SUNWproduct-registry-root    Solaris Product Registry runtime support (root)
SUNWsolnm                    Solaris Naming Enabler
SUNWswmt                     Install and Patch Utilities
SUNWwbsup                    WAN boot support
SUNWwsr2                     Solaris Product Registry & Web Start runtime support
SUNWzip                      The Info-Zip (zip) compression utility
Things that are handy to have around (8 packages)
SUNWbip                      Basic IP commands (Usr)
SUNWbipr                     Basic IP commands (Root)
SUNWdtrc                     DTrace Clients
SUNWdtrp                     DTrace Providers
SUNWmdb                      Modular Debugger
SUNWperl584core              Perl 5.8.4 (core)
SUNWperl584usr               Perl 5.8.4 (non-core)
SUNWtoo                      Programming Tools
Things I need to integrate into my local environment (21 packages)
SUNWtcsh                     Tenex C-shell (tcsh)
SUNWsshcu                    SSH Common, (Usr)
SUNWsshdr                    SSH Server, (Root)
SUNWsshdu                    SSH Server, (Usr)
SUNWsshr                     SSH Client and utilities, (Root)
SUNWsshu                     SSH Client and utilities, (Usr)
SUNWscpu                     Source Compatibility, (Usr)
SUNWnfsckr                   Network File System (NFS) client kernel support (Root)
SUNWnfscr                    Network File System (NFS) client support (Root)
SUNWnfscu                    Network File System (NFS) client support (Usr)
SUNWnisr                     Network Information System, (Root)
SUNWnisu                     Network Information System, (Usr)
SUNWntpr                     NTP, (Root)
SUNWntpu                     NTP, (Usr)
SUNWrcmdc                    Remote Network Client Commands
SUNWrcmdr                    Remote Network Server Commands (Root)
SUNWrcmds                    Remote Network Server Commands (Usr)
SUNWsndmr                    Sendmail (root)
SUNWsndmu                    Sendmail (/usr)
SUNWatfsr                    AutoFS, (Root)
SUNWatfsu                    AutoFS, (Usr)

What's missing

Quite a lot, actually. For example, I found that I really wanted SUNWtoo in order to get at ldd and truss. I also found that showrev isn't there, so "patchadd -p" is needed to get the patch list.

Another things I just noticed is that prtfru isn't there, so I would probably want to add SUNWfruid to get that on a big box (as this is a blade server, I can actually get at the FRU information from the controller if I ever need it).

From those 74 packages, it's probably pretty simple to get down to 50 depending on need. For example, integration into our network is about 15 packages, although I have to say that I would regard ssh and ntp as pretty vital, and while I could probably live without ping or dtrace I would normally leave them in.

I'm not sure about all the dependencies in the patch/packaging area. I'm fairly sure I'm not interested in wanboot, but pkgrm complains about dependencies, and I can see that libwanboot is being used.

Unfortunately, trying to cut things down to the bare minimum turns out to be very difficult, simply because there are so many dependencies inherent in various utilities. And some of them are not at all obvious. For example, cron depends on libxml2, and complains bitterly about the lack of libnspr4.so.

Another example - svccfg pulls in libxml2, libz, and libtecla - so that's 3 packages you can't remove. And that's something pretty fundamental in Solaris 10.

Another thing that's going to fail is that I can't build any software. No compilers, no support tools, no header files. So I'm restricted to installing binaries only.

What works

As before mentioned, a lot works. Obviously anything graphical is going to fail, as there are no files related to X, CDE, or GNOME. But everything else seems to work fine.

As an experiment, I downloaded the latest copy of java and tomcat, unpacked them and set them off. As far as I can tell, they work fine.

In fact, for most purposes we need to build our compute nodes so that they need to support java, and probably X11 with it, and also fully equipped for accounting and capable of software development. So I've gone back to slashing at SUNWCall.

It was an interesting experiment anyway!


Peter's Home | Zone Home