mkinitrd-suse.sh: simplify get_kernel_version

This generalizes the naming and provides a workaround for compressed
kernels on s390.

Reference: bsc#1139939
master
Daniel Molkentin 2019-07-18 10:14:37 +02:00 committed by Daniel Molkentin
parent 9f561c54c7
commit d10f6f8367
1 changed files with 10 additions and 24 deletions

View File

@ -145,31 +145,17 @@ is_xen_kernel() {
return
}

# kernel_image_gz_from_image() and kernel_version_from_image() are helpers
# for arm* kernels which produce zImage files which cannot be read from
# get_kernel_version -> get rid of this workaround if possible
kernel_image_gz_from_image() {
local arch=$(uname -i)
local r=${1}.gz

# uImage kernels can't be extracted directly. Use the vmlinux.gz instead
r=${r//uImage/vmlinux}

# on ARM a zImage can't be extracted directly. Other platforms define it
# as a gzipped vmlinux file, but not ARM. So only on ARM, use vmlinux.gz.
if [[ $arch =~ arm ]] || [[ $arch =~ aarch ]]; then
r=${r//zImage/vmlinux}
fi

echo $r
}

kernel_version_from_image() {
local kernel_image="$1" kernel_image_gz=$(kernel_image_gz_from_image "$1")

if get_kernel_version "$kernel_image" 2>/dev/null; then
return
fi
local dir="${1%/*}/" |
[[ "$dir" != "$1" ]] || dir="" |
local kernel_image="$1" kernel_image_gz="${dir}vmlinux-${1#*-}.gz" |
echo kernel_image_gz="'$kernel_image_gz'" >&2 |
|
if get_kernel_version "$kernel_image" 2>/dev/null; then |
return |
fi |
|
# As a last resort, try vmlinux-$version.gz, which might be around |
get_kernel_version "$kernel_image_gz" 2>/dev/null
}