From: Changqing Li <changqing...@windriver.com>

Add support of enable/disable function, so that user can keep
previous config like disable one service even after upgrade package.

this patch need to work with oe-core patch
[update-rc.d.bbclass: remove preinst and remove -f for postinst]

[Yocto 12955]

Signed-off-by: Changqing Li <changqing...@windriver.com>
---
 update-rc.d | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/update-rc.d b/update-rc.d
index e07cf85..a7fb7bc 100644
--- a/update-rc.d
+++ b/update-rc.d
@@ -27,6 +27,7 @@ usage()
 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] [...] .
+       update-rc.d [-n] [-r <root>] [-s] <basename> enable|disable [S|2|3|4|5]
                -n: not really
                -f: force
                -v: verbose
@@ -101,6 +102,53 @@ makelinks()
        done
 }
 
+# function to disable/enable init script link of one run level
+# $1 should be K/S, means to disable/enable
+# $2 means which run level to disable/enable 
+renamelink()
+{
+       local oldstartstop newstartstop lev oldnn newnn
+       if [ "x$1" = "xS" ]; then
+               oldstartstop="K"
+               newstartstop="S"
+       else
+               oldstartstop="S"
+               newstartstop="K"
+       fi
+
+       lev=$2
+       # modifies existing runlevel links for the script /etc/init.d/name by 
renaming start links to stop link
+        # or stop link to start link with a sequence number equal to the 
difference of 100 minus the original sequence number.
+       if ls ${etcd}${lev}.d/${oldstartstop}*${bn} >/dev/null 2>&1; then
+               oldnn=`basename ${etcd}${lev}.d/${oldstartstop}*${bn}|cut -c2-3`
+               newnn=$[100-$oldnn]
+               [ $verbose -eq 1 ] && echo "rename 
${etcd}${lev}.d/${oldstartstop}${oldnn}${bn} -> 
${etcd}${lev}.d/${newstartstop}${newnn}${bn}"
+               if [ $notreally -eq 0 ];then
+                       mv ${etcd}${lev}.d/${oldstartstop}${oldnn}${bn} 
${etcd}${lev}.d/${newstartstop}${newnn}${bn}
+               fi
+               if [ $dostart -eq 1 ] && [ $newstartstop = "S" ] && [ $lev = 
$RUNLEVEL ]; then
+                       $fn start || true
+               fi
+       fi
+
+}
+
+# function to disable/enable init script link
+# $1 should be K/S, means to disable/enable
+# $2 run level [S|2|3|4|5], optional, If no start runlevel is 
+# specified after the disable or enable keywords 
+# the script will attempt to modify links in all start runlevels
+renamelinks()
+{
+       if [ $# -eq 2 ]; then
+               renamelink $1 $2
+       else
+               for i in 2 3 4 5 S; do
+                       renamelink $1 $i
+               done
+       fi
+}
+
 while [ $# -gt 0 ]; do
        case $1 in
                -n)     notreally=1
@@ -221,6 +269,13 @@ case $1 in
                ;;
 
        start | stop)
+               if [ $# -lt 4 ]
+               then
+                       echo "Not enough arguments"
+                       usage
+                       exit 1
+               fi
+
                while [ $# -gt 0 ]; do
                        if [ $1 = "start" ]; then
                                letter=S
@@ -251,6 +306,32 @@ case $1 in
                makelinks
                ;;
 
+       enable | disable)
+               if [ $1 = "enable" ]; then
+                       letter=S
+               elif [ $1 = "disable" ]; then
+                       letter=K
+               else
+                       usage
+                       exit 1
+               fi
+               shift
+               # 
+               if [ $# -gt 0 ]
+               then
+                       case $1 in
+                               S|2|3|4|5)
+                                       renamelinks $letter $1
+                                       ;;
+                               *)
+                                       usage
+                                       exit 1
+                                       ;;
+                       esac
+               else
+                       renamelinks $letter
+               fi
+               ;;
        *)
                usage
                exit 1
-- 
2.7.4

-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to