From d2593f01e1bf57aaf0235aec1d0ce6503a287a14 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 30 Nov 2024 12:23:24 +0100 Subject: [PATCH] runInLinuxVM: pass .attrs.sh explicitly instead of whole /build directory The approach taken in [1] breaks down as soon as vmRunCommand is manually called with an overriden TMPDIR, like disko does it. /build will just not be available. By moving the .attrs.sh file into the xchg folder explicitly, we can all the "exchange infrastructure" the same as before, thus avoid more breakage. This reverts some parts of [1]. [1]: 97ed6b4565e76286062e6942517a71ae4c9cac72 --- pkgs/build-support/vm/default.nix | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix index bb9c2c7368acb..1f4f8b35b663f 100644 --- a/pkgs/build-support/vm/default.nix +++ b/pkgs/build-support/vm/default.nix @@ -125,15 +125,15 @@ rec { mkdir -p /fs${storeDir} mount -t 9p store /fs${storeDir} -o trans=virtio,version=9p2000.L,cache=loose,msize=131072 - echo "mounting host's build directory..." - mkdir -p /fs/build - mount -t 9p sa /fs/build -o trans=virtio,version=9p2000.L,cache=loose,msize=131072 - mkdir -p /fs/tmp /fs/run /fs/var mount -t tmpfs -o "mode=1777" none /fs/tmp mount -t tmpfs -o "mode=755" none /fs/run ln -sfn /run /fs/var/run + echo "mounting host's temporary directory..." + mkdir -p /fs/tmp/xchg + mount -t 9p xchg /fs/tmp/xchg -o trans=virtio,version=9p2000.L,msize=131072 + mkdir -p /fs/proc mount -t proc none /fs/proc @@ -165,9 +165,11 @@ rec { stage2Init = writeScript "vm-run-stage2" '' #! ${bash}/bin/sh set -euo pipefail - source /build/xchg/saved-env - if [ -f "''${NIX_ATTRS_SH_FILE-}" ]; then - source "$NIX_ATTRS_SH_FILE" + source /tmp/xchg/saved-env + if [ -f /tmp/xchg/.attrs.sh ]; then + source /tmp/xchg/.attrs.sh + export NIX_ATTRS_JSON_FILE=/tmp/xchg/.attrs.json + export NIX_ATTRS_SH_FILE=/tmp/xchg/.attrs.sh fi export NIX_STORE=${storeDir} @@ -177,6 +179,7 @@ rec { cd "$NIX_BUILD_TOP" source $stdenv/setup + if ! test -e /bin/sh; then ${coreutils}/bin/mkdir -p /bin ${coreutils}/bin/ln -s ${bash}/bin/sh /bin/sh @@ -201,7 +204,7 @@ rec { declare -a argsArray=() concatTo argsArray origArgs "$origBuilder" "''${argsArray[@]}" - echo $? > /build/xchg/in-vm-exit + echo $? > /tmp/xchg/in-vm-exit ${busybox}/bin/mount -o remount,ro dummy / @@ -220,7 +223,7 @@ rec { -nographic -no-reboot \ -device virtio-rng-pci \ -virtfs local,path=${storeDir},security_model=none,mount_tag=store \ - -virtfs local,path=/build,security_model=none,mount_tag=sa \ + -virtfs local,path=xchg,security_model=none,mount_tag=xchg \ ''${diskImage:+-drive file=$diskImage,if=virtio,cache=unsafe,werror=report} \ -kernel ${kernel}/${img} \ -initrd ${initrd}/initrd \ @@ -235,6 +238,7 @@ rec { PATH=${coreutils}/bin if [ -f "''${NIX_ATTRS_SH_FILE-}" ]; then + cp $NIX_ATTRS_JSON_FILE $NIX_ATTRS_SH_FILE xchg source "$NIX_ATTRS_SH_FILE" fi source $stdenv/setup