blob: ba678e6ea4a98ff2eb1420a74e12e66d40910888 [file] [log] [blame]
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
load("//osbase/build:def.bzl", "erofs_image", "verity_image")
load("//osbase/build:efi.bzl", "efi_unified_kernel_image")
load("//osbase/build/mkimage:def.bzl", "node_image")
load("@rules_pkg//:pkg.bzl", "pkg_zip")
go_library(
name = "node",
srcs = [
"ids.go",
"labels.go",
"net_ips.go",
"net_protocols.go",
"ports.go",
"validation.go",
],
importpath = "source.monogon.dev/metropolis/node",
visibility = [
"//metropolis:__subpackages__",
"@io_k8s_kubernetes//pkg/registry:__subpackages__",
],
deps = [
"//metropolis/proto/common",
"@com_github_vishvananda_netlink//:netlink",
"@io_k8s_apimachinery//pkg/util/validation",
],
)
# debug_build checks if we're building in debug mode and enables various debug features for the image.
config_setting(
name = "debug_build",
values = {
"compilation_mode": "dbg",
},
)
erofs_image(
name = "rootfs",
files = {
"//metropolis/node/core": "/core",
# CA Certificate bundle & os-release & resolv.conf & hosts
# These should not be explicitly used by Metropolis code and are only here for compatibility with
# paths hardcoded by standard libraries (like Go's).
"@cacerts//file": "/etc/ssl/cert.pem",
"//osbase/net/dns:resolv.conf": "/etc/resolv.conf",
"//osbase/net/dns:hosts": "/etc/hosts",
":os-release-info": "/etc/os-release",
# Metrics exporters
"@com_github_prometheus_node_exporter//:node_exporter": "/metrics/bin/node_exporter",
# Hyperkube
"//metropolis/node/kubernetes/hyperkube": "/kubernetes/bin/kube",
# runsc/gVisor
"@dev_gvisor_gvisor//runsc": "/containerd/bin/runsc",
"@dev_gvisor_gvisor//shim": "/containerd/bin/containerd-shim-runsc-v1",
# runc (runtime in files_cc because of cgo)
"@com_github_containerd_containerd//cmd/containerd-shim-runc-v2": "/containerd/bin/containerd-shim-runc-v2",
# Containerd
"@com_github_containerd_containerd//cmd/containerd": "/containerd/bin/containerd",
# Containerd config files
"//metropolis/node/kubernetes/containerd:runsc.toml": "/containerd/conf/runsc.toml",
"//metropolis/node/kubernetes/containerd:config.toml": "/containerd/conf/config.toml",
"//metropolis/node/kubernetes/containerd:cnispec.gojson": "/containerd/conf/cnispec.gojson",
# Containerd preseed bundles
"//metropolis/test/e2e/preseedtest:preseedtest_tarball": "/containerd/preseed/k8s.io/preseedtest.tar",
"//metropolis/node/kubernetes/pause:pause_tarball": "/containerd/preseed/k8s.io/pause.tar",
# CNI Plugins
"@com_github_containernetworking_plugins//plugins/main/loopback": "/containerd/bin/cni/loopback",
"@com_github_containernetworking_plugins//plugins/main/ptp": "/containerd/bin/cni/ptp",
"@com_github_containernetworking_plugins//plugins/ipam/host-local": "/containerd/bin/cni/host-local",
# Delve
"@com_github_go_delve_delve//cmd/dlv:dlv": "/dlv",
},
files_cc = {
"//metropolis/node/core/minit": "/init",
# runc runtime, with cgo
"@com_github_opencontainers_runc//:runc": "/containerd/bin/runc",
"@xfsprogs//:mkfs": "/bin/mkfs.xfs",
"@chrony//:chrony": "/time/chrony",
},
fsspecs = [
":erofs-layout.fsspec",
"//osbase/build:earlydev.fsspec",
"//third_party:firmware",
],
symlinks = {
"/ephemeral/machine-id": "/etc/machine-id",
},
)
verity_image(
name = "verity_rootfs",
source = ":rootfs",
)
efi_unified_kernel_image(
name = "kernel_efi",
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",
initrd = ["//third_party:ucode"],
kernel = "//third_party/linux",
os_release = ":os-release-info",
verity = ":verity_rootfs",
)
# An intermediary "bundle" format until we finalize the actual bundle format. This is NOT stable until migrated
# to the actual bundle format.
# TODO(lorenz): Replace this
pkg_zip(
name = "bundle",
srcs = [
":kernel_efi",
":verity_rootfs",
],
visibility = ["//visibility:public"],
)
node_image(
name = "image",
abloader = "//metropolis/node/core/abloader",
kernel = ":kernel_efi",
system = ":verity_rootfs",
visibility = [
"//metropolis/cli/metroctl/test:__subpackages__",
"//metropolis/test/e2e:__subpackages__",
"//metropolis/test/launch:__subpackages__",
],
)
load("//osbase/build/genosrelease:defs.bzl", "os_release")
os_release(
name = "os-release-info",
os_id = "metropolis-node",
os_name = "Metropolis Node",
stamp_var = "STABLE_MONOGON_metropolis_version",
)
go_test(
name = "node_test",
srcs = [
"labels_test.go",
"validation_test.go",
],
embed = [":node"],
deps = ["@io_k8s_apimachinery//pkg/util/validation"],
)