|
@@ -31,6 +31,20 @@ function get_running_kernel_ver()
|
|
|
end
|
|
|
end
|
|
|
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
|
|
|
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
|
|
|
+
|
|
|
|
|
|
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
|