InitScriptStatusActions

Differences between revisions 1 and 67 (spanning 66 versions)
Revision 1 as of 2008-07-10 00:52:48
Size: 2881
Editor: cpe-66-68-158-133
Comment: initial creation
Revision 67 as of 2008-08-03 18:11:03
Size: 8327
Editor: c-71-61-189-24
Comment: awaiting to fixex
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Overview == ||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Contents'''[[BR]][[TableOfContents(3)]]||
Line 3: Line 3:
The LSB suggests that init scripts provide a '''status''' action: == Background ==

The LSB suggests that init scripts provide a ''status'' action:
Line 6: Line 8:
=== status_of_proc() library function in lsb-base == DustinKirkland worked with Debian to [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490095 provide a method], {{{ status_of_proc() }}}, in /lib/lsb/init-functions, in the [http://packages.qa.debian.org/l/lsb.html lsb-base] library package. This function is fully integrated in Intrepid as of [https://launchpad.net/ubuntu/+source/lsb lsb-3.2-14].
Line 8: Line 10:
DustinKirkland has been working with Debian to provide a status_of_proc() method in /lib/lsb/init-functions, which is provided by the lsb-base package. This function is present as of lsb-3.2-13:
 * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490095
 * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=483285
 * http://packages.qa.debian.org/l/lsb.html
== Adding status actions to init scripts ==
Line 13: Line 12:
In the meantime, this functionality has been merged into Ubuntu's lsb-base package in lsb 3.2-12ubuntu3:
 * https://launchpad.net/ubuntu/intrepid/+source/lsb/3.2-12ubuntu3
This diff should be dropped as soon as Debian accepts the functionality and Ubuntu merges the package into Intrepid.

== various init script callers ==

DustinKirkland has provided patches to the key service init scripts that are installable from the Ubuntu Server CD:
 * at: wiki:Bug:247091
 * bind9: wiki:Bug:247084
 * cron: wiki:Bug:201504
 * dovecot: wiki:Bug:247096
 * openssh: wiki:Bug:247103
 * samba: wiki:Bug:247087
 * syslogkd: wiki:Bug:247106

OnnoBenschop has provided a script to detect, and compiled a list of init scripts that are lacking '''status''' action here:
 * OnnoBenschop/ubuntu-server/init.d-status

Countless other init scripts could/should be patched to provide this functionality.
Numerous init scripts should be patched to call {{{ status_of_proc() }}} and provide a ''status'' action. A simple recipe follows for adding such functionality.
Line 34: Line 15:
When you encounter an init script that lacks a status action: When you encounter an init script that [https://wiki.ubuntu.com/InitScriptStatusActions#head-75448d0a482c28a007476b3be2394d9db3213662 lacks a status action]:
Line 36: Line 17:
  * dpkg -S /etc/init.d/FOO
 1. Open a Bug in Launchpad against the package
  * {{{ dpkg -S /etc/init.d/FOO }}}
 1. Open a bug in Launchpad against the package
Line 39: Line 20:
 1. Grab the source
  *
apt-get source FOO
  *
sudo apt-get build-dep FOO
 1. Locate the init script in the source tree, often:
  *
debian/*.init
  *
debian/rc
 1. Grab the source and build dependencies
  * {{{
apt-get source FOO }}}
  * {{{
sudo apt-get build-dep FOO }}}
 1. Locate the init script in the source tree, sometimes
  * {{{
debian/*.init }}}
  * {{{
debian/rc }}}
Line 48: Line 29:
  * add a dependency in debian/control for lsb >= 3.2-12ubuntu3
  * if you're sending to Ubuntu
   * add the changelog entry referencing your Launchpad bug
   * don't if you're sending to Debian!
  * add a dependency in debian/control for lsb-base >= 3.2-14
  * add the changelog entry referencing your Launchpad bug, (LP: #999999)
 1. Assuming that you have the package installed, test your patched init script for the new functionality and regressions. Check that $? after the status calls are 0 on success, and non-zero on failure.
  * {{{ sudo sh debian/FOO.init start }}}
   * {{{ * Starting FOO [ OK ] }}}
  * {{{ sh debian/FOO.init status; echo $? }}}
   * {{{ * FOO is running. }}}
  * {{{ sudo sh debian/FOO.init stop }}}
   * {{{ * Stopping FOO [ OK ] }}}
  * {{{ sh debian/FOO.init status; echo $? }}}
   * {{{ * FOO is not running. }}}
  * {{{ sudo sh debian/FOO.init start }}}
   * {{{ * Starting FOO [ OK ] }}}
Line 53: Line 43:
  * debuild -S   * {{{ debuild -S }}}
Line 55: Line 45:
  * debdiff
 1. Compare your work to some of the other patches that did similar things.
  * See the patch for ''atd'':
   * http://launchpadlibrarian.net/15924139/at.status.debdiff
  * Or, perhaps have a look at the patch for ''openssh-server'', which passes a pidfile to status_of_proc():
   * http://launchpadlibrarian.net/15924489/openssh.status.debdiff
  * However, some are more complicated than others, such as ''samba'':
   * http://launchpadlibrarian.net/15925572/samba.status.debdiff
 1. Add your patch to the Launchpad bug you filed
  * {{{ debdiff }}}
 1. Compare your work to some of the other patches
  * [http://launchpadlibrarian.net/15924139/at.status.debdiff atd]
  * [http://launchpadlibrarian.net/15936081/openssh.status.debdiff openssh-server]
 1. Add your patch to the Launchpad bug you filed, mark as ''Confirmed''
 1. Subscribe ''kirkland'', and (''ubuntu-main-sponsors'' or ''ubuntu-universe-sponsors'') as appropriate
 1. For bonus points, file a bug in Debian, and work the patch back upstream
  * Use Bugs/Debian/Usertagging
   * {{{User: ubuntu-devel@lists.ubuntu.com}}}
   * {{{Usertags: origin-ubuntu ubuntu-patch intrepid}}}


== Init Scripts that Need a Status Action ==
The following is a crude list of init scripts in Intrepid that are lacking a "status" action. I say "crude" in that this list was generated on 2008-07-21 by installing the Intrepid Ubuntu (server, ubuntu-desktop, kubuntu-desktop, xubuntu-desktop), and grepping through /etc/init.d for scripts that lacked the string "status)". Please help improve this list by adding/removing init scripts to/from this list, and linking to a bug number. Please leave an informative note in this wiki page's changelog.

You can run {{{ dpkg -S /etc/init.d/... }}} to determine the source package of any of the following scripts.


=== Init scripts with daemon(s) ===

===== /etc/init.d/... =====

 1. acpid: wiki:Bug:251681 (FIXED)
 1. at: wiki:Bug:247091 (FIXED)
 1. bind9: wiki:Bug:247084 (Patch submitted, awaiting main sponsorship)
 1. bip: wiki:Bug:251287 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492126 Debian #492126]
 1. bluetooth: wiki:Bug:251684 (FIXED)
 1. bootlogd
 1. brltty: wiki:Bug:251626 (FIXED)
 1. cron: wiki:Bug:201504 (FIXED)
 1. dbus wiki:Bug:252214 (Patch submitted, awaiting main sponsorship), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492541 Debian #492541]
 1. dhcdbd: wiki:Bug:251624 (FIXED)
 1. dovecot: wiki:Bug:247096 (FIXED)
 1. gdm: wiki:Bug:251375 (FIXED)
 1. hal: wiki:Bug:252350 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492625 Debian #492625]
 1. kdm
 1. mysql
 1. mysql-ndb
 1. mysql-ndb-mgm
 1. mythtv-backend wiki:Bug:251325 (Patch submitted, awaiting universe sponsorship)
 1. nis
 1. openvpn
 1. openssh: wiki:Bug:247103 (FIXED)
 1. portmap
 1. powernowd
 1. pulseaudio (Be careful with this one: the default for desktop installs is via session, not via this initscript.)
 1. rsync: wiki:Bug:251320 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492138 Debian #492138]
 1. samba: wiki:Bug:247087 (Patch submitted, awaiting main sponsorship)
 1. squid: wiki:Bug:251299 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492131 Debian #492131]
 1. sysklogd: wiki:Bug:247106 (FIXED)
 1. system-tools-backends
 1. usplash
 1. winbind: wiki:Bug:247087 (Patch submitted, awaiting main sponsorship)
 1. lighttpd: wiki:Bug:251924 (FIXED)
 1. xinetd: wiki:Bug:251975 (FIXED)
 1. nginx: wiki:Bug:251985 (FIXED)

=== Init scripts without daemon(s) ===

==== No daemon, but detectable status ====
The following init scripts do not have an associated daemon, however, they do perform actions on the system which could be algorithmically checked. I'm noting some suggested items that could be checked in a 'status' action.

===== /etc/init.d/... =====

 1. apport - status should look at /proc/sys/kernel/core_pattern
 1. binfmt-support - status should check update-binfmts --display, perhaps
 1. checkfs.sh - status could show the time/date/results of the last check
 1. checkroot.sh - similar to checkfs.sh, perhaps?
 1. mountoverflowtmp - status could check the tmp mountpoint
 1. mythtv-status: wiki:Bug:251330 (Patch awaiting sponsorship), checks if mythtv-status has run successfully
 1. networking - status could check network connectivity
 1. pcmciautils - status could check lsmod for needed modules
 1. policykit - status could check directory existence and permissions
 1. rmnologin - status could check /var/lib/initscripts/nologin
 1. screen-cleanup - status could check /var/run/screen
 1. single - status could check if in single user mode or not
 1. skeleton - the skeleton init script itself should be enhanced to have a status action!
 1. urandom - status could check /dev/urandom


==== No daemon ====
The following init scripts do not have an associated deamon. On initial review of the code, a 'status' action for these scripts does not necessarily make sense. If you have an idea of a sensible status action, please note the suggestion and move the item to the list above (detectable status).

===== /etc/init.d/... =====

 1. acpi-support
 1. alsa-utils
 1. bootmisc.sh
 1. console-screen.sh
 1. console-setup
 1. dns-clean
 1. glibc.sh
 1. halt
 1. hostname.sh
 1. hotkey-setup
 1. hwclockfirst.sh
 1. hwclock.sh
 1. keyboard-setup
 1. killprocs
 1. loopback
 1. module-init-tools
 1. mountall-bootclean.sh
 1. mountall.sh
 1. mountdevsubfs.sh
 1. mountkernfs.sh
 1. mountnfs-bootclean.sh
 1. mountnfs.sh
 1. powernowd.early
 1. pppd-dns
 1. procps
 1. rc
 1. rc.local
 1. rcS
 1. readahead
 1. readahead-desktop
 1. reboot
 1. resolvconf
 1. sendsigs
 1. stop-bootlogd
 1. stop-bootlogd-single
 1. stop-readahead
 1. umountfs
 1. umountnfs.sh
 1. umountroot
 1. vbesave
 1. wpa-ifupdown
 1. xserver-xorg-input-wacom

== References ==
 1. http://lists.debian.org/debian-devel/2008/07/msg01031.html
 1. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490095
 1. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=483285
 1. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=291148
 1. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=208010
 1. http://packages.qa.debian.org/l/lsb.html
 1. https://wiki.ubuntu.com/OnnoBenschop/ubuntu-server/init.d-status

Background

The LSB suggests that init scripts provide a status action:

DustinKirkland worked with Debian to [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490095 provide a method],  status_of_proc() , in /lib/lsb/init-functions, in the [http://packages.qa.debian.org/l/lsb.html lsb-base] library package. This function is fully integrated in Intrepid as of [https://launchpad.net/ubuntu/+source/lsb lsb-3.2-14].

Adding status actions to init scripts

Numerous init scripts should be patched to call  status_of_proc()  and provide a status action. A simple recipe follows for adding such functionality.

Patch Checklist

When you encounter an init script that [https://wiki.ubuntu.com/InitScriptStatusActions#head-75448d0a482c28a007476b3be2394d9db3213662 lacks a status action]:

  1. Determine the source package
    •  dpkg -S /etc/init.d/FOO 

  2. Open a bug in Launchpad against the package
  3. Grab the source and build dependencies
    •  apt-get source FOO 

    •  sudo apt-get build-dep FOO 

  4. Locate the init script in the source tree, sometimes
    •  debian/*.init 

    •  debian/rc 

  5. Patch the source to
    • have the init script call status_of_proc()
    • have the init script add "status" to the usage statement
    • add a dependency in debian/control for lsb-base >= 3.2-14

    • add the changelog entry referencing your Launchpad bug, (LP: #999999)
  6. Assuming that you have the package installed, test your patched init script for the new functionality and regressions. Check that $? after the status calls are 0 on success, and non-zero on failure.
    •  sudo sh debian/FOO.init start 

      •   * Starting FOO      [ OK ] 

    •  sh debian/FOO.init status; echo $? 

      •   * FOO is running. 

    •  sudo sh debian/FOO.init stop 

      •   * Stopping FOO      [ OK ] 

    •  sh debian/FOO.init status; echo $? 

      •   * FOO is not running. 

    •  sudo sh debian/FOO.init start 

      •   * Starting FOO      [ OK ] 

  7. Build a source package
    •  debuild -S 

  8. Generate a patch
    •  debdiff 

  9. Compare your work to some of the other patches
  10. Add your patch to the Launchpad bug you filed, mark as Confirmed

  11. Subscribe kirkland, and (ubuntu-main-sponsors or ubuntu-universe-sponsors) as appropriate

  12. For bonus points, file a bug in Debian, and work the patch back upstream
    • Use Bugs/Debian/Usertagging
      • User: ubuntu-devel@lists.ubuntu.com

      • Usertags: origin-ubuntu ubuntu-patch intrepid

Init Scripts that Need a Status Action

The following is a crude list of init scripts in Intrepid that are lacking a "status" action. I say "crude" in that this list was generated on 2008-07-21 by installing the Intrepid Ubuntu (server, ubuntu-desktop, kubuntu-desktop, xubuntu-desktop), and grepping through /etc/init.d for scripts that lacked the string "status)". Please help improve this list by adding/removing init scripts to/from this list, and linking to a bug number. Please leave an informative note in this wiki page's changelog.

You can run  dpkg -S /etc/init.d/...  to determine the source package of any of the following scripts.

Init scripts with daemon(s)

/etc/init.d/...
  1. acpid: wiki:251681 (FIXED)

  2. at: wiki:247091 (FIXED)

  3. bind9: wiki:247084 (Patch submitted, awaiting main sponsorship)

  4. bip: wiki:251287 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492126 Debian #492126]

  5. bluetooth: wiki:251684 (FIXED)

  6. bootlogd
  7. brltty: wiki:251626 (FIXED)

  8. cron: wiki:201504 (FIXED)

  9. dbus wiki:252214 (Patch submitted, awaiting main sponsorship), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492541 Debian #492541]

  10. dhcdbd: wiki:251624 (FIXED)

  11. dovecot: wiki:247096 (FIXED)

  12. gdm: wiki:251375 (FIXED)

  13. hal: wiki:252350 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492625 Debian #492625]

  14. kdm
  15. mysql
  16. mysql-ndb
  17. mysql-ndb-mgm
  18. mythtv-backend wiki:251325 (Patch submitted, awaiting universe sponsorship)

  19. nis
  20. openvpn
  21. openssh: wiki:247103 (FIXED)

  22. portmap
  23. powernowd
  24. pulseaudio (Be careful with this one: the default for desktop installs is via session, not via this initscript.)
  25. rsync: wiki:251320 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492138 Debian #492138]

  26. samba: wiki:247087 (Patch submitted, awaiting main sponsorship)

  27. squid: wiki:251299 (FIXED), [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492131 Debian #492131]

  28. sysklogd: wiki:247106 (FIXED)

  29. system-tools-backends
  30. usplash
  31. winbind: wiki:247087 (Patch submitted, awaiting main sponsorship)

  32. lighttpd: wiki:251924 (FIXED)

  33. xinetd: wiki:251975 (FIXED)

  34. nginx: wiki:251985 (FIXED)

Init scripts without daemon(s)

No daemon, but detectable status

The following init scripts do not have an associated daemon, however, they do perform actions on the system which could be algorithmically checked. I'm noting some suggested items that could be checked in a 'status' action.

/etc/init.d/...
  1. apport - status should look at /proc/sys/kernel/core_pattern
  2. binfmt-support - status should check update-binfmts --display, perhaps
  3. checkfs.sh - status could show the time/date/results of the last check
  4. checkroot.sh - similar to checkfs.sh, perhaps?
  5. mountoverflowtmp - status could check the tmp mountpoint
  6. mythtv-status: wiki:251330 (Patch awaiting sponsorship), checks if mythtv-status has run successfully

  7. networking - status could check network connectivity
  8. pcmciautils - status could check lsmod for needed modules
  9. policykit - status could check directory existence and permissions
  10. rmnologin - status could check /var/lib/initscripts/nologin
  11. screen-cleanup - status could check /var/run/screen
  12. single - status could check if in single user mode or not
  13. skeleton - the skeleton init script itself should be enhanced to have a status action!
  14. urandom - status could check /dev/urandom

No daemon

The following init scripts do not have an associated deamon. On initial review of the code, a 'status' action for these scripts does not necessarily make sense. If you have an idea of a sensible status action, please note the suggestion and move the item to the list above (detectable status).

/etc/init.d/...
  1. acpi-support
  2. alsa-utils
  3. bootmisc.sh
  4. console-screen.sh
  5. console-setup
  6. dns-clean
  7. glibc.sh
  8. halt
  9. hostname.sh
  10. hotkey-setup
  11. hwclockfirst.sh
  12. hwclock.sh
  13. keyboard-setup
  14. killprocs
  15. loopback
  16. module-init-tools
  17. mountall-bootclean.sh
  18. mountall.sh
  19. mountdevsubfs.sh
  20. mountkernfs.sh
  21. mountnfs-bootclean.sh
  22. mountnfs.sh
  23. powernowd.early
  24. pppd-dns
  25. procps
  26. rc
  27. rc.local
  28. rcS
  29. readahead
  30. readahead-desktop
  31. reboot
  32. resolvconf
  33. sendsigs
  34. stop-bootlogd
  35. stop-bootlogd-single
  36. stop-readahead
  37. umountfs
  38. umountnfs.sh
  39. umountroot
  40. vbesave
  41. wpa-ifupdown
  42. xserver-xorg-input-wacom

References

  1. http://lists.debian.org/debian-devel/2008/07/msg01031.html

  2. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490095

  3. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=483285

  4. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=291148

  5. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=208010

  6. http://packages.qa.debian.org/l/lsb.html

  7. https://wiki.ubuntu.com/OnnoBenschop/ubuntu-server/init.d-status

InitScriptStatusActions (last edited 2009-11-29 13:27:58 by 77-21-62-108-dynip)