1 | # /usr/lib/mindi/DebFindFailsafe
|
---|
2 | #
|
---|
3 | # DebFindFailsafe - Find correct FAILSAFE kernel to use on Debian systems.
|
---|
4 | #
|
---|
5 | # Approach:
|
---|
6 | # - get architecture
|
---|
7 | # - get kernel version (e.g. '2.6' or '2.4') of running kernel
|
---|
8 | # - find matching latest generic kernel using list of virtual candiates
|
---|
9 | #
|
---|
10 | # Caveats:
|
---|
11 | # - candiates lists need to be maintained manually; not too much overhead
|
---|
12 | # - the kernel relases don't have to match, i.e. a 2.6.12 could be running and
|
---|
13 | # a 2.6.15 might get selected as failsafe; probably ok
|
---|
14 | #
|
---|
15 | # Changelog:
|
---|
16 | # 28Jan06AL: - initial version
|
---|
17 | # 12Feb06AL: - removed 'FATAL ERROR' from error messages
|
---|
18 | # - check for status of kernel package, not dpkg (silly glitch)
|
---|
19 | # - tell users to install kernel package when not found
|
---|
20 | # - turned from independent script into snippet that is sourced by mindi
|
---|
21 | # (prefixed all variables with 'EXT_' as external name space)
|
---|
22 | # - use Die for better error reporting (possible through previous step)
|
---|
23 | #
|
---|
24 |
|
---|
25 |
|
---|
26 | # Define candiate lists for virtual kernel packages
|
---|
27 | EXT_virt_kernel_pkg_cand_amd64_26="linux-image-2.6-amd64"
|
---|
28 | EXT_virt_kernel_pkg_cand_i386_24="kernel-image-2.4-386"
|
---|
29 | EXT_virt_kernel_pkg_cand_i386_26="linux-image-2.6-486 kernel-image-2.6-386 linux-image-386" # Sarge Etch/Sid Breezy
|
---|
30 | EXT_virt_kernel_pkg_cand_ia64_24="kernel-image-2.4-itanium"
|
---|
31 | EXT_virt_kernel_pkg_cand_ia64_26="linux-image-2.6-itanium kernel-image-2.6-itanium"
|
---|
32 |
|
---|
33 | ####################################################
|
---|
34 | # +++ No maintainable parts beyond this point. +++ #
|
---|
35 | ####################################################
|
---|
36 |
|
---|
37 |
|
---|
38 | # Get architecure of system
|
---|
39 | EXT_system_architecture=`dpkg --print-architecture 2> /dev/null`
|
---|
40 | if [ $? -ne 0 ]; then
|
---|
41 | Die "Failed to determine system architecture. Terminating."
|
---|
42 | fi
|
---|
43 |
|
---|
44 | # Get version of running kernel
|
---|
45 | EXT_kernel_version=`uname -r 2> /dev/null | cut -c1-3 2> /dev/null`
|
---|
46 | if [ $? -ne 0 ]; then
|
---|
47 | Die "Failed to get version of running kernel. Terminating."
|
---|
48 | fi
|
---|
49 |
|
---|
50 | # Get virtual kernel package candiates corresponding to architecture and kernel version
|
---|
51 | case "$EXT_system_architecture" in
|
---|
52 | "amd64")
|
---|
53 | case "$EXT_kernel_version" in
|
---|
54 | "2.6")
|
---|
55 | EXT_virt_kernel_pkg_cand=$EXT_virt_kernel_pkg_cand_amd64_26 ;;
|
---|
56 | *)
|
---|
57 | Die "Kernel version $EXT_kernel_version not supported on architecture $EXT_system_architecture. Terminating." ;;
|
---|
58 | esac;;
|
---|
59 | "i386")
|
---|
60 | case "$EXT_kernel_version" in
|
---|
61 | "2.4")
|
---|
62 | EXT_virt_kernel_pkg_cand=$EXT_virt_kernel_pkg_cand_i386_24 ;;
|
---|
63 | "2.6")
|
---|
64 | EXT_virt_kernel_pkg_cand=$EXT_virt_kernel_pkg_cand_i386_26 ;;
|
---|
65 | *)
|
---|
66 | Die "Kernel version $EXT_kernel_version not supported on architecture $EXT_system_architecture. Terminating." ;;
|
---|
67 | esac;;
|
---|
68 | "ia64")
|
---|
69 | case "$EXT_kernel_version" in
|
---|
70 | "2.4")
|
---|
71 | EXT_virt_kernel_pkg_cand=$EXT_virt_kernel_pkg_cand_ia64_24 ;;
|
---|
72 | "2.6")
|
---|
73 | EXT_virt_kernel_pkg_cand=$EXT_virt_kernel_pkg_cand_ia64_26 ;;
|
---|
74 | *)
|
---|
75 | Die "Kernel version $EXT_kernel_version not supported on architecture $EXT_system_architecture. Terminating." ;;
|
---|
76 | esac;;
|
---|
77 | *)
|
---|
78 | Die "Architecture $EXT_system_architecture not supported. Terminating." ;;
|
---|
79 | esac
|
---|
80 |
|
---|
81 | # Determine kernel package from virtual candidates
|
---|
82 | for EXT_cand in $EXT_virt_kernel_pkg_cand; do
|
---|
83 | EXT_kernel_package=`dpkg --print-avail $EXT_cand 2>/dev/null | grep "^Depends: " | cut -d" " -f2`
|
---|
84 | [ -n "$EXT_kernel_package" ] && break
|
---|
85 | done
|
---|
86 | if [ -z "$EXT_kernel_package" ]; then
|
---|
87 | Die "Failed to get real kernel package for virtual kernel package candiate(s) $EXT_virt_kernel_pkg_cand. Terminating."
|
---|
88 | fi
|
---|
89 |
|
---|
90 | # Verify that kernel package is installed
|
---|
91 | # (This is what users that don't have a suitable kernel to be used as failsafe will see.)
|
---|
92 | if [ `dpkg --status $EXT_kernel_package 2>/dev/null | grep -c "Status: install ok installed"` -ne 1 ]; then
|
---|
93 | Die "Debian kernel package $EXT_kernel_package not installed. Please install (one of): $EXT_virt_kernel_pkg_cand. Terminating."
|
---|
94 | fi
|
---|
95 |
|
---|
96 | # Get path to kernel image
|
---|
97 | EXT_kernel_image=`dpkg -L "$EXT_kernel_package" 2> /dev/null | grep -m 1 vmlinuz`
|
---|
98 | if [ -z "$EXT_kernel_image" ]; then
|
---|
99 | Die "Failed to get path to kernel image from package $EXT_kernel_package. Terminating."
|
---|
100 | else
|
---|
101 | # Export kernel version
|
---|
102 | export FAILSAFE_KBIN="$EXT_kernel_image"
|
---|
103 | export FAILSAFE_KVER="`echo $EXT_kernel_image | cut -d- -f2-`"
|
---|
104 | fi
|
---|