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.)
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 followong:
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.
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) |
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.
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!