Creating bundles

If you are unlucky enough to have a package that does not supply service bundle directories for its services, you have some options.

You can build a bundle using parts from some public run script collections.

Gerrit Pape made a collection of some run scripts some years ago. Wayne Marshall has collected a few more. So has Kevin J. DeGraaf. And so has Glenn Strauss. Simply take an appropriate run script, add minimal start, stop, and restart programs, put the lot into a service directory, put that into a bundle directory, and enable/start the service.

Minimal start, stop, and restart scripts are simply:

#!/bin/nosh
true

Note that Gerrit Pape's and Wayne Marshall's collections use shells as the script interpreters. Several of the scripts can be simplified yet further with use of nosh and its built-in toolset. One can replace uses of tools such as chpst and tcpsvd with the equivalent daemontools-alike tool(s) and some combination of tcp-socket-listen, tcp-socket-accept, and ucspi-socket-rules-check.

However, it is not compulsory to change such run scripts if one has the various relevant tools available. Service management places no restrictions upon how a run program is actually implemented. run programs just need to be executable, and can after all be written in many ways: in Perl, as shell scripts, as nosh scripts, as execlineb scripts, in Python, or even in compiled languages.

You can import a systemd service unit file.

If the package comes with a systemd service unit file (and potentially an accompanying socket unit file), you can import it. Simply run system-control convert-systemd-units servicename and the import utility will attempt to import the service and write a bundle directory. (You can control where the bundle directory is written.) This can cope with many systemd service units, as long as they aren't Linux-specific, esoteric, or too clever by half.

The import utility will display warnings about anything that it didn't understand or ignored.

You can simply write a bundle.

As mentioned above, minimal start, stop, and restart scripts are very simple. So, too, are run scripts.

The service interdependencies and orderings are usually quite simple, too:

mkdir -p wants after before stopped-by wanted-by
ln -s /etc/service-bundles/targets/basic after/
ln -s /etc/service-bundles/targets/basic wants/
ln -s /etc/service-bundles/targets/shutdown before/
ln -s /etc/service-bundles/targets/shutdown stopped-by/
ln -s /etc/service-bundles/targets/workstation wanted-by/

Tailor this according to need, of course.

One can use old rc scripts as a very rough guide.