rpms/module-init-tools/devel module-init-tools.spec, 1.31, 1.32 weak-modules, 1.5, 1.6

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Tue Aug 1 05:44:09 UTC 2006


Author: jcm

Update of /cvs/dist/rpms/module-init-tools/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv32297

Modified Files:
	module-init-tools.spec weak-modules 
Log Message:
don't use RPM for deps. I was wrong.



Index: module-init-tools.spec
===================================================================
RCS file: /cvs/dist/rpms/module-init-tools/devel/module-init-tools.spec,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- module-init-tools.spec	31 Jul 2006 01:53:30 -0000	1.31
+++ module-init-tools.spec	1 Aug 2006 05:44:05 -0000	1.32
@@ -2,7 +2,7 @@
 Summary: Kernel module management utilities.
 Name: module-init-tools
 Version: 3.3
-Release: 0.pre1.4.6
+Release: 0.pre1.4.7
 License: GPL
 Group: System Environment/Kernel
 Source: http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-%{version}%{preversion}.tar.bz2
@@ -98,6 +98,9 @@
 %ghost %config %verify(not md5 size mtime) /etc/modprobe.conf
 
 %changelog
+* Tue Aug  1 2006 Jon Masters <jcm at redhat.com> - 3.3-0.pre1.4.7
+- Change dependency calculation in weak-modules so it doesn't use RPM.
+
 * Sun Jul 30 2006 Jon Masters <jcm at redhat.com> - 3.3-0.pre1.4.6
 - Don't call depmod on removing a kernel.
 - Warn rather than exit if we can't process weak-updates on new kernel


Index: weak-modules
===================================================================
RCS file: /cvs/dist/rpms/module-init-tools/devel/weak-modules,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- weak-modules	31 Jul 2006 01:53:30 -0000	1.5
+++ weak-modules	1 Aug 2006 05:44:05 -0000	1.6
@@ -5,15 +5,15 @@
 # Author: Jon Masters <jcm at redhat.com>
 #
 # When we add and remove kernels from the system, we need to ensure that we
-# keep the symbolic links in /lib/modules up to date. This script drives RPM
-# to find out which driver updates are compatible with installed kernels.
+# keep the symbolic links in /lib/modules up to date. This script magically
+# checks the ABI compatibility of weak-updates and symlinks as appropriate.
 #
 # This software may be freely redistributed under the terms of the GNU
 # General Public License (GPL).
 
 __author__ = "Jon Masters <jcm at redhat.com>"
-__version__ = "1.0"
-__date__ = "2006/07/30 08:00:00"
+__version__ = "2.0"
+__date__ = "2006/08/01 06:30:00"
 __copyright__ = "Copyright (C) 2006 Red Hat, Inc"
 __license__ = "GPL"
 
@@ -91,64 +91,52 @@
 
 		# Store the module version in a dictionary.
 		modules[module] = {	"kver": kver,
-					"package": "",
 					"kabireq": []
 					}
 
-def module_kabideps(modules):
+def module_kabi(modules):
 	"""Calculate the kabideps for a set of modules"""
 
 	for module in modules:
-		pinfo = os.popen("rpm -q --whatprovides " + module)
-		in_line = pinfo.readline()
-		pinfo.close()
-		if in_line == "":
-			print "Cannot find installed package for module: " \
-				+ module
-			sys.exit(1)
-		package = (string.split(in_line))[0]
-
-		# Store the module package in a dictionary.
-		modules[module]["package"] = package
-
-		pinfo = os.popen("rpm -q --requires " + package)
-		p = re.compile('^kernel\(([^\)]*)\) = (.*)$')
+		minfo = os.popen("/sbin/modprobe --dump-modversions "+module)
 		while true:
-			in_line = (string.strip(pinfo.readline()))
+			in_line = minfo.readline()
 			if in_line == "":
 				break
-			m = p.match(in_line)
-			if m:
-				modules[module]["kabireq"].append(in_line)
-		pinfo.close()
+			symver,symbol = string.split(in_line)
+			kabireq=symbol+"="+symver
+			modules[module]["kabireq"].append(kabireq)
+		minfo.close()
 
-def kernel_kabideps(kernels):
+def kernel_kabi(kernels):
 	"""For each installed kernel, determine the full set of kABI deps for
 	   that kernel and store in a giant dictionary hash."""
 
-	kinfo = os.popen("rpm -q kernel")
+	kinfo = os.popen("ls /lib/modules")
 	while true:
-		in_line = (string.strip(kinfo.readline()))
-		if in_line == "":
+		kernel = (string.strip(kinfo.readline()))
+		if kernel == "":
 			break
-		
-		kernel=in_line
-		kernelver=re.sub("kernel-","",in_line)
 
-		kdeps = os.popen("rpm -q --provides " + kernel)
+		symvers="/boot/symvers-"+kernel+".gz"
+		if not os.path.isfile(symvers):
+			# That kernel is not actually installed
+			continue
 
-		p = re.compile('^kernel\(([^\)]*)\) = (.*)$')
+		kdeps = os.popen("zcat "+symvers)
+		p = re.compile('^(0x[0-9a-f]+)\t([0-9a-zA-Z_]+)\t.*$')
 		while true:
-			in_line = (string.strip(kdeps.readline()))
+			in_line = kdeps.readline()
 			if in_line == "":
 				break
 			m = p.match(in_line)
+
 			if m:
-				kabi=in_line
-				if kernels.has_key(kernelver):
-					kernels[kernelver].append([kabi])
+				kabi=m.group(2)+"="+m.group(1)
+				if kernels.has_key(kernel):
+					kernels[kernel].append([kabi])
 				else:
-					kernels[kernelver] = [[kabi]]
+					kernels[kernel] = [[kabi]]
 
 		kdeps.close()
 	kinfo.close()
@@ -181,7 +169,6 @@
 
 			if all_matched:
 				# All kABI deps are good
-
 				if compatibles.has_key(kernel):
 					compatibles[kernel].append(module)
 				else:
@@ -216,8 +203,8 @@
 	compatibles={}
 
 	read_modules(modules)
-	module_kabideps(modules)
-	kernel_kabideps(kernels)
+	module_kabi(modules)
+	kernel_kabi(kernels)
 	check_compatibility(modules,kernels,compatibles)
 
 	#debug
@@ -236,7 +223,7 @@
 			if not m:
 				print "Non-standard module location"
 				sys.exit(1)
-			mod_kern=m.group(1)
+			mod_kern=modules[modfile]["kver"]
 			weak_dir="/lib/modules/" + kernel \
 				+ "/weak-updates/" + m.group(2)
 			weak_link=weak_dir+"/"+m.group(3)
@@ -261,7 +248,7 @@
 	kernels = {}
 
 	read_modules(modules)
-	kernel_kabideps(kernels)
+	kernel_kabi(kernels)
 
 	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)$')
 	for module in modules:
@@ -326,23 +313,18 @@
 
 		# Store the module version in a dictionary.
 		modules[module] = {	"kver": kver,
-					"package": "",
 					"kabireq": []
 					}
 
 	modfiles.close()
 
-	module_kabideps(modules)
-	kernel_kabideps(kernels)
+	module_kabi(modules)
+	kernel_kabi(kernels)
 	check_compatibility(modules,kernels,compatibles)
 
 	if not compatibles.has_key(kernel):
 		print "**** weak-modules did not process this kernel ****"
-		print "weak-updates links not updated for " + kernel
-		print "Please run /sbin/weak-modules --add-kernel `uname -r`"
-		print "in order to update kernel module compatibility links."
-		# Don't error this result because the above warning is enough.
-		sys.exit(0)
+		sys.exit(1)
 
 	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)$')
 	for module in range(0,len(compatibles[kernel])):
@@ -351,7 +333,7 @@
 		if not m:
 			print "Non-standard module location"
 			sys.exit(1)
-		mod_kern=m.group(1)
+		mod_kern=modules[modfile]["kver"]
 		weak_dir="/lib/modules/" + kernel \
 			+ "/weak-updates/" + m.group(2)
 		weak_link=weak_dir+"/"+m.group(3)




More information about the fedora-cvs-commits mailing list