[Pkg-dkms-commits] [SCM] Dynamic Kernel Module Support branch, master, updated. debian/2.1.0.1-2-3-g40941ad

Giuseppe Iuculano iuculano at debian.org
Sun Dec 6 17:30:48 UTC 2009


The following commit has been merged in the master branch:
commit 40941adc1de51f196e038c4f2a97ca7702284c3a
Author: Giuseppe Iuculano <iuculano at debian.org>
Date:   Sun Dec 6 18:27:12 2009 +0100

    dkms_autoinstall: optimize init script (LP: #484386)
    
    Thanks: Steve Langasek
    * dkms_autoinstall: optimize with a single find call instead of multiple
      loops with ls.
    * dkms_autoinstall: port to POSIX sh and drop the /bin/bash from the
      shebang.
    * dkms_autoinstall: drop localization of the usage message - this is
      inconsistent with all other init scripts on the system.
    * dkms_autoinstall: use case instead of grep for string matching

diff --git a/debian/patches/04_optimize_init.patch b/debian/patches/04_optimize_init.patch
new file mode 100644
index 0000000..278b4c6
--- /dev/null
+++ b/debian/patches/04_optimize_init.patch
@@ -0,0 +1,199 @@
+optimize with a single find call instead of multiple
+loops with ls.
+port to POSIX sh and drop the /bin/bash from the
+shebang.
+drop localization of the usage message - this is
+inconsistent with all other init scripts on the system.
+use case instead of grep for string matching
+LP: #484386
+--- a/dkms_autoinstaller
++++ b/dkms_autoinstaller
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # dkms_autoinstaller 		A service to automatically install DKMS modules
+ # 				for new kernels.
+@@ -25,24 +25,24 @@ fi
+ 
+ test -f /usr/sbin/dkms || exit 0
+ 
+-function invoke_command ()
++invoke_command ()
+ {
+     local exitval=0
+     local exitval_file=`mktemp /tmp/dkms.XXXXXX`
+-    [ -z "$verbose" ] && echo -en "$2..." >>$output_loc || echo -e "$1" >>$output_loc
+-    if [ "$3" == background ] && [ -z "$verbose" ]; then
++    [ -z "$verbose" ] && echo -n "$2..." >>$output_loc || echo "$1" >>$output_loc
++    if [ "$3" = background ] && [ -z "$verbose" ]; then
+ 	(eval $1 >/dev/null 2>&1; echo "exitval=$?" >> "$exitval_file") &
+ 	while [ -e "$exitval_file" ] && ! [ -s "$exitval_file" ]; do
+ 	    sleep 3
+-	    echo -en "." >>$output_loc
++	    echo -n "." >>$output_loc
+ 	done
+ 	. "$exitval_file"
+     else
+ 	eval $1; exitval=$?
+     fi
+-    [ $exitval -gt 0 ] && echo -en "(bad exit status: $exitval)" >>$output_loc
++    [ $exitval -gt 0 ] && echo -n "(bad exit status: $exitval)" >>$output_loc
+     rm -f "$exitval_file"
+-    echo -en "\n" >>$output_loc
++    echo >>$output_loc
+     return $exitval
+ }
+ 
+@@ -52,7 +52,7 @@ output_loc="/var/log/dkms_autoinstaller"
+ [ -n "$2" ] && kernel=$2 && output_loc="/dev/stdout" || kernel=`uname -r`
+ kernelver_rpm=`rpm -qf "/lib/modules/$kernel" 2>/dev/null | grep -v "not owned by any package" | grep kernel | head -1`
+ if ! arch=`rpm -q --queryformat "%{ARCH}" "$kernelver_rpm" 2>/dev/null`; then
+-    [ `uname -m` == "x86_64" ] && [ `cat /proc/cpuinfo | grep -c "Intel"` -gt 0 ] && [ `ls $install_tree/$kernel/build/configs 2>/dev/null | grep -c "ia32e"` -gt 0 ] && arch="ia32e" || arch=`uname -m`
++    [ `uname -m` = "x86_64" ] && [ `cat /proc/cpuinfo | grep -c "Intel"` -gt 0 ] && [ `ls $install_tree/$kernel/build/configs 2>/dev/null | grep -c "ia32e"` -gt 0 ] && arch="ia32e" || arch=`uname -m`
+ fi
+ kernel_preparation_done=""
+ dkms_tree="/var/lib/dkms"
+@@ -68,75 +68,64 @@ case "$1" in
+ 	fi
+         echo "" >>$output_loc
+ 
+-	for filename in `ls "$dkms_tree"`; do
+-	    if [ -d "$dkms_tree/$filename" ] && ! [ -h "$dkms_tree/$filename" ]; then
+-		modules_needing_status="$modules_needing_status $filename"
+-	    fi
+-	done
+-
+-        # Iterate over the modules
+-	for module_in_tree in $modules_needing_status; do
+-
+-	    # Make sure its in the tree
+-	    if [ -d "$dkms_tree/$module_in_tree" ]; then
+-
+-  	        # Determine which versions to show status for
++		# Determine which versions to show status for
+ 		do_autoinstall=""
+ 		version_count=0
+ 		already_installed=""
+ 		already_installed_version=""
+-		for filename in `ls "$dkms_tree/$module_in_tree"`; do
+-		    if [ -d "$dkms_tree/$module_in_tree/$filename" ] && ! [ -h "$dkms_tree/$module_in_tree/$filename" ] && [ "$filename" != "original_module" ]; then
++		for filename in $(find "$dkms_tree" -maxdepth 2 -mindepth 2 -type d -a -not -name original_module); do
+ 			version_count=$(($version_count + 1))
+-			version_in_tree="$filename"
++			version_in_tree="$(basename $filename)"
+ 
+-		        # Source in its dkms.conf to see if we should autoinstall
++			# Source in its dkms.conf to see if we should autoinstall
+ 			AUTOINSTALL=""
+-			if [ -f $dkms_tree/$module_in_tree/$version_in_tree/source/dkms.conf ]; then
+-				. $dkms_tree/$module_in_tree/$version_in_tree/source/dkms.conf
++			if [ -f $filename/source/dkms.conf ]; then
++				. $filename/source/dkms.conf
+ 			else
+ 				current_state="broken"
+ 				continue
+ 			fi
+-			[ `echo "$AUTOINSTALL" | grep -ic "^y"` -gt 0 ] && do_autoinstall="yes"
++			case $AUTOINSTALL in
++				*y*)
++					do_autoinstall="yes"
++					;;
++			esac
+ 
+ 			# Get the current state
+ 			# a mod can be both built and installed-weak (stupid, but could be)
+ 			# but installed-weak comes last, so use tail
+-			current_state=`dkms status -m $module_in_tree -v $version_in_tree -k $kernel -a $arch 2>/dev/null | awk {'print $5'} | tail -n 1`
+-			[ "$current_state" == "installed" -o "$current_state" == "installed-weak" ] && already_installed="true" && already_installed_version=$version_in_tree
+-		    fi
+-		done
++			current_state=`dkms status -m $PACKAGE_NAME -v $version_in_tree -k $kernel -a $arch 2>/dev/null | awk {'print $5'} | tail -n 1`
++			[ "$current_state" = "installed" -o "$current_state" = "installed-weak" ] && already_installed="true" && already_installed_version=$version_in_tree
+ 
+                 if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+-                    log_action_begin_msg " $module_in_tree ($version_in_tree)"
++                    log_action_begin_msg " $PACKAGE_NAME ($version_in_tree)"
+                 fi                    
+ 
+ 		# Based on what we know, either do it or not
+ 		if [ "$current_state" = "broken" ]; then
+-                    echo "$module_in_tree ($version_in_tree): Unable to locate $dkms_tree/$module_in_tree/$version_in_tree/source/dkms.conf" >>$output_loc
+-                    echo -e "\tDKMS tree must be manually fixed." >>$output_loc
++                    echo "$PACKAGE_NAME ($version_in_tree): Unable to locate $dkms_tree/$module_in_tree/$version_in_tree/source/dkms.conf" >>$output_loc
++                    printf "\tDKMS tree must be manually fixed.\n" >>$output_loc
+                     if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+                         log_action_end_msg 1
+                     fi
+                     continue
+ 		elif [ -n "$already_installed" ]; then
+-		    echo "$module_in_tree ($already_installed_version): Already installed on this kernel." >>$output_loc
++		    echo "$PACKAGE_NAME ($already_installed_version): Already installed on this kernel." >>$output_loc
+                     if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+                         log_action_end_msg 0
+                     fi
+ 		elif [ -z "$do_autoinstall" ]; then
+-		    echo "$module_in_tree ($version_in_tree): AUTOINSTALL not set in its dkms.conf." >>$output_loc
++		    echo "$PACKAGE_NAME ($version_in_tree): AUTOINSTALL not set in its dkms.conf." >>$output_loc
+                     if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+                         log_action_end_msg 0
+                     fi
+ 		elif [ -n "$do_autoinstall" ] && [ "$version_count" -gt 1 ]; then
+-		    echo "$module_in_tree: Multiple versions in DKMS. Unsure what to do. Resolve manually." >>$output_loc
++		    echo "$PACKAGE_NAME: Multiple versions in DKMS. Unsure what to do. Resolve manually." >>$output_loc
+                     if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+                         log_action_end_msg 1
+                     fi
+ 		else
+-		    echo "$module_in_tree ($version_in_tree): Installing module." >>$output_loc
++		    echo "$PACKAGE_NAME ($version_in_tree): Installing module." >>$output_loc
+ 		    if [ "$current_state" != "built" ] && ! [ -e /lib/modules/$kernel/build/include ]; then
+ 			echo "  Kernel headers for $kernel are not installed.  Cannot install this module." >>$output_loc
+ 			echo "  Try installing linux-headers-$kernel or equivalent." >>$output_loc
+@@ -144,15 +133,15 @@ case "$1" in
+ 		    elif [ "$current_state" != "built" ] && [ -e /lib/modules/$kernel/build/include ]; then
+ 			return_status=""
+ 			if [ -z "$kernel_preparation_done" ]; then
+-			    invoke_command "dkms build -m $module_in_tree -v $version_in_tree -k $kernel -a $arch -q --no-clean-kernel >>$output_loc" "." background
++			    invoke_command "dkms build -m $PACKAGE_NAME -v $version_in_tree -k $kernel -a $arch -q --no-clean-kernel >>$output_loc" "." background
+ 			    return_status="$?"
+ 			    kernel_preparation_done="true"
+ 			else
+-			    invoke_command "dkms build -m $module_in_tree -v $version_in_tree -k $kernel -a $arch --no-prepare-kernel --no-clean-kernel -q >>$output_loc" "." background
++			    invoke_command "dkms build -m $PACKAGE_NAME -v $version_in_tree -k $kernel -a $arch --no-prepare-kernel --no-clean-kernel -q >>$output_loc" "." background
+ 			    return_status="$?"
+ 			fi
+ 			if [ "$return_status" -eq 0 ]; then
+-			    invoke_command "dkms install -m $module_in_tree -v $version_in_tree -k $kernel -a $arch -q >>$output_loc" "." background
++			    invoke_command "dkms install -m $PACKAGE_NAME -v $version_in_tree -k $kernel -a $arch -q >>$output_loc" "." background
+                             if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+                                 log_action_end_msg 0
+                             else
+@@ -167,7 +156,7 @@ case "$1" in
+                             fi
+ 			fi
+ 		    else
+-			invoke_command "dkms install -m $module_in_tree -v $version_in_tree -k $kernel -a $arch -q >>$output_loc" "." background
++			invoke_command "dkms install -m $PACKAGE_NAME -v $version_in_tree -k $kernel -a $arch -q >>$output_loc" "." background
+ 			return_status=$?
+ 			if [ "$return_status" -eq 101 ]; then
+ 			    echo "  A newer module version than this already exists in this kernel." >>$output_loc
+@@ -176,8 +165,7 @@ case "$1" in
+ 			    echo "  Installation failed!" >>$output_loc
+ 			fi
+ 		    fi
+-  		fi
+-	    fi
++		fi
+ 	done
+         if [ -z "$modules_needing_status" ]; then
+             if [ ! -z "$DEBIAN_STYLE_LOGGING" ]; then
+@@ -203,7 +191,7 @@ case "$1" in
+ 	exit 0
+ 	;;
+   *)
+-	echo $"Usage: $0 {start|stop}"
++	echo "Usage: $0 {start|stop}"
+ esac
+ 
+ exit 0
diff --git a/debian/patches/series b/debian/patches/series
index be4b67a..721d082 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
 01_init.patch
 02-improve_error_message.patch
 03_nobody.patch
+04_optimize_init.patch

-- 
Dynamic Kernel Module Support



More information about the Pkg-dkms-commits mailing list