treewide: remove direct access to external/

This prepares the repositoriy to be compatible with the flag
--nolegacy_external_runfiles. This reduces runfiles & sandbox creation
 times.

Change-Id: I06720be4a3c873d68d8278dcb24271ed874f7134
Reviewed-on: https://review.monogon.dev/c/monogon/+/2747
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/vm/smoketest/BUILD.bazel b/metropolis/vm/smoketest/BUILD.bazel
index 1dce6e4..7264bcf 100644
--- a/metropolis/vm/smoketest/BUILD.bazel
+++ b/metropolis/vm/smoketest/BUILD.bazel
@@ -6,6 +6,7 @@
     srcs = ["main.go"],
     importpath = "source.monogon.dev/metropolis/vm/smoketest",
     visibility = ["//visibility:private"],
+    deps = ["@io_bazel_rules_go//go/runfiles:go_default_library"],
 )
 
 node_initramfs(
diff --git a/metropolis/vm/smoketest/main.go b/metropolis/vm/smoketest/main.go
index 103f4d3..d22a578 100644
--- a/metropolis/vm/smoketest/main.go
+++ b/metropolis/vm/smoketest/main.go
@@ -25,6 +25,8 @@
 	"net"
 	"os"
 	"os/exec"
+
+	"github.com/bazelbuild/rules_go/go/runfiles"
 )
 
 func main() {
@@ -47,11 +49,21 @@
 		}
 	}()
 
+	qemuPath, err := runfiles.Rlocation("qemu/qemu-x86_64-softmmu")
+	if err != nil {
+		panic(err)
+	}
+
+	// TODO(lorenz): This explicitly doesn't use our own qboot because it cannot be built in a musl configuration.
+	// This will be fixed once we have a proper multi-target toolchain.
+	biosPath, err := runfiles.Rlocation("qemu/pc-bios/qboot.rom")
+	if err != nil {
+		panic(err)
+	}
+
 	baseArgs := []string{"-nodefaults", "-no-user-config", "-nographic", "-no-reboot",
 		"-accel", "kvm", "-cpu", "host",
-		// TODO(lorenz): This explicitly doesn't use our own qboot because it cannot be built in a musl configuration.
-		// This will be fixed once we have a proper multi-target toolchain.
-		"-bios", "external/qemu/pc-bios/qboot.rom",
+		"-bios", biosPath,
 		"-M", "microvm,x-option-roms=off,pic=off,pit=off,rtc=off,isa-serial=off",
 		"-kernel", "metropolis/test/ktest/linux-testing.elf",
 		"-append", "reboot=t console=hvc0 quiet",
@@ -62,7 +74,7 @@
 		"-chardev", "socket,id=test,path=metropolis/vm/smoketest,abstract=on",
 		"-device", "virtserialport,chardev=test",
 	}
-	qemuCmd := exec.Command("external/qemu/qemu-x86_64-softmmu", baseArgs...)
+	qemuCmd := exec.Command(qemuPath, baseArgs...)
 	qemuCmd.Stdout = os.Stdout
 	qemuCmd.Stderr = os.Stderr
 	if err := qemuCmd.Run(); err != nil {