[PATCH] dkms: don't move /etc/sysconfig/kernel/INITRD_MODULES= entries on add
Matt Domsch
Matt_Domsch at dell.com
Tue Mar 28 15:47:49 CST 2006
The problem is when you already have a megaraid_sas dkms rpm installed
and configured with the megaraid_sas driver at the begining of the
INITRD_MODULES line. If you download and install a newer version of
the megaraid_sas dkms RPM, the RPM removes the megaraid_sas driver
from the begining of the INITRD_MODULES line and moves it to the end
of the line before running mkinitrd. Upon reboot you will have a
kernel panic (the modules are loaded in the wrong order).
Proposed patch leaves modules already present in the INITRD_MODULES
list in place. If not already in INITRD_MODULES, add them to the end
of the INITRD_MODULES list.
Please review.
-Matt
--- /usr/sbin/dkms Thu Mar 16 16:05:02 2006
+++ dkms Tue Mar 28 15:16:00 2006
@@ -652,20 +652,33 @@ function moduleconfig_remove ()
rm -rf $temp_dir_name
}
+# Does string word exist as a word in string list?
+# returns 0 if word present, 1 if word not present
+function is_word_in_list ()
+{
+ for l in $2; do
+ [ "$1" = "${l}" ] && return 0
+ done
+ return 1
+}
+
function etc_sysconfig_kernel_modify ()
{
# Make a temp directory to store files
local temp_dir_name=`mktemp -d $tmp_location/dkms.XXXXXX`
if [ -e "/etc/sysconfig/kernel" ] && [ -n "$remake_initrd" ]; then
-
# Make /etc/sysconfig/kernel changes as necessary
if [ "$1" == "add" ]; then
- etc_sysconfig_kernel_modify "delete"
+ unset INITRD_MODULES
+ eval `grep ^INITRD_MODULES= /etc/sysconfig/kernel`
for module_name_after in "${dest_module_name[@]}"; do
- sed -e "s/INITRD_MODULES=\"\(.*\)\"/INITRD_MODULES=\"\1 $module_name_after\"/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
- mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
+ if ! is_word_in_list "${module_name_after}" "${INITRD_MODULES}"; then
+ sed -e "s/INITRD_MODULES=\"\(.*\)\"/INITRD_MODULES=\"\1 $module_name_after\"/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
+ mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
+ fi
done
+ unset INITRD_MODULES
# Remove /etc/sysconfig/kernel entries
elif [ "$1" == "delete" ]; then
More information about the DKMS-devel
mailing list