blob: 109b0f524d7e1e7fb60350e2af83856f29c73275 [file] [log] [blame]
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
load("@rules_pkg//:pkg.bzl", "pkg_zip")
load("//build/go:def.bzl", "go_binary_with_tag")
load("//osbase/build:def.bzl", "erofs_image", "verity_image")
load("//osbase/build:efi.bzl", "efi_unified_kernel_image")
load("//osbase/build/genosrelease:defs.bzl", "os_release")
load("//osbase/build/mkimage:def.bzl", "node_image")
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"],
)
# 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",
},
)
exports_files([
"passwd",
])
go_binary_with_tag(
name = "runc",
binary = "@com_github_opencontainers_runc//:runc",
gotags = ["seccomp"],
)
erofs_image(
name = "rootfs",
files = {
"/core": "//metropolis/node/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).
"/etc/ssl/cert.pem": "@cacerts//file",
"/etc/passwd": ":passwd",
"/etc/resolv.conf": "//osbase/net/dns:resolv.conf",
"/etc/hosts": "//osbase/net/dns:hosts",
"/etc/os-release": ":os-release-info",
# Metrics exporters
"/metrics/bin/node_exporter": "@com_github_prometheus_node_exporter//:node_exporter",
# Hyperkube
"/kubernetes/bin/kube": "//metropolis/node/kubernetes/hyperkube",
# runsc/gVisor
"/containerd/bin/runsc": "@dev_gvisor_gvisor//runsc",
"/containerd/bin/containerd-shim-runsc-v1": "@dev_gvisor_gvisor//shim",
# runc (runtime in files_cc because of cgo)
"/containerd/bin/containerd-shim-runc-v2": "@com_github_containerd_containerd_v2//cmd/containerd-shim-runc-v2",
# Containerd
"/containerd/bin/containerd": "@com_github_containerd_containerd_v2//cmd/containerd",
# Containerd config files
"/containerd/conf/runsc.toml": "//metropolis/node/kubernetes/containerd:runsc.toml",
"/containerd/conf/config.toml": "//metropolis/node/kubernetes/containerd:config.toml",
"/containerd/conf/cnispec.gojson": "//metropolis/node/kubernetes/containerd:cnispec.gojson",
# Containerd preseed bundles
"/containerd/preseed/k8s.io/preseedtest.tar": "//metropolis/test/e2e/preseedtest:preseedtest_tarball",
"/containerd/preseed/k8s.io/pause.tar": "//metropolis/node/kubernetes/pause:pause_tarball",
# CNI Plugins
"/containerd/bin/cni/loopback": "@com_github_containernetworking_plugins//plugins/main/loopback",
"/containerd/bin/cni/ptp": "@com_github_containernetworking_plugins//plugins/main/ptp",
"/containerd/bin/cni/host-local": "@com_github_containernetworking_plugins//plugins/ipam/host-local",
# Delve
"/dlv": "@com_github_go_delve_delve//cmd/dlv:dlv",
},
files_cc = {
"/init": "//metropolis/node/core/minit",
# runc runtime, with cgo
"/containerd/bin/runc": ":runc",
"/bin/mkfs.xfs": "@xfsprogs//:mkfs",
"/time/chrony": "@chrony//: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",
bios_bootcode = "//metropolis/node/core/bios_bootcode",
kernel = ":kernel_efi",
system = ":verity_rootfs",
visibility = [
"//metropolis/cli/metroctl/test:__subpackages__",
"//metropolis/test/e2e:__subpackages__",
"//metropolis/test/launch:__subpackages__",
],
)
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"],
)