diff options
author | Frans Meulenbroeks <fransmeulenbroeks@gmail.com> | 2010-11-20 21:24:30 +0100 |
---|---|---|
committer | Frans Meulenbroeks <fransmeulenbroeks@gmail.com> | 2010-11-22 18:31:22 +0100 |
commit | 24acf53f550b659f2666aa45a31b4d825ed8c999 (patch) | |
tree | b224d1ff446461fffe95148d7f16c9aa3e5fd8d5 /recipes/update-rc.d | |
parent | e4721e70afa802ff301fc0ac511fcea26561c173 (diff) | |
download | openembedded-24acf53f550b659f2666aa45a31b4d825ed8c999.tar.gz |
update-rc.d: make update-rc.d local
the recipe did not build any more as handhelds.org is gone.
Since this one is fairly crucial as lots of recipes depend on it
I decided to put the update-rc.d file in update-rc.d/ instead of
fetching it.
It has been decided (after discussion on irc with Philip Balister, the maintainer of
update-rc.d) to keep the code the same as the old upstream
version and not apply the patch to it.
While at it als renamed the files dir to update-rc.d
Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Acked-by: Philip Balister <philip@balister.org> (on irc)
Diffstat (limited to 'recipes/update-rc.d')
-rw-r--r-- | recipes/update-rc.d/update-rc.d/add-verbose.patch (renamed from recipes/update-rc.d/files/add-verbose.patch) | 0 | ||||
-rw-r--r-- | recipes/update-rc.d/update-rc.d/update-rc.d | 231 | ||||
-rw-r--r-- | recipes/update-rc.d/update-rc.d_0.7.bb | 7 |
3 files changed, 235 insertions, 3 deletions
diff --git a/recipes/update-rc.d/files/add-verbose.patch b/recipes/update-rc.d/update-rc.d/add-verbose.patch index 0f068308f6..0f068308f6 100644 --- a/recipes/update-rc.d/files/add-verbose.patch +++ b/recipes/update-rc.d/update-rc.d/add-verbose.patch diff --git a/recipes/update-rc.d/update-rc.d/update-rc.d b/recipes/update-rc.d/update-rc.d/update-rc.d new file mode 100644 index 0000000000..ec50d156d9 --- /dev/null +++ b/recipes/update-rc.d/update-rc.d/update-rc.d @@ -0,0 +1,231 @@ +#!/bin/sh +# +# update-rc.d Update the links in /etc/rc[0-9S].d/ +# +# (c) 2003, 2004 Phil Blundell <pb@handhelds.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +initd="/etc/init.d" +etcd="/etc/rc" +notreally=0 +force=0 +dostart=0 + +usage() +{ + cat >&2 <<EOF +usage: update-rc.d [-n] [-f] [-r <root>] <basename> remove + update-rc.d [-n] [-r <root>] [-s] <basename> defaults [NN | sNN kNN] + update-rc.d [-n] [-r <root>] [-s] <basename> start|stop NN runlvl [runlvl] [...] . + -n: not really + -f: force + -r: alternate root path (default is /) + -s: invoke start methods if appropriate to current runlevel +EOF +} + +checklinks() +{ + local i dn fn remove=0 + if [ "x$1" = "xremove" ]; then + echo " Removing any system startup links for $bn ..." + remove=1 + fi + + for i in 0 1 2 3 4 5 6 7 8 9 S; do + dn="${etcd}${i}.d" + if [ ! -d $dn ]; then + continue; + fi + for f in ${dn}/[SK]??${bn}; do + if [ -L $f ]; then + if [ $remove -eq 0 ]; then + return 1 + fi + echo " $f" + if [ $notreally -eq 1 ]; then + continue + fi + rm $f + fi + done + done + + return 0 +} + +dolink() +{ + startstop=$1 + lev=`echo $2 | cut -d/ -f1` + nn=`echo $2 | cut -d/ -f2` + fn="${etcd}${lev}.d/${startstop}${nn}${bn}" + echo " $fn -> ../init.d/$bn" + if [ $notreally -eq 0 ]; then + mkdir -p `dirname $fn` + ln -s ../init.d/$bn $fn + fi + if [ $dostart -eq 1 ] && [ $startstop = "S" ] && [ $lev = $RUNLEVEL ]; then + $fn start || true + fi +} + +makelinks() +{ + if ! checklinks; then + echo " System startup links for $initd/$bn already exist." + if [ $dostart -eq 1 ] && [ $notreally -eq 0 ] && [ -L ${etcd}${RUNLEVEL}.d/S??${bn} ]; then + ${etcd}${RUNLEVEL}.d/S??${bn} restart || true + fi + exit 0 + fi + + echo " Adding system startup for $initd/$bn ..." + + for i in $startlinks; do + dolink S $i + done + for i in $stoplinks; do + dolink K $i + done +} + +while [ $# -gt 0 ]; do + case $1 in + -n) notreally=1 + shift + continue + ;; + -f) force=1 + shift + continue + ;; + -s) dostart=1 + shift + continue + ;; + -r) shift + root=$1 + initd="${root}${initd}" + etcd="${root}${etcd}" + shift + ;; + -h | --help) + usage + exit 0 + ;; + -*) + usage + exit 1 + ;; + *) + break + ;; + esac +done + +if [ $# -lt 2 ]; then + usage + exit 1 +fi + +bn=$1 +shift + +if [ $1 != "remove" ]; then + if [ ! -f "$initd/$bn" ]; then + echo "update-rc.d: $initd/$bn: file does not exist" >&2 + exit 1 + fi +else + if [ -f "$initd/$bn" ]; then + if [ $force -eq 1 ]; then + echo "update-rc.d: $initd/$bn exists during rc.d purge (continuing)" >&2 + else + echo "update-rc.d: $initd/$bn exists during rc.d purge (use -f to force)" >&2 + exit 1 + fi + fi +fi + +if [ $dostart -eq 1 ]; then + #RUNLEVEL=`sed 's/.*\[\(.*\)\]/\1/' < /proc/1/cmdline` + RUNLEVEL=`runlevel | cut -d" " -f2` + if [ "x$RUNLEVEL" = "x" ]; then + echo "Unable to determine current runlevel" >&2 + exit 1 + fi +fi + +case $1 in + remove) + checklinks "remove" + ;; + + defaults) + if [ $# -gt 3 ]; then + echo "defaults takes only one or two arguments" >&2 + usage + exit 1 + fi + start=20 + stop=20 + if [ $# -gt 1 ]; then + start=$2 + stop=$2 + fi + if [ $# -gt 2 ]; then + stop=$3 + fi + start=`printf %02d $start` + stop=`printf %02d $stop` + stoplinks="0/$stop 1/$stop 6/$stop" + startlinks="2/$start 3/$start 4/$start 5/$start" + makelinks + ;; + + start | stop) + while [ $# -gt 0 ]; do + if [ $1 = "start" ]; then + letter=S + elif [ $1 = "stop" ]; then + letter=K + else + echo "expected start or stop" >&2 + usage + exit 1 + fi + shift + NN=`printf %02d $1` + shift + while [ "x$1" != "x." ]; do + if [ $# -eq 0 ]; then + echo "action with list of runlevels not terminated by \`.'" >&2 + exit 1 + fi + level=$1 + shift + case $letter in + S) startlinks="$startlinks $level/$NN" ;; + K) stoplinks="$stoplinks $level/$NN" ;; + esac + done + shift + done + makelinks + ;; + + *) + usage + exit 1 + ;; +esac diff --git a/recipes/update-rc.d/update-rc.d_0.7.bb b/recipes/update-rc.d/update-rc.d_0.7.bb index b36b8cae95..43ebd04f36 100644 --- a/recipes/update-rc.d/update-rc.d_0.7.bb +++ b/recipes/update-rc.d/update-rc.d_0.7.bb @@ -2,13 +2,14 @@ SECTION = "base" PRIORITY = "standard" DESCRIPTION = "Manage symlinks in /etc/rcN.d" LICENSE = "GPLv2+" -S = "${WORKDIR}/update-rc.d" +S = "${WORKDIR}" +# S = "${WORKDIR}/update-rc.d" INHIBIT_DEFAULT_DEPS = "1" -PR = "r1" +PR = "r2" BBCLASSEXTEND = "native" -SRC_URI = "${HANDHELDS_CVS};module=apps/update-rc.d;tag=r0_7 \ +SRC_URI = "file://update-rc.d \ file://add-verbose.patch" PACKAGE_ARCH = "all" |