mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
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>
98 lines
2.2 KiB
Bash
Executable File
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
|