[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

rpms/module-init-tools/devel module-init-tools.spec, 1.26, 1.27 weak-modules, 1.1, 1.2



Author: jcm

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

Modified Files:
	module-init-tools.spec weak-modules 
Log Message:
replaced weak-modules



Index: module-init-tools.spec
===================================================================
RCS file: /cvs/dist/rpms/module-init-tools/devel/module-init-tools.spec,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- module-init-tools.spec	12 Jul 2006 07:23:34 -0000	1.26
+++ module-init-tools.spec	30 Jul 2006 07:50:42 -0000	1.27
@@ -2,7 +2,7 @@
 Summary: Kernel module management utilities.
 Name: module-init-tools
 Version: 3.3
-Release: 0.pre1.4.1
+Release: 0.pre1.4.2
 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
+* Sun Jul 30 2006 Jon Masters <jcm redhat com> - 3.3-0.pre1.4.2
+- New weak-modules
+
 * Wed Jul 12 2006 Jesse Keating <jkeating redhat com> - 3.3-0.pre1.4.1
 - rebuild
 


Index: weak-modules
===================================================================
RCS file: /cvs/dist/rpms/module-init-tools/devel/weak-modules,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- weak-modules	14 Jun 2006 12:06:02 -0000	1.1
+++ weak-modules	30 Jul 2006 07:50:42 -0000	1.2
@@ -1,100 +1,41 @@
-#! /bin/bash
-
-# weak-modules - derived from weak-updates by Andreas Gruenbacher
-
-unset LANG LC_ALL LC_COLLATE
-
-# Check if MODULE is compatible with kernel release KREL.
-module_is_compatible() {
-    declare module=$1 krel=$2 module_krel=$(krel_of_module "$module")
-
-    if [ ! -e "$tmpdir/all-symvers-$krel-$module_krel" ]; then
-        # Symbols exported by the "new" kernel
-        if [ ! -e $tmpdir/symvers-$krel ]; then
-            if [ -e /boot/symvers-$krel.gz ]; then
-                zcat /boot/symvers-$krel.gz \
-                | sed -r -ne 's:^0x0*([0-9a-f]+\t[0-9a-zA-Z_]+)\t.*:\1:p'
-            fi > $tmpdir/symvers-$krel
-        fi
-
-        # Symbols that other add-on modules of the "old" kernel export
-        # (and that this module may require)
-        if [ ! -e "$tmpdir/extra-symvers-$module_krel" ]; then
-            if [ -e /lib/modules/$module_krel/extra ]; then
-                find /lib/modules/$module_krel/extra -name '*.ko' \
-                | xargs nm \
-                | sed -nre 's:^0*([0-9a-f]+) A __crc_(.*):\1 \2:p'
-            fi > $tmpdir/extra-symvers-$module_krel
-        fi
-
-        sort -u $tmpdir/symvers-$krel $tmpdir/extra-symvers-$module_krel \
-        > "$tmpdir/all-symvers-$krel-$module_krel"
-    fi
-
-    # If the module does not have modversions enabled, $tmpdir/modvers
-    # will be empty.
-    /sbin/modprobe --dump-modversions "$module" \
-    | sed -r -e 's:^0x0*([0-9a-f]+\t.*):\1:' \
-    | sort -u \
-    > $tmpdir/modvers
-
-    # Only include lines of the second file in the output that don't
-    # match lines in the first file. (The default separator is
-    # <space>, so we are matching the whole line.)
-    join -j 1 -v 2 $tmpdir/all-symvers-$krel-$module_krel \
-                   $tmpdir/modvers > $tmpdir/join
-
-    if [ ! -s $tmpdir/modvers ]; then
-        echo "Warning: Module ${module##*/} from kernel $module_krel has no" \
-             "modversions, so it cannot be reused for kernel $krel" >&2
-    elif [ -s $tmpdir/join ]; then
-        [ -n "$verbose" ] &&
-        echo "Module ${module##*/} from kernel $module_krel is not compatible" \
-             "with kernel $krel in symbols:" $(sed -e 's:.* ::' $tmpdir/join)
-    else
-        [ -n "$verbose" ] &&
-        echo "Module ${module##*/} from kernel $module_krel is compatible" \
-             "with kernel $krel"
-        return 0
-    fi
-    return 1
-}
-
-# Compute the kernel release of a module.
-krel_of_module() {
-    declare module=$1
-    /sbin/modinfo -F vermagic "$module" | awk '{print $1}'
-}
-
-# Read a list of modules from standard input, convert the filenames into
-# absolute names, and compute the kernel release of each module.
-read_modules_list() {
-    local IFS=$'\n'
-    modules=($(cat))
-
-    for ((n = 0; n < ${#modules[ ]}; n++)); do
-        if [ ${modules[n]:0:1} != '/' ]; then
-            modules[n]="$PWD/${modules[n]}"
-        fi
-        if [ -f "${modules[n]}" ]; then
-            module_krels[n]=$(krel_of_module ${modules[n]})
-        else
-            # Try to extract the kernel release from the path
-            set -- "${modules[n]#/lib/modules/}"
-            module_krels[n]=${1%%/*}
-        fi
-    done
-}
-
-doit() {
-    [ -n "$verbose" ] && echo "$@"
-    [ -n "$dry_run" ] || "$@"
-}
-
-usage() {
-    echo "Usage: ${0##*/} [options] {--add-modules|--remove-modules}"
-    echo "${0##*/} [options] {--add-kernel|--remove-kernel} {kernel-release}"
-    cat <<'EOF'
+#!/usr/bin/python
+#
+# weak-modules - Red Hat kABI comparison tool
+#
+# Author: Jon Masters <jcm 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.
+#
+# This software may be freely redistributed under the terms of the GNU
+# General Public License (GPL).
+
+__author__ = "Jon Masters <jcm redhat com>"
+__version__ = "1.0"
+__date__ = "2006/07/30 08:00:00"
+__copyright__ = "Copyright (C) 2006 Red Hat, Inc"
+__license__ = "GPL"
+
+import commands
+import getopt
+import os
+import re
+import sha
+import string
+import sys
+
+true = 1
+false = 0
+
+dry_run = "no"
+verbose = "no"
+
+def usage():
+	"""Usage for weak-modules script"""
+	print "usage:\t" + sys.argv[0] + " [options] {--add-modules|--remove-modules}"
+	print "\t" + sys.argv[0] + " [options] {--add-kernel|--remove-kernel} {kernel-release}"
+	print """
 --add-modules
         Add a list of modules read from standard input. Create
         symlinks in compatible kernel's weak-updates/ directory.
@@ -107,201 +48,394 @@
 
 --add-kernel
         Add compatibility symlinks for all compatible modules to the
-        specified or running kernel.
+        specified kernel.
 
 --remove-kernel
-        Remove all compatibility symlinks for the specified or current
-        kernel.
+        Remove all compatibility symlinks for the specified kernel.
 
 --verbose
         Print the commands executed.
 
 -dry-run
         Do not create/remove any files.
-EOF
-    exit $1
-}
-
-[ -e /etc/sysconfig/kernel ] && source /etc/sysconfig/kernel
-
-unset ${!changed_modules_*} ${!changed_initrd_*}
-
-module_has_changed() {
-    declare module=$1 krel=$2
-
-    module=${module%.ko}
-    module=${module##*/}
-
-    eval "changed_modules_${krel//[^a-zA-Z0-9]/_}=$krel"
-    case " $INITRD_MODULES " in
-    *" $module "*)
-        eval "changed_initrd_${krel//[^a-zA-Z0-9]/_}=$krel"
-        ;;
-    esac
-}
-
-options=`getopt -o h --long help,add-modules,remove-modules \
-                     --long add-kernel,remove-kernel,dry-run,verbose -- "$@"`
-
-[ $? -eq 0 ] || usage 1
-
-eval set -- "$options"
-
-while :; do
-    case "$1" in
-    --add-modules)
-        add_modules=1
-        ;;
-    --remove-modules)
-        remove_modules=1
-        ;;
-    --add-kernel)
-        add_kernel=1
-        ;;
-    --remove-kernel)
-        remove_kernel=1
-        ;;
-    --dry-run)
-        dry_run=1
-        ;;
-    --verbose)
-        verbose=1
-        ;;
-    -h|--help)
-        usage 0
-        ;;
-    --)
-        shift
-        break
-        ;;
-    esac
-    shift
-done
-
-if [ "$add_modules$remove_modules$add_kernel$remove_kernel" != 1 ]; then
-    usage 1
-fi
-if [ -n "$add_kernel" -o -n "$remove_kernel" ]; then
-    [ $# -gt 1 ] && usage 1
-else
-    [ $# -ne 0 ] && usage 1
-fi
-
-tmpdir=$(mktemp -td ${0##*/}.XXXXXX)
-trap "rm -rf $tmpdir" EXIT
-trap "rm -rf $tmpdir" INT
-
-if [ -n "$add_modules" ]; then
-    read_modules_list || exit 1
-    if [ ${#modules[ ]} -gt 0 ]; then
-        for krel in $(ls /lib/modules/); do
-            [ -e "/boot/symvers-$krel.gz" ] || continue
-            for ((n = 0; n < ${#modules[ ]}; n++)); do
-                module="${modules[n]}"
-                module_krel="${module_krels[n]}"
-                case "$module" in
-                /lib/modules/$krel/*)
-                    continue ;;
-                esac
-                subpath="${module#/lib/modules/$module_krel/extra}"
-                weak_module="/lib/modules/$krel/weak-updates/${subpath#/}"
-                if [ -r "$weak_module" ]; then
-                    weak_krel=$(krel_of_module "$weak_module")
-                    if [ "$weak_krel" != "$module_krel" ] &&
-                       [ "$(printf "%s\n" "$weak_krel" "$module_krel" \
-                            | /usr/lib/rpm/redhat/rpmsort | head -n 1)" = \
-                         "$module_krel" ]; then
-                        # Keep modules from more recent kernels.
-                        [ -n "$verbose" ] && echo \
-"Keeping module ${module##*/} from kernel $weak_krel for kernel $krel"
-                        continue
-                    fi
-                fi
-                if module_is_compatible $module $krel; then
-                    doit mkdir -p $(dirname $weak_module)
-                    doit ln -sf $module $weak_module
-                    module_has_changed $module $krel
-                fi
-            done
-        done
-    fi
-elif [ -n "$remove_modules" ]; then
-    read_modules_list || exit 1
-    if [ ${#modules[ ]} -gt 0 ]; then
-        krels=($(ls /lib/modules/ | /usr/lib/rpm/redhat/rpmsort -r))
-        for krel in "${krels[ ]}"; do
-            [ -e "/boot/symvers-$krel.gz" ] || continue
-            for ((n = 0; n < ${#modules[ ]}; n++)); do
-                module="${modules[n]}"
-                module_krel="${module_krels[n]}"
-                subpath="${module#/lib/modules/$module_krel/extra}"
-                weak_module="/lib/modules/$krel/weak-updates/${subpath#/}"
-		if [ "$module" == "`readlink $weak_module`" ]; then
-                    [ -n "$verbose" ] && echo \
-"Removing compatible module ${module##*/} from kernel $krel"
-                    doit rm -f "$weak_module"
-                    for krel2 in "${krels[ ]}"; do
-                        [ -e "/boot/symvers-$krel2.gz" ] || continue
-                        module="/lib/modules/$krel2/extra/$subpath"
-                        [ -e "$module" ] || continue
-                        if module_is_compatible "$module" "$krel2"; then
-                            [ -n "$verbose" ] && echo \
-"Adding compatible module ${module##*/} from kernel $krel2 instead"
-                            doit ln -s "$module" "$weak_module"
-                            break
-                        fi
-                    done
-                    doit rmdir --parents --ignore-fail-on-non-empty \
-                               "$(dirname "$weak_module")"
-                    module_has_changed $module $krel
-                fi
-            done
-        done
-    fi
-elif [ -n "$add_kernel" ]; then
-    add_krel=${1:-$(uname -r)}
-    if [ ! -e "/boot/symvers-$add_krel.gz" ]; then
-        echo "Symvers dump file /boot/symvers-$add_krel.gz" \
-             "not found" >&2
-        exit 1
-    fi
-    for krel in $(ls /lib/modules/ | /usr/lib/rpm/redhat/rpmsort -r); do
-        [ "$add_krel" = "$krel" ] && continue
-        [ -d /lib/modules/$krel/extra ] || continue
-        for module in $(find /lib/modules/$krel/extra -name '*.ko'); do
-            subpath="${module#/lib/modules/$krel/extra}"
-            weak_module="/lib/modules/$add_krel/weak-updates/${subpath#/}"
-            [ -e "$weak_module" ] && continue
-            if module_is_compatible $module $add_krel; then
-                doit mkdir -p $(dirname $weak_module)
-                doit ln -sf $module $weak_module
-            fi
-        done
-    done
-elif [ -n "$remove_kernel" ]; then
-    remove_krel=${1:-$(uname -r)}
-    weak_modules="/lib/modules/$remove_krel/weak-updates"
-    doit rm -rf "$weak_modules"
-fi
-
-for krel in ${!changed_modules_*}; do
-    krel=${!krel}
-    [ -e "/boot/System.map-$krel" ] || continue
-    /sbin/depmod -ae -F /boot/System.map-$krel $krel
-done
-
-for krel in ${!changed_initrd_*}; do
-    krel=${!krel}
-    [ -e "/boot/System.map-$krel" ] || continue
-
-    image=
-    for x in vmlinuz image vmlinux linux bzImage; do
-        if [ -f "/boot/$x-$krel" ]; then
-            image="$x"
-            break
-        fi
-    done
-    if [ -n "$image" ]; then
-        /sbin/mkinitrd -k "/boot/$image-$krel" -i "/boot/initrd-$krel"
-    fi
-done
+"""
+
+def read_modules(modules):
+	"""Read a list of modules from standard input, convert the filenames
+	   into absolute names and compute the kernel release of each module."""
+
+	while true:
+		in_line = sys.stdin.readline()
+		if in_line == "":
+			break
+		if in_line == "\n":
+			continue
+		if in_line[0] != '/':
+			module=os.getcwd()+"/"+in_line[:-1]
+		else:
+			module=in_line[:-1]
+
+		# Check it the module exists, extract vermagic, otherwise try
+		# to pull the information out of the path component
+		if os.path.isfile(module):
+			minfo = os.popen("/sbin/modinfo -F vermagic " + module)
+			kver = (string.split(minfo.readline()))[0]
+		else:
+			p = re.compile('^.*/lib/modules/([^/]*).*$')
+			m = p.match(module)
+			if m:
+				kver=m.group(1)
+			else:
+				print "cannot extract kernel version!"
+				sys.exit(1)
+
+		# Store the module version in a dictionary.
+		modules[module] = {	"kver": kver,
+					"package": "",
+					"kabireq": []
+					}
+
+def module_kabideps(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\(([^\)]*)\) = (.*)$')
+		while true:
+			in_line = (string.strip(pinfo.readline()))
+			if in_line == "":
+				break
+			m = p.match(in_line)
+			if m:
+				modules[module]["kabireq"].append(in_line)
+		pinfo.close()
+
+def kernel_kabideps(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")
+	while true:
+		in_line = (string.strip(kinfo.readline()))
+		if in_line == "":
+			break
+		
+		kernel=in_line
+		kernelver=re.sub("kernel-","",in_line)
+
+		kdeps = os.popen("rpm -q --provides " + kernel)
+
+		p = re.compile('^kernel\(([^\)]*)\) = (.*)$')
+		while true:
+			in_line = (string.strip(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])
+				else:
+					kernels[kernelver] = [[kabi]]
+
+		kdeps.close()
+	kinfo.close()
+
+	# debug
+	#for kernel in kernels:
+	#	print "kernel " + kernel + ":"
+	#	for i in range(0,len(kernels[kernel])):
+	#		for j in range(0,len(kernels[kernel][i])):
+	#			print "\t" + kernels[kernel][i][j]
+
+def check_compatibility(modules,kernels,compatibles):
+	"""For each module, check which kernels it is compatible with."""
+
+	for module in modules:
+		for kernel in kernels:
+
+			all_matched=1
+			for i in range(0,len(modules[module]["kabireq"])):
+				module_abi=modules[module]["kabireq"][i]
+				matched=0
+				# Check this kABI req against a kernel
+				for j in range(0,len(kernels[kernel])):
+					for k in range(0,len(kernels[kernel][j])):
+						kernel_abi=kernels[kernel][j][k]
+						if kernel_abi==module_abi:
+							matched=1
+				if matched==0:
+					all_matched=0
+
+			if all_matched:
+				# All kABI deps are good
+
+				if compatibles.has_key(kernel):
+					compatibles[kernel].append(module)
+				else:
+					compatibles[kernel] = [module]
+
+def run_depmod(kernel):
+	"""Run depmod against kernel."""
+
+	depmod_line="/sbin/depmod -ae -F " \
+		+"/boot/System.map-"+kernel \
+		+" "+kernel
+	if verbose == "yes":
+		print "depmod: " + depmod_line
+	os.system(depmod_line)
+
+def run_mkinitrd(kernel):
+	"""Run mkinitrd against kernel."""
+
+	mkinitrd_line = "/sbin/mkinitrd --allow-missing -f /boot/initrd-"\
+			+kernel+".img "+kernel
+
+	if verbose == "yes":
+		print "mkinitrd: " + mkinitrd_line
+	os.system(mkinitrd_line)
+
+def add_modules():
+	"""Read in a list of modules to add from std input. For each module,
+	   attempt to create links in compatible kernel directories."""
+
+	modules={}
+	kernels={}
+	compatibles={}
+
+	read_modules(modules)
+	module_kabideps(modules)
+	kernel_kabideps(kernels)
+	check_compatibility(modules,kernels,compatibles)
+
+	#debug
+	#if verbose == "yes":
+	#	print "**** Compatible kernels ****"
+	#	for kernel in compatibles:
+	#		print kernel + ":"
+	#		for module in range(0,len(compatibles[kernel])):
+	#			print "\t" + compatibles[kernel][module]
+
+	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)$')
+	for kernel in compatibles:
+		for module in range(0,len(compatibles[kernel])):
+			modfile=compatibles[kernel][module]
+			m = p.match(modfile)
+			if not m:
+				print "Non-standard module location"
+				sys.exit(1)
+			mod_kern=m.group(1)
+			weak_dir="/lib/modules/" + kernel \
+				+ "/weak-updates/" + m.group(2)
+			weak_link=weak_dir+"/"+m.group(3)
+
+		if mod_kern != kernel:
+			# ignore the kernel that matches the module
+
+			if verbose == "yes":
+				print "create: " + weak_link
+
+			if dry_run == "no":
+				os.system("mkdir -p " + weak_dir)
+				os.system("ln -sf " + modfile + " " + weak_link)
+				run_depmod(kernel)
+				run_mkinitrd(kernel)
+
+def remove_modules():
+	"""Read in a list of modules to remove from std input. Remove these
+	   modules from all installed kernels"""
+
+	modules = {}
+	kernels = {}
+
+	read_modules(modules)
+	kernel_kabideps(kernels)
+
+	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)$')
+	for module in modules:
+
+		m = p.match(module)
+		if not m:
+			print "Non-standard module locations"
+			sys.exit(1)
+		weak_link=m.group(2)+"/"+m.group(3)
+
+		for kernel in kernels:
+
+			weak_dir = "/lib/modules/" + kernel \
+				+ "/weak-updates/" + m.group(2)
+			weak_path = weak_dir +"/"+m.group(3)
+
+			if os.path.isfile(weak_path):
+				weak_modfile=os.readlink(weak_path)
+				if weak_modfile == module:
+					if verbose == "yes":
+						print "remove: " \
+							+ weak_path
+					if dry_run == "no":
+						os.system("rm -f " +weak_path)
+
+						os.system("rmdir " +weak_dir)
+						run_depmod(kernel)
+						run_mkinitrd(kernel)	
+
+def add_kernel(kernel):
+	"""Add the (specified) system kernel and create update links."""
+
+	modules = {}
+	kernels = {}
+	compatibles = {}
+
+	if kernel == "":
+		status,kernel = commands.getstatusoutput('uname -r')
+
+	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)\.ko$')
+	modfiles=os.popen("find /lib/modules")
+	while true:
+		in_line=(modfiles.readline())[:-1]
+		if in_line == "":
+			break
+		m = p.match(in_line)
+		if not m:
+			continue
+		module=in_line
+
+		# Check it the module exists, extract vermagic, otherwise try
+		# to pull the information out of the path component
+		if os.path.isfile(module):
+			minfo = os.popen("/sbin/modinfo -F vermagic " + module)
+			kver = (string.split(minfo.readline()))[0]
+			minfo.close()
+
+		# Store the module version in a dictionary.
+		modules[module] = {	"kver": kver,
+					"package": "",
+					"kabireq": []
+					}
+
+	modfiles.close()
+
+	module_kabideps(modules)
+	kernel_kabideps(kernels)
+	check_compatibility(modules,kernels,compatibles)
+
+	if not compatibles.has_key(kernel):
+		print "Cannot locate data on installed kernel!"
+		sys.exit(1)
+
+	p = re.compile('^.*/lib/modules/([^/]*)/extra/(.*)/(.*)$')
+	for module in range(0,len(compatibles[kernel])):
+		modfile=compatibles[kernel][module]
+		m = p.match(modfile)
+		if not m:
+			print "Non-standard module location"
+			sys.exit(1)
+		mod_kern=m.group(1)
+		weak_dir="/lib/modules/" + kernel \
+			+ "/weak-updates/" + m.group(2)
+		weak_link=weak_dir+"/"+m.group(3)
+
+		if mod_kern != kernel:
+			# ignore the kernel that matches the module
+
+			if verbose == "yes":
+				print "create: " + weak_link
+				print "     -> " + modfile
+
+			if dry_run == "no":
+				os.system("mkdir -p " + weak_dir)
+				os.system("ln -sf " + modfile + " " + weak_link)
+				run_depmod(kernel)
+				run_mkinitrd(kernel)
+
+def remove_kernel(kernel):
+	"""Remove the given kernel from the system."""
+	
+	weakup_dir = "/lib/modules/" + kernel + "/weak-updates"
+	if not os.path.isdir(weakup_dir):
+		print "No weak updates directory found."
+		sys.exit(0)
+	weak_updates = os.popen("find " + weakup_dir + " -iname \"*.ko\"")
+
+	while true:
+		in_line = (weak_updates.readline())[:-1]
+		if in_line == "":
+			break
+		module=in_line
+		p = re.compile('^.*/lib/modules/(.*)/weak-updates/(.*)/(.*)$')
+		m = p.match(module)
+		if not m:
+			print "Non standard module location!"
+			sys.exit(1)
+		weak_dir = weakup_dir+"/"+m.group(2)
+
+		if verbose == "yes":
+			print "remove: " + module
+
+		if dry_run == "no":
+			os.system("rm -f " + module)
+			os.system("rmdir " + weak_dir)
+			run_depmod(kernel)
+			run_mkinitrd(kernel)
+	
+
+if __name__ == "__main__":
+
+	opts, args = getopt.getopt(sys.argv[1:], 'arh', [ 'add-modules', 'remove-modules', 'add-kernel=', 'remove-kernel=', 'dry-run', 'verbose', 'help' ])
+
+	do_add_modules=0
+	do_remove_modules=0
+	do_add_kernel=0
+	do_remove_kernel=0
+	kernel=""
+
+	for o, v in opts:
+		if o == '--add-modules' or o == '-a':
+			do_add_modules=1
+		if o == '--remove-modules' or o == 'r':
+			do_remove_modules=1
+		if o == '--add-kernel':
+			do_add_kernel=1
+			kernel=v
+		if o == '--remove-kernel':
+			do_remove_kernel=1
+			kernel=v
+		if o == '--dry-run':
+			dry_run="yes"
+		if o == '--verbose':
+			verbose="yes"
+		if o == '--help' or o == 'h':
+			usage()
+			sys.exit(0)
+
+	if do_add_modules==1:
+		add_modules()
+		sys.exit(0)
+
+	if do_remove_modules==1:
+		remove_modules()
+		sys.exit(0)
+
+	if do_add_kernel==1:
+		add_kernel(kernel)
+		sys.exit(0)
+
+	if do_remove_kernel==1:
+		remove_kernel(kernel)
+		sys.exit(0)
+
+	print "You didn't ask me to do anything! Here's some usage information!"
+	usage()
+	sys.exit(0)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]