[yocto] [update-rc.d][PATCH V3] update-rc.d: support enable/disable options

Changqing Li changqing.li at windriver.com
Sun Jun 16 23:06:19 PDT 2019


ping

On 5/28/19 8:59 AM, Changqing Li wrote:
> ping
>
> On 4/30/19 2:56 PM, changqing.li at windriver.com wrote:
>> From: Changqing Li <changqing.li at windriver.com>
>>
>> Add support of enable/disable options, refer
>> https://manpages.debian.org/wheezy/sysv-rc/update-rc.d.8.en.html
>>
>> With support of these options, the usr can never change an existing
>> configuration even after upgrading a package. The program will only
>> install links if none are present, otherwise, it will keep
>> the previous configuration.
>>
>> preinst in update-rc.d.bbclass will delete all the links under
>> rcrunlevel.d, this behavior now conflicts with enable/disable
>> options. so remove preinst from the update-rc.d.bbclass
>>
>> [Yocto 12955]
>>
>> Signed-off-by: Changqing Li <changqing.li at 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
>
-- 
BRs

Sandy(Li Changqing)



More information about the yocto mailing list