1. Introduction
This document is a worksheet we're using to construct a series of experimental reduced footprint, server-oriented OpenSolaris JeOS (Just enough OS) virtual machine (VM) images that are to be used as building blocks in the construction of VM images containing various middleware applications and services. Our first application is the delivery of a set of VM images for Sun's WebSynergy Project.
Our intent is to:
- align our activities with other projects that are interested in similar results and
- periodically update our approach based on tracking the evolution of OpenSolaris and its installation tooling
Although there are many xVM VirtualBox and VMware OpenSolaris virtual images available, most of them retain X Windows and Gnome desktop (with GUI user land apllications) support that we don't need in our data center-oriented deployment images. Our set of JeOS images focus on the delivery of remotely managed server deployments that do not boot into X Windows GUI environment and do not include desktop support.
- 1 1. Introduction
- 2 2. Scoping our JeOS Experiment
- 2.1 2.1 JeOS Profiles
- 2.2 2.2 Remote Management Model
- 2.3 2.3 Reduction Drivers
- 2.4 2.4 Basic Reduction Requirements
- 3 3. Steps in Producing Experimental JeOS Images
- 4 4. Package List
- 5 5. Live CD Approach
- 6 6. Automated Installer Approach
- 7 7. References
2. Scoping our JeOS Experiment
2.1 JeOS Profiles
In our initial experiment, we're targeting a JeOS profile that will generally be well positioned to support deployment of application sever-based services. Specifically, we're orienting this initial set of images to support the WebSynergy portal application that is deployed on top of the GlassFish application server which in turn depends on Java 6.
2.2 Remote Management Model
Our project is primarily targeting server images that are oriented toward remote command line- and web browser-based administration and standard forms of network protocol-based monitoring and management (e.g. SNMP, JMX, etc). We don't anticipate needing to include remote X display support, but we will fallback to including the supporting X library packages if dependencies make them difficult to remove.
2.3 Reduction Drivers
There are several motivations why projects reduce the content of OS distributions (installed OS footprint):
| Driver | Description |
|---|---|
| Ease of Distribution | Reducing the size of the images such that they are easier to share amongst developers and deployers. |
| Ease of Maintenance | Less packages means less time spent updating unnecessary features. |
| Hardening | Improve the security of the deployment by not only disabling, but removing unnecessary features. Recognizing that reduction of unnecessary binaries and services is only a small part of the effort to harden a deployment environment. The SST/JASS tools can be applied to the JeOS images to address aspects of hardening beyond the mere exclusion of packages. |
In support of our initial set of OpenSolaris Server JeOS oriented images, we're mainly focused on easing the process of distributing and sharing the images.
2.4 Basic Reduction Requirements
| Consideration | Description |
|---|---|
| Include secure remote CLI- and web-based administration | Ensure commonly used tools for remote administration of headless server deployments are included in the images. For example, include ssh for secure shell access. Consider inclusion of web accessible administration tools for the images/appliances. In our case, we may choose to include Webmin as a basic means of managing the underlying OpenSolaris installation. |
| Include most commonly used CLI administration tools | Make a judgement call as to which packages constitute the generally expected set of CLI tools for server administration. |
| Exclude desktop- and graphics-oriented packages | In addition to X Windows and Gnome, exclude a wide variety of desktop-oriented packages such as audio and video support |
| Exclude unnecessary network services | Those services that are not typically deployed to servers hosting middleware applications (e.g. DNS server) |
| Exclude unnecessary drivers | Include drivers that are needed for the targeted v12n platforms: * Sun xVM Server * Sun xVM VirtualBox 2 * VMware ESX * VMware Server 2.0 * VMWare Workstation 5/6 Future considerations: To support Virtual to Physical (V2P) migration and to support new virtualization features at the processor level, we may consider inclusion of non-virtual drivers. In the context of our initial images, this consideration is likely not very important. |
| Include as an option JDK | Include or at least document how to install a complete Java SDK to support Java-based services |
| Language support | Need to determine degree to which multi-language support is required. e.g. What about SUNWlang* packages? Leave in for now. There are two facets to consider: 1. Preferred language of administrators 2. Language support required by applications. Initially, in support of the somewhat generic OS, we'll concentrate on the first facet. As we begin to map the applications to the JeOS images, we'll add language support as necessary. |
3. Steps in Producing Experimental JeOS Images
We're treating the creation of our initial JeOS images in two steps:
- Identify reduced set of packages based on application needs and other requirements
- Translate the desired package list into an installed VM image
3.1 Identifying Package List of Interest
Our approach of identifying the packages of interest is pretty basic. As part of his EC2 investigation, Rudolf Kutina already had a dream list of a pretty reduced set of packages for OpenSolaris. Using this list as a starting point, we're tweaking it to align with our requirements for this series of JeOS images. We recognize that the dependencies already specified between packages will have a large bearing on which packages ultimately must be installed in these images.
3.2 Translating List of Packages into VM Image
We're addressing the creation of the initial set of reduced images on two steps:
- Using Live CD as Starting Point
- Migrating to Automated Installer
3.2.1 Using Live CD as Starting Point
In support of our WebSynergy VM images, we're initially taking the brute force method of addressing both stages to producing a JeOS of OpenSolaris. Since the OpenSolaris live CDs are already a readily available form of a JeOS for OpenSolaris, albeit for desktop use, we've started with a live CD installation of OpenSolaris 2008.05 Build 98 and have identified the packages to exclude based on our application requirements. Next, we're writing scripts to remove the excluded packages from the installation. We will update these scripts and regenerate our baseline JeOS images as successive builds of OpenSolaris are made available.
3.2.2 Migrating to Automated Installer
The Automated Installer project of OpenSolaris will soon release an early form of installation tooling that should enable our project to use a list of desired packages as input and depend on the tooling and package dependencies to deliver a suitably installed image. As soon as it's feasible to do so, we plant to start exercising the automated installer.
4. Package List
4.1 List of Included Packages
The following list is a DRAFT set of packages that we are in the process of tweaking and trying to represent via the live CD-based selective removal method described earlier. The list will evolved based on our experiments.
# # Core OpenSolaris packages # SUNWcakr Core Solaris Kernel Architecture SUNWcakrx Core Kernel Architecture i86xpv SUNWcar Core Architecture SUNWcarx Core Architecture i86xpv SUNWckr Core Solaris Kernel SUNWcnetr Core Solaris Network Infrastructure SUNWcs Core Solaris SUNWcsd Core Solaris Devices SUNWcsl Core Solaris, (Shared Libs) SUNWkvm Core Architecture, (Kvm) # # Basic Drivers # SUNWusbs USB generic serial module SUNWusb USB Device Drivers SUNWrmodr Realmode Modules SUNWrmodu Realmode Modules SUNWpm Power Management binaries # # Main System Utilities # SUNWesu Extended System Utilities SUNWadmr System & Network Administration Root # # English Language Support # SUNWlang-common language support common components SUNWlang-en English language support SUNWkey Keyboard configuration tables SUNWloc System Localization # # Packaging System # SUNWipkg Image Packaging System SUNWinstall-libs System install libraries # # ZFS # SUNWzfs ZFS SUNWzfskr ZFS Kernel # # DTrace # SUNWDTraceToolkit DTrace Toolkit SUNWdtrc DTrace Clients SUNWdtrp DTrace Providers # # More System stuff # SUNWhwdata Hardware data files SUNWidnl Internationalized Domain Name Support Library Files SUNWipf IP Filter utilities SUNWzone Solaris Zones SUNWservicetag Service Tags SUNWfss Fair Share Scheduler SUNWpoold Dynamic Resource Pools SUNWpostrun Delayed execution environment for procedural package scripts SUNWpool Resource Pools SUNWos86r Platform Support, OS Functionality SUNWatfs AutoFS SUNWkey Keyboard configuration tables SUNWmd Solaris Volume Manager SUNWcfcl Common Fibre Channel HBA API Library SUNWcfpl fp cfgadm plug-in library # # Core Network Services # SUNWbip Basic IP commands SUNWbind BIND DNS Name server and tools SUNWntp NTP SUNWnfsc Network File System (NFS) client support SUNWnfsckr Network File System (NFS) client kernel support SUNWsmbfs SMB/CIFS File System client support SUNWsmbfskr SMB/CIFS File System client support (Kernel) SUNWroute Network Routing daemons/commands # # GNU Libraries and Tools # SUNWgccruntime GCC Runtime libraries SUNWgcmn gcmn - Common GNU package SUNWggrp ggrep - GNU grep utilities SUNWgnu-coreutils coreutils - GNU core utilities SUNWgnu-diffutils GNU diffutils SUNWgnu-which GNU which SUNWgnutls GNU transport layer security library SUNWgpch The GNU Patch utility SUNWgrub GNU GRUB - GNU GRand Unified Bootloader SUNWgtar gtar - GNU tar SUNWgzip The GNU Zip (gzip) compression utility SUNWsfdoc GNU and open source documentation SUNWsfinf GNU and open source info pages SUNWsfman GNU and open source man pages SUNWtexi GNU texinfo - Texinfo utilities (texinfo) SUNWless The GNU pager (less) SUNWcurl The C-URL Wrappers Library SUNWgnu-idn The Internationalized Domains Library # # Essential Language Runtimes # # Python is required by pkg(5) system SUNWPython The Python interpreter, libraries and utilities # # Tcl/Tk is required by Python SUNWTcl Tcl - Tool Command Language SUNWTk Tk - TCL GUI Toolkit # # Miscellaneous Essential Libraries and Tools # SUNWlibms Math & Microtasking Libraries SUNWpicl PICL Libraries, and Plugin Modules SUNWpr Netscape Portable Runtime SUNWsmapi Storage Management APIs SUNWtecla Tecla command-line editing library SUNWjss Network Security Services for Java (JSS) SUNWlexpt libexpat - XML parser library SUNWlibC Sun Workshop Compilers Bundled libC SUNWlibgcrypt libgcrypt - cryptographic library SUNWlibgpg-error Common error codes for GnuPG, libgcrypt SUNWlibpopt Command line parsing library SUNWlibsasl SASL v2 SUNWlibsmbclient A library that permits applications to manipulate CIFS/SMB network resources SUNWlxml The XML library SUNWlxsl The XSLT library SUNWopenssl OpenSSL Commands SUNWtls Network Security Services SUNWzlib The Zip compression library SUNWgss GSSAPI V2 SUNWxwrtl X Window System & Graphics Runtime Library Links in /usr/lib # # User Land Tools # SUNWbash GNU Bourne-Again shell (bash) SUNWbzip The bzip compression utility SUNWdoc Documentation Tools SUNWman On-Line Manual Pages SUNWssh SSH Client and utilities SUNWsshcu SSH Common SUNWsshd SSH Server SUNWkrb Kerberos version 5 support SUNWtoo Programming Tools SUNWunzip The Info-Zip (unzip) compression utility SUNWvim Vi IMproved SUNWwget wget - GNU wget SUNWzip The Info-Zip (zip) compression utility SUNWter Terminal Information
4.2 Optional Additional Packages
SUNWj6rt JDK 6.0 Runtime Env. (1.6.0_04) # add JDK packages... SUNWwebmin Webmin Web-based Administrative Interface # # Perl is required by Webmin (nned to verify whether both core and non-core or just core is required) SUNWperl584core Perl 5.8.4 (core) SUNWperl584usr Perl 5.8.4 (non-core)
5. Live CD Approach
...add information about our approach and any scripts we used to achieve the reduced installation when using the live CD as the starting point...
6. Automated Installer Approach
7. References
Reduction of Solaris 10 and OpenSolaris Nevada
| Reference | Description |
|---|---|
| Solaris 10 Software Groups | Use the "Core" and "Reduced Networking" groups as documented in the Solaris 10 Software Groups manual as a guide when considering which packages to include in and exclude from the reduced image. |
| Peter Tribble's Solaris 10 docs | Reducing Solaris 10 installations. |
| Rudolf Kutina's Solaris minimalizations for Amazon EC2 | Rudolf provides some insight into OpenSolaris Nevada reduction in support of EC2 AMI images. Specially, see the Nevada section on Rudolf's blog. |