| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/bin/sh
- #
- # Usage:
- # update-rc.d <basename> remove
- # update-rc.d <basename> [options]
- # Options are:
- # start <codenumber> <runlevel> <runlevel> <runlevel> .
- # stop <codenumber> <runlevel> <runlevel> <runlevel> .
- # defaults [<codenumber> | <startcode> <stopcode>]
- # (means start <startcode> 2 3 4 5
- # as well as stop <stopcode> 0 1 2 3 4 5 6
- # <codenumber> defaults to 20)
- set -e
- cd /etc
- initd='init.d'
- usage () { echo >&2 "\
- update-rc.d: error: $1.
- usage: update-rc.d <basename> remove
- update-rc.d <basename> defaults [<cn> | <scn> <kcn>]
- update-rc.d <basename> start|stop <cn> <r> <r> . ..."; exit 1 }
- getinode () {
- inode="`ls -Li1 \"$1\" | sed -e 's/^ *//; s/ .*//'`"
- }
- if [ $# -lt 2 ]; then usage "too few arguments"; fi
- bn="$1"; shift
- if [ xremove = "x$1" ]; then
- if [ $# != 1 ]; then usage "remove must be only action"; fi
- if [ -f "$initd/$bn" ]; then
- echo >&2 "update-rc.d: error: /etc/$initd/$bn exists during rc.d purge."
- exit 1
- fi
- echo " Removing any system startup links to /etc/$initd/$bn ..."
- trap 'rm -f "$initd/$bn"' 0
- touch "$initd/$bn"
- getinode "$initd/$bn"
- own="$inode"
- for f in rc?.d/[SK]*; do
- getinode "$f"
- if [ "x$inode" = "x$own" ]; then
- rm "$f";
- echo " $f"
- fi
- done
- exit 0
- elif [ xdefaults = "x$1" ]; then
- if [ $# = 1 ]; then sn=20; kn=20;
- elif [ $# = 2 ]; then sn="$2"; kn="$2";
- elif [ $# = 3 ]; then sn="$2"; kn="$3";
- else usage "defaults takes only one or two codenumbers"; fi
- set start "$sn" 2 3 4 5 . stop "$kn" 0 1 6 .
- elif ! [ xstart = "x$1" -o xstop = "x$1" ]; then
- usage "unknown mode or add action $1"
- fi
- if ! [ -f "$initd/$bn" ]; then
- echo >&2 "update-rc.d: warning /etc/$initd/$bn doesn't exist during rc.d setup."
- exit 0
- fi
- getinode "$initd/$bn"
- own="$inode"
- for f in rc?.d/[SK]*; do
- getinode "$f"
- if [ "x$inode" = "x$own" ]; then
- echo " System startup links pointing to /etc/$initd/$bn already exist."
- exit 0
- fi
- done
- echo " Adding system startup links pointing to /etc/$initd/$bn ..."
- while [ $# -ge 3 ]; do
- if [ xstart = "x$1" ]; then ks=S
- elif [ xstop = "x$1" ]; then ks=K
- else usage "unknown action $1"; fi
- number="$2"
- shift; shift
- while [ $# -ge 1 ]; do
- case "$1" in
- .)
- break
- ;;
- ?)
- ln -s "../$initd/$bn" "rc$1.d/$ks$number$bn"
- echo " rc$1.d/$ks$number$bn -> ../$initd/$bn"
- shift
- continue
- ;;
- esac
- usage 'runlevel is more than one character (forgotten . ?)'
- done
- shift
- done
- if [ $# != 0 ]; then
- usage "surplus arguments, but not enough for an add action: $*"
- fi
- exit 0
|