I'm honestly struggling to think of a practical use case for this, though I may be lacking sufficient context.

The case of a daemon breaking semantics of existing options is quite seldom seen, and just a bad practice for reasons of maintaining least surprise and compatibility. Even when major versions are bumped, it's rare to see such a thing.

Now when new options are added, old configurations still tend to run the same (unless it's a scenario of this flag now needs that flag set in unison, which again is a breaking change).

By all means just version and update the runscript. Symlink farms are always frustrating to deal with. It didn't work well for sysvinit at all.

On 06/25/2015 02:40 PM, Avery Payne wrote:

With yesterday's mention of the idea of a clearinghouse, the concept that daemon options need to be versioned has been in the back of my head. Here
is an idea: versioned definitions.  A crude example:

/etc/sv/sshd/envdir/DAEMON -> /etc/sv/sshd/envdir/current/DAEMON
/etc/sv/sshd/envdir/DAEMONOPTS -> /etc/sv/sshd/envdir/current/DAEMONOPTS
/etc/sv/sshd/envdir/current-> /etc/sv/sshd/versions/v3
/etc/sv/sshd/envdir/versions/v3/DAEMON
/etc/sv/sshd/envdir/versions/v3/DAEMONOPTS
/etc/sv/sshd/envdir/versions/v2/DAEMON
/etc/sv/sshd/envdir/versions/v2/DAEMONOPTS

So this was the seed of an idea that borrowed heavily from elsewhere.

The problem:
As software daemons mature, they acquire new options and change their behavior. Because a service definition is tied to launching a version of a daemon, that means on any upgrade, the definition has the possibility of breakage due to those changes.

The concept:
Settings for daemons should be versioned so that, for a given release of a daemon, the "correct" options and settings will be used.

The proposal:
I've left the original rough idea at the top of the message for comparison only. It is not the proposal.

The idea would be that, for a given definition, a ./version directory would exist that would house the version-specific information. A soft link that normally represents the settings to be used would then point to the correct version. A sample layout appears below.

/etc/svcdef/sshd/env -> ../version/3.81
/etc/svcdef/sshd/version/3.81/
/etc/svcdef/sshd/version/3.81/DAEMON
/etc/svcdef/sshd/version/3.81/DAEMONOPTS
/etc/svcdef/sshd/version/3.81/PRELAUCH
/etc/svcdef/sshd/version/3.8/
/etc/svcdef/sshd/version/3.8/DAEMON
/etc/svcdef/sshd/version/3.8/DAEMONOPTS
/etc/svcdef/sshd/version/3.8/PRELAUNCH

While the definition names are specific to supervision-scripts, the layout is not, and could conceivably hold other files and data in them; for instance, Toki's supervision framework could store shell script settings there instead of envdir files, and the soft link would point to the specific script. In this manner, we can define where and what is stored without caring about the how.

Advantages:
* Solves the version-breakage problem.
* The format is data-content-agnostic, it only requires that storage be in a file. * The format can be universally supported with all existing supervision frameworks without a naming conflict. * The format can be installed into legacy supervision arrangements without breaking the environment. * The format is entirely optional. The proposal is to recognize this as a common practice. * Allows the administrator the possibility of creating custom settings instead of using default or system-supplied settings. * Allows the administrator the possibility of rolling back to a prior version without a loss of settings.

Potential issues:
* It requires a filesystem that supports soft links.
* Storage requirements will grow with the number of versioned definitions.
* There is no guarantee that the data format will be consistent.
* For slower systems, some additional disk activity will be required. For most modern systems this isn't an issue, but for legacy systems it may have a slight impact. * There may be some suite of programs that will conflict with this arrangement.


Reply via email to