#!/bin/sh set -eu repo_root=${PROJECT_ROOT:-$(pwd)} os_template=${OS_TEMPLATE:-$repo_root/tests/system/phase14-native-boot-pid1-operating-system.scm.in} system_name=${SYSTEM_NAME:-phase14-operating-system} disk_capacity=${DISK_CAPACITY:-8g} root_size=${ROOT_SIZE:-6g} metadata_target=${METADATA_OUT:-} cleanup=0 if [ -n "${WORKDIR:-}" ]; then workdir=$WORKDIR mkdir -p "$workdir" else workdir=$(mktemp -d /tmp/fruix-phase14-native-boot-qemu.XXXXXX) cleanup=1 fi if [ "${KEEP_WORKDIR:-0}" -eq 1 ]; then cleanup=0 fi inner_metadata=$workdir/phase14-native-boot-qemu-inner-metadata.txt metadata_file=$workdir/phase14-native-boot-qemu-metadata.txt cleanup_workdir() { if [ "$cleanup" -eq 1 ]; then rm -rf "$workdir" 2>/dev/null || sudo rm -rf "$workdir" fi } trap cleanup_workdir EXIT INT TERM KEEP_WORKDIR=1 WORKDIR="$workdir/inner" METADATA_OUT="$inner_metadata" \ OS_TEMPLATE="$os_template" SYSTEM_NAME="$system_name" DISK_CAPACITY="$disk_capacity" ROOT_SIZE="$root_size" \ "$repo_root/tests/system/run-phase11-shepherd-pid1-qemu.sh" phase8_metadata=$(sed -n 's/^phase8_metadata=//p' "$inner_metadata") closure_path=$(sed -n 's/^closure_path=//p' "$inner_metadata") closure_base=$(sed -n 's/^closure_base=//p' "$inner_metadata") serial_log=$(sed -n 's/^serial_log=//p' "$inner_metadata") ssh_port=$(sed -n 's/^ssh_port=//p' "$inner_metadata") shepherd_pid=$(sed -n 's/^shepherd_pid=//p' "$inner_metadata") sshd_status=$(sed -n 's/^sshd_status=//p' "$inner_metadata") activate_log=$(sed -n 's/^activate_log=//p' "$inner_metadata") native_base_store_count=$(sed -n 's/^native_base_store_count=//p' "$phase8_metadata") native_base_stores=$(sed -n 's/^native_base_stores=//p' "$phase8_metadata") host_base_store_count=$(sed -n 's/^host_base_store_count=//p' "$phase8_metadata") host_base_stores=$(sed -n 's/^host_base_stores=//p' "$phase8_metadata") [ "$native_base_store_count" = 2 ] || { echo "expected 2 native base stores, got: $native_base_store_count" >&2; exit 1; } [ "$host_base_store_count" = 0 ] || { echo "expected 0 host base stores, got: $host_base_store_count" >&2; exit 1; } [ -z "$host_base_stores" ] || { echo "host base stores are not empty: $host_base_stores" >&2; exit 1; } printf '%s\n' "$native_base_stores" | tr ',' '\n' | grep 'freebsd-native-kernel-15.0-STABLE$' >/dev/null || { echo "native base stores do not include the native kernel" >&2 exit 1 } printf '%s\n' "$native_base_stores" | tr ',' '\n' | grep 'freebsd-native-world-15.0-STABLE$' >/dev/null || { echo "native base stores do not include the native world" >&2 exit 1 } [ "$shepherd_pid" = 1 ] || { echo "shepherd was not PID 1" >&2; exit 1; } [ "$sshd_status" = running ] || { echo "sshd is not running" >&2; exit 1; } case "$activate_log" in *fruix-activate:done*) : ;; *) echo "activation log does not show success" >&2; exit 1 ;; esac cat >"$metadata_file" <