diff --git a/src/cmd-supermin-run b/src/cmd-supermin-run new file mode 100755 index 0000000000..dfcf2e0493 --- /dev/null +++ b/src/cmd-supermin-run @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +set -euo pipefail + +dn=$(dirname "$0") +# shellcheck source=src/cmdlib.sh +. "${dn}"/cmdlib.sh + +print_help() { + echo "Usage: cosa supermin-run [--cache|--snapshot] COMMAND [ARG...]" >&2 +} + +if [ $# = 0 ]; then + print_help + exit 1 +fi + +need_cache_dir=0 +case "$1" in + --cache) + shift + set -- runvm_with_cache -- "$@" + need_cache_dir=1 + ;; + --snapshot) + shift + set -- runvm_with_cache_snapshot on -- "$@" + need_cache_dir=1 + ;; + --*) + echo "unrecognized option: $1" + print_help + exit 1 + ;; + *) + set -- runvm -- "$@" + ;; +esac + +# force caller to create tmp/ and possibly cache/ rather than surprisingly +# auto-create them +if [ ! -d tmp ]; then + echo 'Need tmp/ dir for supermin to work' >&2 + exit 1 +fi +if [ $need_cache_dir = 1 ] && [ ! -d cache ]; then + echo 'Need cache/ dir for caching' >&2 + exit 1 +fi + +workdir=$(pwd) +export workdir + +"$@" diff --git a/src/cmdlib.sh b/src/cmdlib.sh index 44c69a1d17..c832498b30 100755 --- a/src/cmdlib.sh +++ b/src/cmdlib.sh @@ -809,7 +809,7 @@ EOF if ! "${kola_args[@]}" -- "${base_qemu_args[@]}" \ -device virtserialport,chardev=virtioserial0,name=cosa-cmdout \ -chardev stdio,id=virtioserial0 \ - "${qemu_args[@]}" <&-; then # the <&- here closes stdin otherwise qemu waits forever + "${qemu_args[@]}" < /dev/zero; then # qemu hangs if it has nothing to read on stdin cat "${runvm_console}" fatal "Failed to run 'kola qemuexec'" fi diff --git a/src/secex-genprotimgvm-scripts/runvm.sh b/src/secex-genprotimgvm-scripts/runvm.sh index c90a2c604d..a5361a1021 100644 --- a/src/secex-genprotimgvm-scripts/runvm.sh +++ b/src/secex-genprotimgvm-scripts/runvm.sh @@ -56,7 +56,7 @@ else fi if ! "${kola_args[@]}" -- "${base_qemu_args[@]}" \ - "${qemu_args[@]}" <&-; then # the <&- here closes stdin otherwise qemu waits forever + "${qemu_args[@]}" < /dev/zero; then # qemu hangs if it has nothing to read on stdin cat "${runvm_console}" echo "Failed to run 'kola qemuexec'" exit 1 diff --git a/src/supermin-init-prelude.sh b/src/supermin-init-prelude.sh index 8cf8150d50..0e4b0874da 100644 --- a/src/supermin-init-prelude.sh +++ b/src/supermin-init-prelude.sh @@ -47,7 +47,6 @@ for maybe_symlink in "${workdir}"/{src/config,src/yumrepos}; do fi done -mkdir -p "${workdir}"/cache cachedev=$(blkid -lt LABEL=cosa-cache -o device || true) if [ -n "${cachedev}" ]; then mount "${cachedev}" "${workdir}"/cache