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

Changqing Li changqing.li at windriver.com
Mon May 27 17:59:47 PDT 2019


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