Wind River Support Network

HomeDefectsLIN7-4857
Fixed

LIN7-4857 : CLONE - update-rc.d script doesn't take start level into account

Created: Sep 24, 2015    Updated: Sep 8, 2018
Resolved Date: Oct 18, 2015
Found In Version: 7.0
Fix Version: 7.0.0.10
Severity: Standard
Applicable for: Wind River Linux 7
Component/s: Userspace

Description

Service start scripts have a standard (LSB) header of the following form:

### BEGIN INIT INFO
# Provides:          my_daemon
# Required-Start:    postgresql networking
# Required-Stop:     postgresql networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: This is a test daemon
# Description:       This is a test daemon
#                    This provides example about how to
#                    write a Init script.
### END INIT INFO

update-rc.d seems to ignore this information and sets all scripts to start at S20. It should adjust the Sxx number to account for prerequisites specified in the Required-Start line.

Possibly other lines are being ignored too, so update-rc.d is not conforming to the LSB.

Steps to Reproduce

Create and start a standard project.

Using crond as an example, by default after installation it has a symlink in /etc/rc3.d called S90crond.

If we disable and re-enable crond we find it changes to S20crond:

root@qemu0:/etc/init.d# update-rc.d -f crond remove
update-rc.d: /etc/init.d/crond exists during rc.d purge (continuing)
 Removing any system startup links for crond ...
  /etc/rc0.d/K90crond
  /etc/rc1.d/K90crond
  /etc/rc2.d/S90crond
  /etc/rc3.d/S90crond
  /etc/rc4.d/S90crond
  /etc/rc5.d/S90crond
  /etc/rc6.d/K90crond
root@qemu0:/etc/init.d# update-rc.d -f crond defaults   
 Adding system startup for /etc/init.d/crond.
root@qemu0:/etc/init.d# ls /etc/rc3.d/
S02dbus-1       S19nfscommon   S20irqbalanced   S999rcinit
S09sshd         S20acpid       S20nfsserver     S99rmnologin.sh
S10networking   S20bind        S20syslog        S99stop-bootlogd
S12rpcbind      S20crond       S21avahi-daemon  S99tcf-agent
S15mountnfs.sh  S20hwclock.sh  S58postfix

If we edit the header of crond to require it to start after postfix (which is at S58) by changing the header to the following:

#!/bin/sh
### BEGIN INIT INFO
# Provides: crond crontab
# Required-Start: postfix
# Default-Start:  2345
# Default-Stop:   016
...

then repeat the above steps we would expect crond to have a link of S59 to ensure it starts after postfix, but this does not occur:

root@qemu0:/etc/init.d# update-rc.d -f crond remove
update-rc.d: /etc/init.d/crond exists during rc.d purge (continuing)
 Removing any system startup links for crond ...
  /etc/rc0.d/K20crond
  /etc/rc1.d/K20crond
  /etc/rc2.d/S20crond
  /etc/rc3.d/S20crond
  /etc/rc4.d/S20crond
  /etc/rc5.d/S20crond
  /etc/rc6.d/K20crond
root@qemu0:/etc/init.d# update-rc.d -f crond defaults
 Adding system startup for /etc/init.d/crond.
root@qemu0:/etc/init.d# ls /etc/rc3.d/
S02dbus-1       S19nfscommon   S20irqbalanced   S999rcinit
S09sshd         S20acpid       S20nfsserver     S99rmnologin.sh
S10networking   S20bind        S20syslog        S99stop-bootlogd
S12rpcbind      S20crond       S21avahi-daemon  S99tcf-agent
S15mountnfs.sh  S20hwclock.sh  S58postfix

We see crond is still S20

Other Downloads


Live chat
Online