Files
s390-tools/zipl/initramfs-tools/zipl_helper.prepare-ngdump
Sven Schnelle 01f74c75f5 zipl/dump: add dasd device to ngdump parmline
For dasd devices, we need to enable the device before we can use it.
Add the required dasd device to the kernel commandline when installing
ngdump to a dasd device.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Acked-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
2023-05-26 12:21:04 +02:00

98 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright IBM Corp. 2021
#
# s390-tools is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
#
function create_dumpfs()
{
[ "$dryrun" -eq 1 ] && { echo "/dev/null"; return 0; }
mkfs -F "$device" >/dev/null || { echo "Couldn't create filesystem on $1." >&2; return 1; }
local disk_path=/dev/disk/by-uuid/$(blkid -o value -s UUID "$device")
for i in $(seq 0 30)
do
[ -e "$disk_path" ] && break;
sleep 1
done
[ -e "$disk_path" ] || { echo "Filesystem device link missing." >&2; return 1; }
echo "$disk_path"
}
function get_kernel_version()
{
local version=$(uname -r)
echo $version
}
function get_kernel_image()
{
local version=$1
echo "/boot/vmlinuz-$version"
}
#
# initramfs-tools is the standard tool for building initramfs images
# on Ubuntu and Debian.
#
function create_initrd()
{
local disk=$1
local kver=$2
local initrd=$3
command -v mkinitramfs >/dev/null ||
{ echo "Please install mkinitramfs." >&2; return 1; }
NGDUMP=y NGDUMP_DEVICE="$disk" mkinitramfs -o "$initrd" "$kver" 2>&1
}
[ $# -gt 1 ] || { echo "Usage: $0 <dump partition device> <dryrun>" >&2; exit 1; }
device=$(readlink -f $1)
dryrun=$2
dasd=
type=$(lsblk -dno type "$device")
[ "$type" != "part" ] && { echo "$device with type $type is not a partition." >&2; exit 1; }
case "${device##*/}" in
dasd*)
dasd=$(dasdview -i "$1"|sed -n 's/busid\s*:\s*\([0-9a-fA-F.]\)/dasd=\1/p')
;;
nvme*)
;;
*)
echo "Unsupported device $device." >&2
exit 1
;;
esac
disk_path=$(create_dumpfs $device)
kernel_version=$(get_kernel_version)
kernel=$(get_kernel_image "$kernel_version")
[ -e "$kernel" ] || { echo "Couldn't find kernel image." >&2; exit 1; }
initrd=$(mktemp)
create_initrd "$disk_path" "$kernel_version" "$initrd"
[ $? -eq 0 ] || { echo "Failed to create initramfs image" >&2; exit 1; }
#
# zipl expects this script to output three variables to stdout:
# * kernel: path to bzImage file of Linux kernel
# * initrd: path to dumper initramfs image
# * cmdline: command-line for dumper's kernel
#
# The output order is irrelevant.
#
echo "kernel=$kernel"
echo "initrd=$initrd"
echo "cmdline=reset_devices cgroup_disable=memory nokaslr numa=off irqpoll nr_cpus=1 $dasd"
exit 0