1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#!/bin/sh
# Purges all kernels and headers except for the newest ones for each
# kernel variant, and except for the active one.
# Copyright (C) 2012 Alkis Georgopoulos <alkisg@gmail.com>
# License GNU GPL version 3 or newer <http://gnu.org/licenses/gpl.html>
# Sets keep_kernels, purge_kernels, keep_headers, purge_headers.
purgeable_kernels() {
local current installed kernel version_variant variants
current=$(uname -r)
installed=$(dpkg -l 'linux-image-*' | awk '/^ii/ { print $2; }' | sort -frV)
for kernel in $installed; do
version_variant=${kernel#linux-image-}
variant=$(echo "$version_variant" | sed "s/[.0-9-]*//")
version=${version_variant%$variant}
version=${version%-}
# echo "version=$version, variant=$variant"
test "$version" = "" && continue
test "$variant" = "" && continue
case " $variants " in
*" $variant "*)
# We already have the newest kernel for this variant.
# But do check if it's the active one.
if [ "$current" != "$version_variant" ]; then
purge_kernels="$purge_kernels $version_variant"
continue
fi
;;
esac
variants="$variants $variant"
keep_kernels="$keep_kernels $version_variant"
# Maintain a $keep_versions list to help $purge_headers
case " $keep_versions " in
*" $version ") ;;
*) keep_versions="$keep_versions $version" ;;
esac
done
keep_kernels=$(echo "$keep_kernels" | sed "s/ / linux-image-/g")
keep_kernels=${keep_kernels# }
if [ -n "$purge_kernels" ]; then
purge_kernels=$(echo "$purge_kernels" | sed "s/ / linux-image-/g")
purge_kernels=${purge_kernels# }
fi
installed=$(dpkg -l 'linux-headers-*' | awk '/^ii/ { print $2; }' | sort -frV)
for header in $installed; do
version_variant=${header#linux-headers-}
variant=$(echo "$version_variant" | sed "s/[.0-9-]*//")
version=${version_variant%$variant}
version=${version%-}
# echo "version=$version, variant=$variant"
test "$version" = "" && continue
# test "$variant" = "" && continue
case " $keep_versions " in
*" $version "*)
keep_headers="$keep_headers $version_variant"
;;
*)
purge_headers="$purge_headers $version_variant"
;;
esac
done
keep_headers=$(echo "$keep_headers" | sed "s/ / linux-headers-/g")
keep_headers=${keep_headers# }
if [ -n "$purge_headers" ]; then
purge_headers=$(echo "$purge_headers" | sed "s/ / linux-headers-/g")
purge_headers=${purge_headers# }
fi
}
purgeable_kernels
if [ -n "$purge_kernels" ] || [ -n "$purge_headers" ]; then
echo "Θα διατηρηθούν οι παρακάτω kernels/headers:
$keep_kernels $keep_headers"
echo "Θα διαγραφούν οι παρακάτω kernels/headers:
$purge_kernels $purge_headers"
echo "Πατήστε [Enter] για να συνεχίσετε ή Ctrl+C για να διακόψετε."
echo
apt-get purge $purge_kernels $purge_headers
else
echo "Δεν υπάρχουν παλιοί kernels ή headers για διαγραφή."
fi
|