[PATCH] fix version comparison

Michael_E_Brown at Dell.com Michael_E_Brown at Dell.com
Fri Apr 14 13:20:12 CDT 2006


Only one comment: Any way to get something more robust than an ASCII
sort version comparison?
--
Michael 

> -----Original Message-----
> From: dkms-devel-bounces at dell.com 
> [mailto:dkms-devel-bounces at dell.com] On Behalf Of Matt Domsch
> Sent: Friday, April 14, 2006 12:04 PM
> To: dkms-devel-Lists
> Subject: [PATCH] fix version comparison
> 
> Two things have bothered me for a while.
> 1) DKMS was *requiring* that modules have modinfo lines like:
> 
> version: 38.0 abcdef0123456
> 
> which correspond to both the version and srcversion fields.  
> If the srcversion field isn't present (as it isn't on RHEL4 < 
> U3), then it wouldn't bother doing any comparison on the 
> version field.  Presumably this was because the value in the 
> version field couldn't be trusted completely (which is kind 
> of strange).
> 
> 2) because of 1), the version check would fail on more recent kernels
>    that put the srcversion data into its own modinfo line (just as it
>    did for modules with no MODULE_VERSION() tag defined.
> 
> 
> Patch below addresses both concerns.  Please review.
> 
> Thanks,
> Matt
> 
> 
> --
> Matt Domsch
> Software Architect
> Dell Linux Solutions linux.dell.com & www.dell.com/linux 
> Linux on Dell mailing lists @ http://lists.us.dell.com
> 
> 
> --- dkms-2.0.11	Mon Apr  3 16:09:50 2006
> +++ dkms	Fri Apr 14 11:54:13 2006
> @@ -514,14 +514,33 @@ function check_version_sanity ()
>  	    local kernels_module=`find $lib_tree -name 
> ${dest_module_name[$count]}$module_suffix`
>  	    local kernels_ver_string=`modinfo $kernels_module | 
> grep "^version:"`
>  	    local kernels_ver_value=`echo $kernels_ver_string | 
> awk {'print $2'}`
> -	    local kernels_ver_checksum=`echo 
> $kernels_ver_string | awk {'print $3'}`
>  	    local 
> dkms_module="$dkms_tree/$module/$module_version/$1/$2/module/$
> {dest_module_name[$count]}$module_suffix"
>  	    local dkms_ver_string=`modinfo $dkms_module | grep 
> "^version:"`
>  	    local dkms_ver_value=`echo $dkms_ver_string | awk 
> {'print $2'}`
> -	    local dkms_ver_checksum=`echo $dkms_ver_string | 
> awk {'print $3'}`	    
> -	    if [ -n "$kernels_ver_checksum" ] && [ -n 
> "$dkms_ver_checksum" ]; then
> +
> +	    # there are 2 possible srcversion checksums
> +	    # one in the 'srcversion' tag alone (preferred)
> +	    # and one following the version field in the 
> 'version' tag (deprecated)
> +	    local kernels_ver_checksum=`modinfo $kernels_module 
> | awk /^srcversion:/ {print $2}`
> +	    local dkms_ver_checksum=`modinfo $dkms_module | awk 
> /^srcversion:/ {print $2}`
> +	    if [ -z "$kernels_ver_checksum" -a -z 
> "$dkms_ver_checksum" ]; then
> +		kernels_ver_checksum=`echo $kernels_ver_string 
> | awk {'print $3'}`
> +		dkms_ver_checksum=`echo $dkms_ver_string | awk 
> {'print $3'}`
> +	    fi
> +	    
> +	    if [ -n "$kernels_ver_checksum" -a -n 
> "$dkms_ver_checksum" -a
> +		    "$kernels_ver_checksum" == 
> "$dkms_ver_checksum" -a -z "$force" ]; then
> +		echo $"" >&2
> +		echo $"Good news! Module version 
> $dkms_ver_value for ${dest_module_name[$count]}$module_suffix" >&2
> +		echo $"exactly matches what is already found in 
> kernel $1." >&2
> +		echo $"DKMS will not replace this module." >&2
> +		echo $"You may override by specifying --force." >&2
> +		exit 101
> +	    fi
> +
> +	    if [ -n "$kernels_ver_value" -a -n "$dkms_ver_value" ]; then
>  		if [[ ! ( $(VER $dkms_ver_value) > \
> -			  $(VER $kernels_ver_value) ) && -z 
> "$force" ]]; then
> +		          $(VER $kernels_ver_value) ) && -z 
> "$force" ]]; then
>  		    echo $"" >&2
>  		    echo $"Error! Module version 
> $dkms_ver_value for ${dest_module_name[$count]}$module_suffix" >&2
>  		    echo $"is not newer than what is already 
> found in kernel $1 ($kernels_ver_value)." >&2
> 
> _______________________________________________
> DKMS-devel mailing list
> DKMS-devel at dell.com
> http://lists.us.dell.com/mailman/listinfo/dkms-devel
> 



More information about the DKMS-devel mailing list