[yum-cvs] yum-utils package-cleanup.py,1.6,1.7
Gijs Hollestelle
gijs at login.linux.duke.edu
Mon Jun 13 17:48:35 UTC 2005
Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv23243
Modified Files:
package-cleanup.py
Log Message:
- Remove old kernel-devel packages together with kernel packages
(this can be disabled by using the --keepdevel command line option)
Index: package-cleanup.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/package-cleanup.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- package-cleanup.py 13 Jun 2005 02:05:40 -0000 1.6
+++ package-cleanup.py 13 Jun 2005 17:48:33 -0000 1.7
@@ -124,7 +124,26 @@
kernlist.reverse()
return kernlist
+# List all kernel devel packages that either belong to kernel versions that
+# are no longer installed or to kernel version that are in the removelist
+def getOldKernelDevel(my,kernels,removelist):
+ devellist = []
+ for tup in my.rpmdb.returnTupleByKeyword(name='kernel-devel'):
+ # For all kernel-devel packages see if there is a matching kernel
+ # in kernels but not in removelist
+ keep = False
+ for kernel in kernels:
+ if kernel in removelist:
+ continue
+ (kname,karch,kepoch,kver,krel) = kernel
+ (dname,darch,depoch,dver,drel) = tup
+ if (karch,kepoch,kver,krel) == (darch,depoch,dver,drel):
+ keep = True
+ if not keep:
+ devellist.append(tup)
+ return devellist
+
def sortPackages(pkg1,pkg2):
"""sort pkgtuples by evr"""
return miscutils.compareEVR((pkg1[2:]),(pkg2[2:]))
@@ -147,7 +166,7 @@
else:
return True
-def removeKernels(my, count, confirmed):
+def removeKernels(my, count, confirmed, keepdevel):
"""Remove old kernels, keep at most count kernels (and always keep the running
kernel"""
@@ -158,9 +177,7 @@
kernels = getKernels(my)
runningkernel = os.uname()[2]
(kver,krel) = runningkernel.split('-')
- if len(kernels) < count:
- print "There are only %s kernels installed of maximum %s kernels, nothing to be done" % (len(kernels),count)
- return
+
remove = kernels[count:]
toremove = []
@@ -171,17 +188,25 @@
print "Not removing kernel %s-%s because it is the running kernel" % (kver,krel)
else:
toremove.append(kernel)
+
if len(kernels) - len(toremove) < 1:
print "Error all kernel rpms are set to be removed"
sys.exit(100)
+
+ # Now extend the list with all kernel-devel pacakges that either
+ # have no matching kernel installed or belong to a kernel that is to
+ # be removed
+ if not keepdevel:
+ toremove.extend(getOldKernelDevel(my,kernels,toremove))
+
if len(toremove) < 1:
- print "No kernels to remove"
+ print "No kernel related packages to remove"
return
-
- print "I will remove the following %s kernel(s):" % len(toremove)
+
+ print "I will remove the following %s kernel related packages:" % len(toremove)
for kernel in toremove:
(n,a,e,v,r) = kernel
- print "%s-%s" % (v,r)
+ print "%s-%s-%s" % (n,v,r)
if not confirmed:
if not userconfirm():
@@ -198,6 +223,10 @@
my.ts.order()
my.ts.run(progress,'')
+# Returns True if exactly one value in the list evaluates to True
+def exactlyOne(l):
+ return len(filter(None, l)) == 1
+
# Parse command line options
def parseArgs():
parser = OptionParser()
@@ -212,13 +241,16 @@
parser.add_option("-y", default=False, dest="confirmed",action="store_true",
help='Agree to anything asked')
parser.add_option("--oldkernels", default=False, dest="kernels",action="store_true",
- help="Remove old kernels")
+ help="Remove old kernel and kernel-devel packages")
parser.add_option("--count",default=2,dest="kernelcount",action="store",
- help="Number of kernels to keep on the system (default 2)")
+ help="Number of kernel packages to keep on the system (default 2)")
+ parser.add_option("--keepdevel",default=False,dest="keepdevel",action="store_true",
+ help="Do not remove kernel-devel packages when removing kernels")
+
(opts, args) = parser.parse_args()
- if not (opts.problems or opts.leaves or opts.kernels) or (opts.problems and opts.leaves):
+ if not exactlyOne((opts.problems,opts.leaves,opts.kernels)):
parser.print_help()
- print "Please specify either --problems or --leaves"
+ print "Please specify either --problems, --leaves or --oldkernels"
sys.exit(0)
return (opts, args)
@@ -232,7 +264,7 @@
if os.geteuid() != 0:
print "Error: Cannot remove kernels as a user, must be root"
sys.exit(1)
- removeKernels(my, opts.kernelcount, opts.confirmed)
+ removeKernels(my, opts.kernelcount, opts.confirmed, opts.keepdevel)
sys.exit(0)
if (opts.leaves):
More information about the Yum-cvs-commits
mailing list