Package: runit
Version: 2.1.2-53
Severity: normal
Tags: patch

Hi,

/etc/runit/2 ships with this snippet:

        if [ "$runsv_dir" != solo ] || [ ! -e /etc/runit/no.emulate.sysv ]; then
                /lib/runit/async-timeout /lib/runit/run_sysv_scripts 
'/etc/rc2.d'
        fi

This means that the rc2.d scripts are run if EITHER $runsv_dir does not equal 
"solo" OR the file /etc/runit/no.emulate.sysv doesn't exist.

In other words, for rc2.d scripts to be skipped, BOTH of the following 
conditions must be true:

 1. $runsv_dir has to equal solo; AND
 2. /etc/runit/no.emulate.sysv has to exist.

I think that rc2.d should be skipped if /etc/runit/no.emulate.sysv exists, 
regardless of the value of $runsv_dir. This is also what the README suggests:

* /etc/runit/no.emulate.sysv
     Skip all sysv scripts enabled in rc2.d during the boot sequence, even if
     there is no correspondent native runscript in /etc/sv/

(I still also think that /etc/sv is the wrong place to check; the directory 
monitored by runsvdir, e.g. /etc/service, could contain a symlink to a service 
that resides somewhere else, not in /etc/sv/, and the existence of such a 
symlink should also cause the initscript invocation to be skipped.)

For this particular issue in /etc/runit/2, I recommend just replacing the || 
with &&, so the snippet becomes:

        if [ "$runsv_dir" != solo ] && [ ! -e /etc/runit/no.emulate.sysv ]; then
                /lib/runit/async-timeout /lib/runit/run_sysv_scripts 
'/etc/rc2.d'
        fi

AndrĂ¡s

-- 
   If debugging is removing bugs, then programming must be putting them in.

Reply via email to