Browse Source

apt: update remove-old-kernels.lua
- check /boot/vmlinuz and latest kernel


git-svn-id: http://trac.vinelinux.org/repos/projects/specs@2109 ec354946-7b23-47d6-9f5a-488ba84defc7

daisuke 13 years ago
parent
commit
88c523266e
1 changed files with 46 additions and 0 deletions
  1. 46 0
      a/apt/remove-old-kernels.lua

+ 46 - 0
a/apt/remove-old-kernels.lua

@@ -31,6 +31,20 @@ function get_running_kernel_ver()
     end
 end
 
+-- get kernel version of vmlinuz.
+function get_current_kernel_ver()
+    local inp = io.popen("readlink /boot/vmlinuz")
+    local oldver = nil
+    for line in inp.lines(inp) do
+        oldver = string.gsub(string.gsub(line,"pae$",""),"^vmlinuz%-","")
+    end
+    if oldver then
+        return oldver
+    else
+        return 0
+    end
+end
+
 -- get kernel version of vmlinuz.old
 function get_old_kernel_ver()
     local inp = io.popen("readlink /boot/vmlinuz.old")
@@ -45,9 +59,39 @@ function get_old_kernel_ver()
     end
 end
 
+function get_latest(kname)
+    pkgs = pkglist()
+    latest = "0"
+    for i, pkg in ipairs(pkgs) do
+        if not pkgisvirtual(pkg) and string.find(pkgname(pkg), kname.."#") then
+            ver = pkgvercur(pkg)
+            if not ver then
+                ver = pkgvercand(pkg)
+            end
+            if ver and verstrcmp(verstr(ver), latest) > 0 then
+                latest = verstr(ver)
+                latestpkg = pkg
+            end
+        end
+    end
+    return latestpkg
+end
+
+function get_latest_kernel_ver()
+    latestver = nil
+    latestver = verstr(pkgvercur(get_latest("kernel")))
+    if latestver then
+        return latestver
+    else
+        return 0
+    end
+end
+
 -- remove all kernels older than current or vmlinuz.old
 function remove_old_kernels()
     rkver = get_running_kernel_ver()
+    ckver = get_current_kernel_ver()
+    lkver = get_latest_kernel_ver()
     okver = get_old_kernel_ver()
     pkgs = pkglist()
     for i, pkg in ipairs(pkgs) do
@@ -56,6 +100,8 @@ function remove_old_kernels()
             for j, kname in ipairs(knames) do
                 if string.find(pkgname(pkg), kname..'#') then
                     if ( verstrcmp(verstr(ver), rkver) < 0 and
+                         verstrcmp(verstr(ver), ckver) < 0 and
+                         verstrcmp(verstr(ver), lkver) < 0 and
                          verstrcmp(verstr(ver), okver) < 0 ) then
                         markremove(pkg)
                     end