smf(5): manifest editing assistance
We had a productive wrap up meeting for Solaris 10 Platinum Beta last week, with lots of good feedback on
smf(5). One point raised is that few people like to hand-edit XML—or, maybe, many people hate to—so tools for composing service manifests are needed. We’ll need to percolate on how best to improve or extend the current set of tools, but there are a few tricks out there already.
A bad manifest. Let’s take a well-formed and valid manifest file and add the nonsensical line
<french_fry>I,m a bad element.</french_fries>to simulate a developer making a composition error during service development. How do we determine that our manifest is now broken?
svccfg(1M) validation. As I mentioned, the basic tools aren’t helpful. The logical
svccfg(1M) subcommand to check a manifest for correctness is
validate. Its output on our manifest is
$ svccfg validate /tmp/gdm2-login.xml svccfg: couldn't parse documentwhich accurately tells us the manifest is broken but does not indicate how (at all).
xmllint(1). The XML parser implementation of
svccfg(1M) is the GNOME
libxml2, which includes a general validation tool in the form of
xmllint(1). If we invoke this command with its
--valid long option, we get
$ xmllint --valid /tmp/gdm2-login.xml /tmp/gdm2-login.xml:26: parser error : Opening and ending tag mismatch: french_fry line 26 and french_fries <french_fry>I,m a bad element.</french_fries> ^which isn’t validating the document, but is telling us where and how it is not well-formed.
Graphically clear. An interesting option is to use the jEdit editor, with its XML plugin. With our document, the XML plugin will validate on save and highlight the incorrect line with red underlining:
Moreover, the error window shows both the non-well-formedness and the invalid
<french_fry> element (which is absent from the non-fast food-oriented service bundle DTD).
So we see both the immediate and the deeper error, plus the plugin highlights matching tags and provides completion menus for tag selection. Civilization to most, I expect.
I happily use
vim for development, but it’s important to note the value in jEdit just from using a different XML implementation. Using other tools to ease your composition of service descriptions (or profiles)? Let us know—and, rest assured, we’re working to make that
svccfg(1M) output more useful.
Tie knot: Knot 6 (Victoria).