scripts: Handle images with a DAX/NVDIMM header

osbuilder recently added the ability to create images with a DAX/NVDIMM
header [1], however this change broke the data collection script. Update
that script to handle images with and without this header.

The data collection script will now assume a header is present. However,
if it fails to find the required partition data, it will try again, this
time assuming the image does not have a DAX/NVDIMM header.

Fixes #1404.

[1] - https://github.com/kata-containers/osbuilder/pull/236

Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
James O. D. Hunt 2019-03-21 12:18:29 +00:00
parent bdf6b2d49d
commit 5d761cec76

View File

@ -14,6 +14,7 @@ typeset -r script_version="@VERSION@ (commit @COMMIT@)"
typeset -r unknown="unknown" typeset -r unknown="unknown"
typeset -r osbuilder_file="/var/lib/osbuilder/osbuilder.yaml" typeset -r osbuilder_file="/var/lib/osbuilder/osbuilder.yaml"
typeset -r dax_header_size_bytes=$((2 * 1024 * 1024))
# Maximum number of errors to show for a single system component # Maximum number of errors to show for a single system component
# (such as runtime or proxy). # (such as runtime or proxy).
@ -400,11 +401,13 @@ get_image_details()
local contents local contents
local expected local expected
loop_device=$(loopmount_image "$img") local found_valid_image=0
if [ -z "$loop_device" ]; then
echo "$unknown" # Newer images contain a dax header, but check for both types.
return for use_dax_offset in true false
fi do
loop_device=$(loopmount_image "$img" "$use_dax_offset")
[ -z "$loop_device" ] && continue
partitions=$(get_partitions "$loop_device") partitions=$(get_partitions "$loop_device")
if [ -z "$partitions" ]; then if [ -z "$partitions" ]; then
@ -418,6 +421,14 @@ get_image_details()
if [ "$count" -ne "$expected" ]; then if [ "$count" -ne "$expected" ]; then
release_device "$loop_device" release_device "$loop_device"
continue
fi
found_valid_image=1
break
done
if [ "$found_valid_image" = 0 ]; then
echo "$unknown" echo "$unknown"
return return
fi fi
@ -439,7 +450,8 @@ get_image_details()
unmount_partition "$mountpoint" unmount_partition "$mountpoint"
release_device "$loop_device" release_device "$loop_device"
echo "$contents" # Supplement the output with details of whether the header was found
printf -- "%s\ndax-nvdimm-header: \"%s\"\n" "${contents}" "$use_dax_offset"
} }
# Parameter 1: Path to the initrd file. # Parameter 1: Path to the initrd file.
@ -514,10 +526,16 @@ loopmount_image()
{ {
local img="$1" local img="$1"
[ -n "$img" ] || die "need image file" [ -n "$img" ] || die "need image file"
local use_dax_offset="$2"
[ -n "$use_dax_offset" ] || die "need dax offset value"
local device_path local device_path
losetup -fP "$img" local offset=0
[ "$use_dax_offset" = true ] && offset="$dax_header_size_bytes"
losetup -fP -o "$offset" "$img"
device_path=$(losetup -j "$img" |\ device_path=$(losetup -j "$img" |\
cut -d: -f1 |\ cut -d: -f1 |\