On 02/07/2024 14:56, Alexander Leidinger wrote:
Hi,

I'm investigating some issues with the new service jails feature. It comes down to the naming of the rc scripts. We have scripts where we have a mismatch between the setting of the name variable inside the script and the filename. This mail is to get some input on the best way forward.

The rc scripting docu (https://docs.freebsd.org/en/articles/rc-scripting/) doesn't require that the name of the rc script is the same as the name in the name variable inside the script, but it suggests it:
---snip---
Now it is the right time to choose a unique name for our script once and for all. We will use it in a number of places while developing the script. For a start, let us give the same name to the script file, too.
---snip---

The new service jails framework (https://docs.freebsd.org/en/books/handbook/jails/#service-jails) makes use of this (it uses the name variable to execute the script inside a newly created jail).

I wrote a little script which parses the script in the ports collection and it found 255 scripts with issues (out of 3361 scripts -> ~7.6% -- there are some false positives, to the percentage may even be smaller). For 124 of those the variable name uses an underscore and the script name uses a hyphen instead (this is where I noticed issues with the service jails).

While I was at it, I also checked for a mismatch between the name variable and the PROVIDES meta-comment inside. Strictly speaking this is not necessary, and there may even be cases where it is a feature that it is not the same, but those errors are part of the 255 issues.

Examples:

[..]

Generally I would say for various reasons (not only for service jails, but also for the benefit of other tools which may want to make use of this info to make it more easy to match meta-data with/in rc scripts) we should make this uniform where possible. So renaming all the xxx-xxx.in to xxx_xxx.in and have the PROVIDES match what is in the name variable.

There are some high-profile ports affected:

[..]

This will not change the autostart at boot (the rc variables stay the same, it is the filenames which would change), but if someone has some scripts to automate some stuff (ansible/puppet/chef/cfengine/plain shell/...) there may be some surprises.

I would like to:
 - rename the scripts and fix the PROVIDES part (with a suitable UPDATING entry)  - change the rc docu to strongly advise that the script name matches the content of the name variable during runtime (allows the instancing and the %%PORTNAME%% stuff) with some example where it matters

What's the generic feeling here about this?

100% agree on this (where it is possible to fix it). I remember being bitten by this in 2010 when I tried to add support for cpuset into rc.subr (commited 13 years later!)
https://lists.freebsd.org/pipermail/freebsd-rc/2010-January/001814.html

There was a problem with rc.d/bgfsck - hyphen in the $name

name="background-fsck"
rcvar="background_fsck"

Which is now fixed to an underscore, so I agree that this should be fixed for all ports rc scripts too. A hyphen in the value of the variable name can break anything at any time.

Kind regards
Miroslav Lachman


Reply via email to