From 8e2a26fd8b73ae4248825e62492afa33b93f39b5 Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Fri, 1 Mar 2024 14:58:23 -0500 Subject: [PATCH 1/2] Add `cosa supermin-run` This is very close to `cosa supermin-shell` but instead expects a command to run inside the supermin VM. Essentially, it's a very thin wrapper around the `runvm` family of functions in `cmdlib.sh`. By having it be a dedicated function, it becomes like a utility command to have easy access to a privileged environment, with the working dir automatically mounted in, podman remote proxying, etc... Note also this *does not* require a cosa workdir. The podman machine OS pipeline will be using this temporarily. --- src/cmd-supermin-run | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 src/cmd-supermin-run 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 + +"$@" From fcd533ce9f81bf0561d6547e7cf15cb8715695de Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Sat, 2 Mar 2024 21:35:09 -0500 Subject: [PATCH 2/2] supermin-init-prelude: skip creating cache dir In a cosa workdir, that dir always exists in both privileged and unprivileged paths. Prep for a new command that'll use this code outside a cosa workdir where to be nice we don't want to just randomly create a cache dir even when no caching is required. --- src/supermin-init-prelude.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/supermin-init-prelude.sh b/src/supermin-init-prelude.sh index 0ef11ca7a5..1dfc3ff1e5 100644 --- a/src/supermin-init-prelude.sh +++ b/src/supermin-init-prelude.sh @@ -50,7 +50,6 @@ for maybe_symlink in "${workdir}"/{src/config,src/yumrepos,builds}; do fi done -mkdir -p "${workdir}"/cache cachedev=$(blkid -lt LABEL=cosa-cache -o device || true) if [ -n "${cachedev}" ]; then mount "${cachedev}" "${workdir}"/cache