m/test/launch: build image at runtime

Test launch now builds the node disk image from the OCI image, instead
of creating a qcow2 snapshot of the pre-built disk image. This speeds up
tests and test cluster launch.

The OCI image is uncompressed and payloads are not verified, which
enables the previously implemented copy_file_range optimization. If the
host file system supports reflinks, this has a similar effect as the
qcow2 snapshot had previously: Building the image is very fast as the
rootfs data is not copied on disk. On my machine, it takes 30 ms.

The build before launching a cluster is now faster: The MkImage step
taking 6 s is replaced by MkOCI taking 1 s. The majority of this time is
spent by Bazel computing hashes of files. For MkImage, the generated
file was a 5 GB disk image consisting mostly of zeroes, which took a
long time to hash.

Additionally, the qcow2 layer added some overhead, which is now gone.
The HA e2e test previously took 103 s on my machine, now it takes 80 s.

Change-Id: I0ce5059626cc682061c26ac3c8d11b752e641c60
Reviewed-on: https://review.monogon.dev/c/monogon/+/4294
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/metropolis/test/launch/BUILD.bazel b/metropolis/test/launch/BUILD.bazel
index 492fdd4..bbe3eb9 100644
--- a/metropolis/test/launch/BUILD.bazel
+++ b/metropolis/test/launch/BUILD.bazel
@@ -13,7 +13,8 @@
     ],
     data = [
         "//metropolis/cli/metroctl:metroctl_lite",
-        "//metropolis/node:image",
+        "//metropolis/node:oci_image_uncompressed",
+        "//metropolis/node/abloader",
         "//metropolis/test/nanoswitch:initramfs",
         "//metropolis/test/swtpm/certtool",
         "//metropolis/test/swtpm/swtpm_cert",
@@ -37,11 +38,11 @@
         "xOvmfCodePath": "$(rlocationpath //third_party/edk2:OVMF_CODE.fd )",
         "xKernelPath": "$(rlocationpath //osbase/test/ktest:linux-testing )",
         "xInitramfsPath": "$(rlocationpath //metropolis/test/nanoswitch:initramfs )",
-        "xNodeImagePath": "$(rlocationpath //metropolis/node:image )",
+        "xNodeImagePath": "$(rlocationpath //metropolis/node:oci_image_uncompressed )",
+        "xAbloaderPath": "$(rlocationpath //metropolis/node/abloader )",
     },
     deps = [
         "//go/logging",
-        "//go/qcow2",
         "//metropolis/cli/metroctl/core",
         "//metropolis/node",
         "//metropolis/node/core/curator/proto/api",
@@ -49,8 +50,13 @@
         "//metropolis/node/core/rpc/resolver",
         "//metropolis/proto/api",
         "//metropolis/proto/common",
+        "//osbase/blockdev",
+        "//osbase/build/mkimage/osimage",
         "//osbase/logbuffer",
+        "//osbase/oci",
+        "//osbase/oci/osimage",
         "//osbase/oci/registry",
+        "//osbase/structfs",
         "//osbase/test/qemu",
         "@com_github_cenkalti_backoff_v4//:backoff",
         "@com_github_kballard_go_shellquote//:go-shellquote",