#!/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 " >&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