]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - mkinitrd-suse.sh
dracut_mkdir(): create parent directories as needed.
[thirdparty/dracut.git] / mkinitrd-suse.sh
index 20d85da1e13de2f6a50429b8e0a0344a6f65c95c..db2eb188684d2b9379a322f2c7079d6f7fbfd715 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash --norc
 #
-# mkinitrd compability wrapper for SUSE.
+# mkinitrd compatibility wrapper for SUSE.
 #
 # Copyright (c) 2013 SUSE Linux Products GmbH. All rights reserved.
 #
@@ -62,7 +62,7 @@ usage () {
     $cmd "                             /etc/sysconfig/kernel."
     $cmd "     -d root_device          Root device. Defaults to the device from"
     $cmd "                             which / is mounted. Overrides the rootdev"
-    $cmd "                             enviroment variable if set."
+    $cmd "                             environment variable if set."
     $cmd "     -j device               Journal device"
     $cmd "     -D interface            Run dhcp on the specified interface."
     $cmd "     -I interface            Configure the specified interface statically."
@@ -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")
+    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
 }
 
@@ -178,7 +164,7 @@ default_kernel_images() {
     local regex kernel_image kernel_version version_version initrd_image
     local qf='%{NAME}-%{VERSION}-%{RELEASE}\n'
 
-    case "$(uname -m)" in
+    case "${DRACUT_ARCH:-$(uname -m)}" in
         s390|s390x)
             regex='image'
             ;;
@@ -191,7 +177,7 @@ default_kernel_images() {
         arm*)
             regex='[uz]Image'
             ;;
-        aarch64)
+        aarch64|riscv64)
             regex='Image'
             ;;
         *)  regex='vmlinu.'