remove-old-kernels.lua 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. -- This script will clean up all kernels older than current version.
  2. --
  3. -- This script must be plugged in the following slots:
  4. --
  5. -- Scripts::AptGet::Upgrade
  6. -- Scripts::AptGet::DistUpgrade
  7. -- Scripts::Synaptic::Upgrade
  8. -- Scripts::Synaptic::DistUpgrade
  9. --
  10. -- Author: Daisuke SUZUKI <daiuske@linux.or.jp>
  11. if confget("RPM::Remove-Old-Kernels/b", "true") == "false" then
  12. return
  13. end
  14. -- remove old kernel and kernel-devel
  15. knames = {'kernel', 'kernel%-pae', 'kernel%-smp', 'kernel%-devel', 'kernel%-pae%-devel', 'kernel%-smp%-devel'}
  16. -- get current running kernel version
  17. function get_running_kernel_ver()
  18. local inp = io.popen("uname -r")
  19. local currentver = nil
  20. for line in inp.lines(inp) do
  21. currentver = string.gsub(line,"pae$","")
  22. end
  23. if currentver then
  24. return currentver
  25. else
  26. return 0
  27. end
  28. end
  29. -- get kernel version of vmlinuz.old
  30. function get_old_kernel_ver()
  31. local inp = io.popen("readlink /boot/vmlinuz.old")
  32. local oldver = nil
  33. for line in inp.lines(inp) do
  34. oldver = string.gsub(string.gsub(line,"pae$",""),"^vmlinuz%-","")
  35. end
  36. if oldver then
  37. return oldver
  38. else
  39. return 0
  40. end
  41. end
  42. -- remove all kernels older than current or vmlinuz.old
  43. function remove_old_kernels()
  44. rkver = get_running_kernel_ver()
  45. okver = get_old_kernel_ver()
  46. pkgs = pkglist()
  47. for i, pkg in ipairs(pkgs) do
  48. ver = pkgvercur(pkg)
  49. if not pkgisvirtual(pkg) and ver then
  50. for j, kname in ipairs(knames) do
  51. if string.find(pkgname(pkg), kname..'#') then
  52. if ( verstrcmp(verstr(ver), rkver) < 0 and
  53. verstrcmp(verstr(ver), okver) < 0 ) then
  54. markremove(pkg)
  55. end
  56. end
  57. end
  58. end
  59. end
  60. end
  61. --
  62. if script_slot == "Scripts::AptGet::DistUpgrade" or
  63. script_slot == "Scripts::AptGet::Upgrade" or
  64. script_slot == "Scripts::Synaptic::DistUpgrade" or
  65. script_slot == "Scripts::Synaptic::Upgrade" then
  66. remove_old_kernels()
  67. end
  68. -- vim:ts=4:sw=4:et