From: Daan De Meyer Date: Wed, 2 Aug 2023 12:54:51 +0000 (+0200) Subject: Give scripts access to sys.stdin X-Git-Tag: v15~45^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c126f2e5522d89485fb15f2b9777be67fd4fbc69;p=thirdparty%2Fmkosi.git Give scripts access to sys.stdin It's very useful to be able to put "bash" in a script to get a shell, so let's support that. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 3f99d3568..199cfb05f 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -195,6 +195,7 @@ def run_prepare_script(state: MkosiState, build: bool) -> None: apivfs=state.root, scripts=dict(chroot=chroot_cmd(state.root, options=options, network=True)), env=dict(SRCDIR="/work/src") | state.config.environment, + stdin=sys.stdin, ) shutil.rmtree(state.root / "work") else: @@ -204,6 +205,7 @@ def run_prepare_script(state: MkosiState, build: bool) -> None: apivfs=state.root, scripts=dict(chroot=chroot_cmd(state.root, options=options, network=True)), env=dict(SRCDIR="/work/src") | state.config.environment, + stdin=sys.stdin, ) shutil.rmtree(state.root / "work") @@ -253,6 +255,7 @@ def run_build_script(state: MkosiState) -> None: apivfs=state.root, scripts=dict(chroot=chroot_cmd(state.root, options=options, network=state.config.with_network)), env=env | state.config.environment, + stdin=sys.stdin, ) @@ -272,6 +275,7 @@ def run_postinst_script(state: MkosiState) -> None: ), ), env=state.config.environment, + stdin=sys.stdin, ) shutil.rmtree(state.root / "work") diff --git a/mkosi/run.py b/mkosi/run.py index b4b30d036..8f1eee7eb 100644 --- a/mkosi/run.py +++ b/mkosi/run.py @@ -257,6 +257,7 @@ def bwrap( log: bool = True, scripts: Mapping[str, Sequence[PathString]] = {}, env: Mapping[str, str] = {}, + stdin: _FILE = None, ) -> CompletedProcess: cmdline: list[PathString] = [ "bwrap", @@ -336,7 +337,7 @@ def bwrap( cmdline += ["sh", "-c", f"{chmod} && {container} && exec $0 \"$@\" || exit $?"] try: - result = run([*cmdline, *cmd], env=env, log=False) + result = run([*cmdline, *cmd], env=env, log=False, stdin=stdin) except subprocess.CalledProcessError as e: if log: logging.error(f"\"{' '.join(str(s) for s in cmd)}\" returned non-zero exit code {e.returncode}.")