[2107] | 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 | |
---|
| 12 | |
---|
| 13 | if confget("RPM::Remove-Old-Kernels/b", "true") == "false" then |
---|
| 14 | return |
---|
| 15 | end |
---|
| 16 | |
---|
| 17 | -- remove old kernel and kernel-devel |
---|
| 18 | knames = {'kernel', 'kernel%-pae', 'kernel%-smp', 'kernel%-devel', 'kernel%-pae%-devel', 'kernel%-smp%-devel'} |
---|
| 19 | |
---|
| 20 | -- get current running kernel version |
---|
| 21 | function get_running_kernel_ver() |
---|
| 22 | local inp = io.popen("uname -r") |
---|
| 23 | local currentver = nil |
---|
| 24 | for line in inp.lines(inp) do |
---|
| 25 | currentver = string.gsub(line,"pae$","") |
---|
| 26 | end |
---|
| 27 | if currentver then |
---|
| 28 | return currentver |
---|
| 29 | else |
---|
| 30 | return 0 |
---|
| 31 | end |
---|
| 32 | end |
---|
| 33 | |
---|
[2109] | 34 | -- get kernel version of vmlinuz. |
---|
| 35 | function get_current_kernel_ver() |
---|
| 36 | local inp = io.popen("readlink /boot/vmlinuz") |
---|
| 37 | local oldver = nil |
---|
| 38 | for line in inp.lines(inp) do |
---|
| 39 | oldver = string.gsub(string.gsub(line,"pae$",""),"^vmlinuz%-","") |
---|
| 40 | end |
---|
| 41 | if oldver then |
---|
| 42 | return oldver |
---|
| 43 | else |
---|
| 44 | return 0 |
---|
| 45 | end |
---|
| 46 | end |
---|
| 47 | |
---|
[2107] | 48 | -- get kernel version of vmlinuz.old |
---|
| 49 | function get_old_kernel_ver() |
---|
| 50 | local inp = io.popen("readlink /boot/vmlinuz.old") |
---|
| 51 | local oldver = nil |
---|
| 52 | for line in inp.lines(inp) do |
---|
| 53 | oldver = string.gsub(string.gsub(line,"pae$",""),"^vmlinuz%-","") |
---|
| 54 | end |
---|
| 55 | if oldver then |
---|
| 56 | return oldver |
---|
| 57 | else |
---|
| 58 | return 0 |
---|
| 59 | end |
---|
| 60 | end |
---|
| 61 | |
---|
[2109] | 62 | function get_latest(kname) |
---|
| 63 | pkgs = pkglist() |
---|
| 64 | latest = "0" |
---|
| 65 | for i, pkg in ipairs(pkgs) do |
---|
| 66 | if not pkgisvirtual(pkg) and string.find(pkgname(pkg), kname.."#") then |
---|
| 67 | ver = pkgvercur(pkg) |
---|
| 68 | if not ver then |
---|
| 69 | ver = pkgvercand(pkg) |
---|
| 70 | end |
---|
| 71 | if ver and verstrcmp(verstr(ver), latest) > 0 then |
---|
| 72 | latest = verstr(ver) |
---|
| 73 | latestpkg = pkg |
---|
| 74 | end |
---|
| 75 | end |
---|
| 76 | end |
---|
| 77 | return latestpkg |
---|
| 78 | end |
---|
| 79 | |
---|
| 80 | function get_latest_kernel_ver() |
---|
| 81 | latestver = nil |
---|
| 82 | latestver = verstr(pkgvercur(get_latest("kernel"))) |
---|
| 83 | if latestver then |
---|
| 84 | return latestver |
---|
| 85 | else |
---|
| 86 | return 0 |
---|
| 87 | end |
---|
| 88 | end |
---|
| 89 | |
---|
[2107] | 90 | -- remove all kernels older than current or vmlinuz.old |
---|
| 91 | function remove_old_kernels() |
---|
| 92 | rkver = get_running_kernel_ver() |
---|
[2109] | 93 | ckver = get_current_kernel_ver() |
---|
| 94 | lkver = get_latest_kernel_ver() |
---|
[2107] | 95 | okver = get_old_kernel_ver() |
---|
| 96 | pkgs = pkglist() |
---|
| 97 | for i, pkg in ipairs(pkgs) do |
---|
| 98 | ver = pkgvercur(pkg) |
---|
| 99 | if not pkgisvirtual(pkg) and ver then |
---|
| 100 | for j, kname in ipairs(knames) do |
---|
| 101 | if string.find(pkgname(pkg), kname..'#') then |
---|
| 102 | if ( verstrcmp(verstr(ver), rkver) < 0 and |
---|
[2109] | 103 | verstrcmp(verstr(ver), ckver) < 0 and |
---|
| 104 | verstrcmp(verstr(ver), lkver) < 0 and |
---|
[2107] | 105 | verstrcmp(verstr(ver), okver) < 0 ) then |
---|
| 106 | markremove(pkg) |
---|
| 107 | end |
---|
| 108 | end |
---|
| 109 | end |
---|
| 110 | end |
---|
| 111 | end |
---|
| 112 | end |
---|
| 113 | |
---|
| 114 | -- |
---|
| 115 | if script_slot == "Scripts::AptGet::DistUpgrade" or |
---|
| 116 | script_slot == "Scripts::AptGet::Upgrade" or |
---|
| 117 | script_slot == "Scripts::Synaptic::DistUpgrade" or |
---|
| 118 | script_slot == "Scripts::Synaptic::Upgrade" then |
---|
| 119 | remove_old_kernels() |
---|
| 120 | end |
---|
| 121 | |
---|
| 122 | -- vim:ts=4:sw=4:et |
---|