treewide: implement basic aarch64 support

This adds aarch64 platforms, and some fixes for aarch64 support. This is
not yet complete; e.g. toolchains for aarch64 targets are still missing.

I renamed the amd64 platforms to x86_64 and efi to uefi for consistency
with @platforms.

syscall.Dup2 does not exist on arm64, but unix.Dup2 does.

Change-Id: I3ab081b2b852945b723ec83768f79000b8c4def4
Reviewed-on: https://review.monogon.dev/c/monogon/+/4173
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/core/abloader/BUILD.bazel b/metropolis/node/core/abloader/BUILD.bazel
index b59d035..1210368 100644
--- a/metropolis/node/core/abloader/BUILD.bazel
+++ b/metropolis/node/core/abloader/BUILD.bazel
@@ -5,7 +5,10 @@
     name = "abloader_bin",
     srcs = ["main.rs"],
     edition = "2021",
-    platform = "//build/platforms:efi_amd64",
+    platform = select({
+        "@platforms//cpu:x86_64": "//build/platforms:uefi_x86_64",
+        "@platforms//cpu:aarch64": "//build/platforms:uefi_aarch64",
+    }),
     # rust_binary depends on the status files by default, even if no stamp
     # variables are used, which causes unnecessary rebuilds when the stable
     # status file changes.
diff --git a/metropolis/node/kubernetes/pause/BUILD.bazel b/metropolis/node/kubernetes/pause/BUILD.bazel
index 24a4b54..69529b1 100644
--- a/metropolis/node/kubernetes/pause/BUILD.bazel
+++ b/metropolis/node/kubernetes/pause/BUILD.bazel
@@ -20,7 +20,10 @@
 
 oci_image(
     name = "pause_image",
-    architecture = "amd64",
+    architecture = select({
+        "@platforms//cpu:x86_64": "amd64",
+        "@platforms//cpu:aarch64": "arm64",
+    }),
     entrypoint = ["/app/metropolis/node/kubernetes/pause/pause"],
     os = "linux",
     tars = [":pause_layer"],