← Back to team overview

touch-packages team mailing list archive

[Bug 1365007] [NEW] update-rc.d always throws a warning when "enable" or "disable" is used

 

Public bug reported:

After a lot of puzzling and confusion I've discovered that update-rc.d
has a bug in it, in Ubuntu (I've checked the Debian sid version of this
script and the bug doesn't exist there).

If you run "update-rc.d <svc> enable" or "update-rc.d <svc> disable" for
any service (with or without extra runlevel arguments) it will always,
if the sysvinit control script in /etc/init.d/<svc> DOES contain correct
LSB  init info settings, throw this warning:

update-rc.d: warning:  start runlevel arguments (none) do not match
<svc> Default-Start values (2 3 4 5)

I thought there was something wrong with my init scripts, but it happens
for all of them.  Looking at the implementation of update-
rc.d:cmp_args_with_defaults() it's clear there's a bug in the script
though.

When you run update-rc.d with the "enable" or "disable" action and this
function is called, there is an if-statement that tries to operate
differently depending on the action you give and there's no operation
for the actions "enable" or "disable":

    if ($act eq 'defaults') {
        ...
    } elsif ($act eq 'start' or $act eq 'stop') {
        ...
    }

As a result of this oversight, the values of @arg_start_lvls and
@arg_stop_lvls are never set to anything and there's no way they can
match the values provided in the LSB init info settings in the init
script and the warning is always printed.

In fact it seems there are a lot of issues with this function and this
script; for example if you give an illegal "start" command you get this:

  $ sudo update-rc.d <svc> start
  update-rc.d: warning:  start runlevel arguments (none) do not match <svc> Default-Start values (2 3 4 5)
  update-rc.d: warning:  stop runlevel arguments (none) do not match <svc> Default-Stop values (0 1 6)
  Use of uninitialized value $argv[1] in pattern match (m//) at /usr/sbin/update-rc.d line 299.
  update-rc.d: error: expected NN after start
  usage: update-rc.d [-n] [-f] <basename> remove
         update-rc.d [-n] <basename> defaults [NN | SS KK]
         update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
         update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
                  -n: not really
                  -f: force

which is clearly unpleasant.

** Affects: sysvinit (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to sysvinit in Ubuntu.
https://bugs.launchpad.net/bugs/1365007

Title:
  update-rc.d always throws a warning when "enable" or "disable" is used

Status in “sysvinit” package in Ubuntu:
  New

Bug description:
  After a lot of puzzling and confusion I've discovered that update-rc.d
  has a bug in it, in Ubuntu (I've checked the Debian sid version of
  this script and the bug doesn't exist there).

  If you run "update-rc.d <svc> enable" or "update-rc.d <svc> disable"
  for any service (with or without extra runlevel arguments) it will
  always, if the sysvinit control script in /etc/init.d/<svc> DOES
  contain correct LSB  init info settings, throw this warning:

  update-rc.d: warning:  start runlevel arguments (none) do not match
  <svc> Default-Start values (2 3 4 5)

  I thought there was something wrong with my init scripts, but it
  happens for all of them.  Looking at the implementation of update-
  rc.d:cmp_args_with_defaults() it's clear there's a bug in the script
  though.

  When you run update-rc.d with the "enable" or "disable" action and
  this function is called, there is an if-statement that tries to
  operate differently depending on the action you give and there's no
  operation for the actions "enable" or "disable":

      if ($act eq 'defaults') {
          ...
      } elsif ($act eq 'start' or $act eq 'stop') {
          ...
      }

  As a result of this oversight, the values of @arg_start_lvls and
  @arg_stop_lvls are never set to anything and there's no way they can
  match the values provided in the LSB init info settings in the init
  script and the warning is always printed.

  In fact it seems there are a lot of issues with this function and this
  script; for example if you give an illegal "start" command you get
  this:

    $ sudo update-rc.d <svc> start
    update-rc.d: warning:  start runlevel arguments (none) do not match <svc> Default-Start values (2 3 4 5)
    update-rc.d: warning:  stop runlevel arguments (none) do not match <svc> Default-Stop values (0 1 6)
    Use of uninitialized value $argv[1] in pattern match (m//) at /usr/sbin/update-rc.d line 299.
    update-rc.d: error: expected NN after start
    usage: update-rc.d [-n] [-f] <basename> remove
           update-rc.d [-n] <basename> defaults [NN | SS KK]
           update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
           update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
                    -n: not really
                    -f: force

  which is clearly unpleasant.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/sysvinit/+bug/1365007/+subscriptions


Follow ups

References