[yum-cvs] yum-utils README,1.1.1.1,1.2 package-cleanup.py,1.1,1.2

Gijs Hollestelle gijs at login.linux.duke.edu
Mon May 16 14:14:43 UTC 2005


Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv3386

Modified Files:
	README package-cleanup.py 
Log Message:
- Created initial version of README file
- Added old kernel clean up to package-cleanup



Index: README
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/README,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- README	21 Mar 2005 08:36:13 -0000	1.1.1.1
+++ README	16 May 2005 14:14:40 -0000	1.2
@@ -1 +1,25 @@
-yum-utils  - utils that work around the yum python module
\ No newline at end of file
+-- Introduction --
+
+Yum-utils is a collection of utilities, plugins and examples related to
+the yum package manager. 
+
+If you have created an utility related to yum or if you encounter any problems
+using these utilities, feel free to send an e-mail to the yum mailing list:
+https://lists.linux.duke.edu/mailman/listinfo/yum
+
+-- Authors --
+
+Various people have made a contribution to this collection:
+
+- Gijs Hollestelle
+Maintainer of yum-utils, author of yumdownloader and package-cleanup 
+
+- Seth Vidal
+Maintainer of yum, author of repo-closure, repo-manage and repo-rss
+
+- Panu Matilainen 
+Author of repoquery
+
+- Sean Dilda
+Author of the update on boot init scripts
+

Index: package-cleanup.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/package-cleanup.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- package-cleanup.py	26 Apr 2005 18:31:01 -0000	1.1
+++ package-cleanup.py	16 May 2005 14:14:40 -0000	1.2
@@ -26,11 +26,13 @@
 #
 
 import yum
+import os
 import sys
 import rpm
 from rpmUtils import miscutils
 from yum.logger import Logger
 from optparse import OptionParser
+from yum.packages import YumInstalledPackage
 
 def initYum():
     my = yum.YumBase()
@@ -45,6 +47,7 @@
     my.doTsSetup()
     my.doSackSetup()
     my.doRpmDBSetup()
+    my.localPackages = []
     return my
 
 # Get a list of all requirements in the local rpmdb
@@ -108,8 +111,12 @@
       help='List leaf nodes in the local RPM database')
     parser.add_option("--all", default=False, dest="all",action="store_true",
       help='When listing leaf nodes also list leaf nodes that are not libraries')
+    parser.add_option("--oldkernels", default=False, dest="kernels",action="store_true",
+      help="Remove old kernels")
+    parser.add_option("--count",default=2,dest="kernelcount",action="store",
+      help="Number of kernels to keep on the system (default 2)")
     (opts, args) = parser.parse_args()
-    if not (opts.problems or opts.leaves) or (opts.problems and opts.leaves):
+    if not (opts.problems or opts.leaves or opts.kernels) or (opts.problems and opts.leaves):
         parser.print_help()
         print "Please specify either --problems or --leaves"
         sys.exit(0)
@@ -126,9 +133,93 @@
             if name.find('lib') == 0 or all:
                 print "%s-%s-%s.%s" % (pkg[0],pkg[3],pkg[4],pkg[1])
 
+# Return a list of all installed kernels, sorted newst to oldest
+def getKernels(my):
+    kernlist = []
+    for tup in my.rpmdb.getPkgList():
+        (n,a,e,v,r) = tup
+        if (n == 'kernel'):
+            kernlist.append(tup)
+    kernlist.sort(sortPackages)
+    kernlist.reverse()
+    return kernlist
+
+# Sort package tuples on epoch version release
+def sortPackages(pkg1,pkg2):
+    return miscutils.compareEVR((pkg1[2:]),(pkg2[2:]))
+
+def progress(what, bytes, total, h, user):
+    pass
+    #if what == rpm.RPMCALLBACK_UNINST_STOP:
+    #    print "Removing: %s" % h 
+
+def userconfirm():
+    """gets a yes or no from the user, defaults to No"""
+
+    while 1:
+        choice = raw_input('Is this ok [y/N]: ')
+        if len(choice) == 0 or choice[0] in ['Y', 'y', 'N','n']:
+            break
+
+    if len(choice) == 0 or choice[0] not in ['y', 'Y']:
+        return 0
+    else:
+        return 1
+
+# Remove old kernels, keep at most count kernels (and always keep the running
+# kernel)
+def removeKernels(my,count):
+    if count < 1:
+        print "Error should keep at least 1 kernel!"
+        sys.exit(100)
+    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 = []
+    # Remove running kernel from remove list
+    for kernel in remove:
+        (n,a,e,v,r) = kernel
+        if (v == kver and r == krel):
+            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)
+    if len(toremove) < 1:
+        print "No kernels to remove"
+        return
+    
+    print "I will remove the following %s kernel(s):" % (len(toremove))
+    for kernel in toremove:
+        (n,a,e,v,r) = kernel
+        print "%s-%s" % (v,r) 
+
+    if (not userconfirm()):
+        sys.exit(0)
+
+    for kernel in toremove:
+        hdr = my.rpmdb.returnHeaderByTuple(kernel)[0]
+        po = YumInstalledPackage(hdr)
+        my.tsInfo.addErase(po)
+
+    # Now perform the action transaction
+    my.populateTs()
+    my.ts.check()
+    my.ts.order()
+    my.ts.run(progress,'')
+    
+    
 def main():
     (opts, args) = parseArgs()
     my = initYum()
+    if (opts.kernels):
+        removeKernels(my,int(opts.kernelcount))
+        sys.exit(0)
     print "Reading local RPM database"
     pkgs = getLocalRequires(my)
     print "Processing all local requires"
@@ -136,6 +227,5 @@
     if (opts.leaves):
         listLeaves(pkgs,provsomething,opts.all)
     
-    
 if __name__ == '__main__':
     main()




More information about the Yum-cvs-commits mailing list