blob: 1638083a8dbdffa92d6305b9fdd0c2ceb082c3f0 [file] [log] [blame]
Serge Bazanski1f789542024-05-22 14:01:50 +02001load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
Tim Windelschmidt8e19fa42024-11-12 13:39:43 +00002load("@rules_pkg//:pkg.bzl", "pkg_zip")
Tim Windelschmidtc2290c22024-08-15 19:56:00 +02003load("//osbase/build:def.bzl", "erofs_image", "verity_image")
4load("//osbase/build:efi.bzl", "efi_unified_kernel_image")
Tim Windelschmidt8e19fa42024-11-12 13:39:43 +00005load("//osbase/build/genosrelease:defs.bzl", "os_release")
Tim Windelschmidtc2290c22024-08-15 19:56:00 +02006load("//osbase/build/mkimage:def.bzl", "node_image")
Serge Bazanski77cb6c52020-12-19 00:09:22 +01007
8go_library(
Lorenz Brund13c1c62022-03-30 19:58:58 +02009 name = "node",
Lorenz Brune306d782021-09-01 13:01:06 +020010 srcs = [
11 "ids.go",
Serge Bazanski1f789542024-05-22 14:01:50 +020012 "labels.go",
Lorenz Brun0e291a12023-06-01 12:22:45 +020013 "net_ips.go",
Serge Bazanski93d593b2023-03-28 16:43:47 +020014 "net_protocols.go",
Lorenz Brune306d782021-09-01 13:01:06 +020015 "ports.go",
Jan Schär39f4f5c2024-10-29 09:41:50 +010016 "validation.go",
Lorenz Brune306d782021-09-01 13:01:06 +020017 ],
Serge Bazanski31370b02021-01-07 16:31:14 +010018 importpath = "source.monogon.dev/metropolis/node",
Tim Windelschmidt03000772023-07-03 02:19:28 +020019 visibility = [
20 "//metropolis:__subpackages__",
21 "@io_k8s_kubernetes//pkg/registry:__subpackages__",
22 ],
Timon Stampfli91bcf462024-12-15 16:57:05 +010023 deps = ["//metropolis/proto/common"],
Serge Bazanski77cb6c52020-12-19 00:09:22 +010024)
Serge Bazanski140bddc2020-06-05 21:01:19 +020025
Lorenz Brun313816f2020-12-22 16:52:26 +010026# debug_build checks if we're building in debug mode and enables various debug features for the image.
Lorenz Brun70f65b22020-07-08 17:02:47 +020027config_setting(
28 name = "debug_build",
29 values = {
30 "compilation_mode": "dbg",
31 },
32)
33
Lorenz Brun2ecccae2024-11-27 22:03:35 +010034exports_files([
35 "passwd",
36])
37
Lorenz Brun3a99c592021-01-26 19:57:21 +010038erofs_image(
39 name = "rootfs",
Serge Bazanski140bddc2020-06-05 21:01:19 +020040 files = {
Serge Bazanskieac8f732021-10-05 23:30:37 +020041 "//metropolis/node/core": "/core",
Serge Bazanski140bddc2020-06-05 21:01:19 +020042
Jan Schär91bf1c82024-07-29 17:31:33 +020043 # CA Certificate bundle & os-release & resolv.conf & hosts
Lorenz Brun3a99c592021-01-26 19:57:21 +010044 # These should not be explicitly used by Metropolis code and are only here for compatibility with
45 # paths hardcoded by standard libraries (like Go's).
Serge Bazanski140bddc2020-06-05 21:01:19 +020046 "@cacerts//file": "/etc/ssl/cert.pem",
Lorenz Brun2ecccae2024-11-27 22:03:35 +010047 "//metropolis/node:passwd": "/etc/passwd",
Jan Schär91bf1c82024-07-29 17:31:33 +020048 "//osbase/net/dns:resolv.conf": "/etc/resolv.conf",
49 "//osbase/net/dns:hosts": "/etc/hosts",
Serge Bazanski140bddc2020-06-05 21:01:19 +020050 ":os-release-info": "/etc/os-release",
51
Serge Bazanski6d563ca2023-06-14 13:44:20 +020052 # Metrics exporters
53 "@com_github_prometheus_node_exporter//:node_exporter": "/metrics/bin/node_exporter",
54
Serge Bazanski140bddc2020-06-05 21:01:19 +020055 # Hyperkube
Serge Bazanski77cb6c52020-12-19 00:09:22 +010056 "//metropolis/node/kubernetes/hyperkube": "/kubernetes/bin/kube",
Serge Bazanski140bddc2020-06-05 21:01:19 +020057
58 # runsc/gVisor
Lorenz Brund13c1c62022-03-30 19:58:58 +020059 "@dev_gvisor_gvisor//runsc": "/containerd/bin/runsc",
60 "@dev_gvisor_gvisor//shim": "/containerd/bin/containerd-shim-runsc-v1",
Serge Bazanski140bddc2020-06-05 21:01:19 +020061
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020062 # runc (runtime in files_cc because of cgo)
Lorenz Brun0ec0c532024-08-29 12:39:47 +000063 "@com_github_containerd_containerd_v2//cmd/containerd-shim-runc-v2": "/containerd/bin/containerd-shim-runc-v2",
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020064
Serge Bazanski140bddc2020-06-05 21:01:19 +020065 # Containerd
Lorenz Brun0ec0c532024-08-29 12:39:47 +000066 "@com_github_containerd_containerd_v2//cmd/containerd": "/containerd/bin/containerd",
Serge Bazanski140bddc2020-06-05 21:01:19 +020067
68 # Containerd config files
Serge Bazanski77cb6c52020-12-19 00:09:22 +010069 "//metropolis/node/kubernetes/containerd:runsc.toml": "/containerd/conf/runsc.toml",
70 "//metropolis/node/kubernetes/containerd:config.toml": "/containerd/conf/config.toml",
71 "//metropolis/node/kubernetes/containerd:cnispec.gojson": "/containerd/conf/cnispec.gojson",
Serge Bazanski140bddc2020-06-05 21:01:19 +020072
Lorenz Brun8b0431a2020-07-13 16:56:36 +020073 # Containerd preseed bundles
Tim Windelschmidt0974b222024-01-16 14:04:15 +010074 "//metropolis/test/e2e/preseedtest:preseedtest_tarball": "/containerd/preseed/k8s.io/preseedtest.tar",
Tim Windelschmidt93020d72024-02-13 18:13:07 +010075 "//metropolis/node/kubernetes/pause:pause_tarball": "/containerd/preseed/k8s.io/pause.tar",
Lorenz Brun8b0431a2020-07-13 16:56:36 +020076
Serge Bazanski140bddc2020-06-05 21:01:19 +020077 # CNI Plugins
78 "@com_github_containernetworking_plugins//plugins/main/loopback": "/containerd/bin/cni/loopback",
79 "@com_github_containernetworking_plugins//plugins/main/ptp": "/containerd/bin/cni/ptp",
80 "@com_github_containernetworking_plugins//plugins/ipam/host-local": "/containerd/bin/cni/host-local",
Serge Bazanskic3ae7582020-06-08 17:15:26 +020081
Lorenz Brun70f65b22020-07-08 17:02:47 +020082 # Delve
83 "@com_github_go_delve_delve//cmd/dlv:dlv": "/dlv",
Serge Bazanski140bddc2020-06-05 21:01:19 +020084 },
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020085 files_cc = {
Serge Bazanskieac8f732021-10-05 23:30:37 +020086 "//metropolis/node/core/minit": "/init",
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020087 # runc runtime, with cgo
88 "@com_github_opencontainers_runc//:runc": "/containerd/bin/runc",
Lorenz Brunddd6caf2021-03-04 17:16:04 +010089 "@xfsprogs//:mkfs": "/bin/mkfs.xfs",
Lorenz Brune306d782021-09-01 13:01:06 +020090 "@chrony//:chrony": "/time/chrony",
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020091 },
Serge Bazanskia3938142022-04-04 17:04:47 +020092 fsspecs = [
93 ":erofs-layout.fsspec",
Tim Windelschmidtc2290c22024-08-15 19:56:00 +020094 "//osbase/build:earlydev.fsspec",
Tim Windelschmidt65bf3112024-04-08 21:32:14 +020095 "//third_party:firmware",
Serge Bazanskia3938142022-04-04 17:04:47 +020096 ],
Lorenz Brun3a99c592021-01-26 19:57:21 +010097 symlinks = {
98 "/ephemeral/machine-id": "/etc/machine-id",
Lorenz Brun3a99c592021-01-26 19:57:21 +010099 },
Serge Bazanski731d00a2020-02-03 19:08:07 +0100100)
101
Mateusz Zalega8c2c7712022-01-25 19:42:21 +0100102verity_image(
103 name = "verity_rootfs",
104 source = ":rootfs",
105)
106
Lorenz Brun2f9f3872021-09-29 19:48:08 +0200107efi_unified_kernel_image(
108 name = "kernel_efi",
Lorenz Brun6cb00ed2024-02-08 17:49:19 +0100109 cmdline = "console=ttyS0,115200 console=ttyS1,115200 console=tty0 quiet rootfstype=erofs init=/init loadpin.exclude=kexec-image,kexec-initramfs kernel.unknown_nmi_panic=1",
Tim Windelschmidt65bf3112024-04-08 21:32:14 +0200110 initrd = ["//third_party:ucode"],
Lorenz Brun2f9f3872021-09-29 19:48:08 +0200111 kernel = "//third_party/linux",
112 os_release = ":os-release-info",
Mateusz Zalega8c2c7712022-01-25 19:42:21 +0100113 verity = ":verity_rootfs",
Lorenz Brun2f9f3872021-09-29 19:48:08 +0200114)
115
Lorenz Brunf758ce42021-11-09 03:40:43 +0100116# An intermediary "bundle" format until we finalize the actual bundle format. This is NOT stable until migrated
117# to the actual bundle format.
118# TODO(lorenz): Replace this
119pkg_zip(
Lorenz Brund13c1c62022-03-30 19:58:58 +0200120 name = "bundle",
Lorenz Brunf758ce42021-11-09 03:40:43 +0100121 srcs = [
122 ":kernel_efi",
Mateusz Zalega8c2c7712022-01-25 19:42:21 +0100123 ":verity_rootfs",
Lorenz Brunf758ce42021-11-09 03:40:43 +0100124 ],
Lorenz Brunf8ede092021-11-08 20:50:57 +0100125 visibility = ["//visibility:public"],
Lorenz Brunf758ce42021-11-09 03:40:43 +0100126)
127
Lorenz Brun1dc60af2023-10-03 15:40:09 +0200128node_image(
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200129 name = "image",
Tim Windelschmidt272c8302024-11-05 05:17:44 +0100130 abloader = "//metropolis/node/core/abloader",
Tim Windelschmidt8e19fa42024-11-12 13:39:43 +0000131 bios_bootcode = "//metropolis/node/core/bios_bootcode",
Lorenz Brun1dc60af2023-10-03 15:40:09 +0200132 kernel = ":kernel_efi",
133 system = ":verity_rootfs",
Serge Bazanski0be9be82021-01-07 15:23:44 +0100134 visibility = [
Mateusz Zalegafed8fe52022-07-14 16:19:35 +0200135 "//metropolis/cli/metroctl/test:__subpackages__",
Serge Bazanski0be9be82021-01-07 15:23:44 +0100136 "//metropolis/test/e2e:__subpackages__",
Serge Bazanskif12bedf2021-01-15 16:58:50 +0100137 "//metropolis/test/launch:__subpackages__",
Serge Bazanski0be9be82021-01-07 15:23:44 +0100138 ],
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200139)
140
Lorenz Brun878f5f92020-05-12 16:15:39 +0200141os_release(
142 name = "os-release-info",
Serge Bazanski662b5b32020-12-21 13:49:00 +0100143 os_id = "metropolis-node",
144 os_name = "Metropolis Node",
Serge Bazanski30494c12023-11-28 16:27:24 +0100145 stamp_var = "STABLE_MONOGON_metropolis_version",
Lorenz Brun878f5f92020-05-12 16:15:39 +0200146)
Serge Bazanski1f789542024-05-22 14:01:50 +0200147
148go_test(
149 name = "node_test",
Jan Schär39f4f5c2024-10-29 09:41:50 +0100150 srcs = [
151 "labels_test.go",
152 "validation_test.go",
153 ],
Serge Bazanski1f789542024-05-22 14:01:50 +0200154 embed = [":node"],
Serge Bazanskidd2b80f2024-09-24 13:06:27 +0000155 deps = ["@io_k8s_apimachinery//pkg/util/validation"],
Serge Bazanski1f789542024-05-22 14:01:50 +0200156)