blob: 98994020c0b0996c3dd7b9810507a01bc21ad68f [file] [log] [blame]
Serge Bazanski77cb6c52020-12-19 00:09:22 +01001load("@io_bazel_rules_go//go:def.bzl", "go_library")
Lorenz Brun3a99c592021-01-26 19:57:21 +01002load("//metropolis/node/build:def.bzl", "erofs_image")
Lorenz Brun2f9f3872021-09-29 19:48:08 +02003load("//metropolis/node/build:efi.bzl", "efi_unified_kernel_image")
Serge Bazanski77cb6c52020-12-19 00:09:22 +01004
5go_library(
6 name = "go_default_library",
Lorenz Brune306d782021-09-01 13:01:06 +02007 srcs = [
8 "ids.go",
9 "ports.go",
10 ],
Serge Bazanski31370b02021-01-07 16:31:14 +010011 importpath = "source.monogon.dev/metropolis/node",
Serge Bazanski0be9be82021-01-07 15:23:44 +010012 visibility = ["//metropolis:__subpackages__"],
Serge Bazanski77cb6c52020-12-19 00:09:22 +010013)
Serge Bazanski140bddc2020-06-05 21:01:19 +020014
Lorenz Brun313816f2020-12-22 16:52:26 +010015# 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 +020016config_setting(
17 name = "debug_build",
18 values = {
19 "compilation_mode": "dbg",
20 },
21)
22
Lorenz Brun3a99c592021-01-26 19:57:21 +010023erofs_image(
24 name = "rootfs",
Serge Bazanski140bddc2020-06-05 21:01:19 +020025 extra_dirs = [
26 "/kubernetes/conf/flexvolume-plugins",
Lorenz Brun74e8e5c2021-01-26 14:00:50 +010027 "/containerd/plugins",
Lorenz Brun3a99c592021-01-26 19:57:21 +010028 "/sys",
29 "/proc",
30 "/dev",
31 "/esp",
32 "/tmp",
33 "/run",
34 "/ephemeral",
35 "/data",
Serge Bazanski731d00a2020-02-03 19:08:07 +010036 ],
Serge Bazanski140bddc2020-06-05 21:01:19 +020037 files = {
Serge Bazanskieac8f732021-10-05 23:30:37 +020038 "//metropolis/node/core": "/core",
Serge Bazanski140bddc2020-06-05 21:01:19 +020039
Lorenz Brun3a99c592021-01-26 19:57:21 +010040 # CA Certificate bundle & os-release & resolv.conf
41 # These should not be explicitly used by Metropolis code and are only here for compatibility with
42 # paths hardcoded by standard libraries (like Go's).
Serge Bazanski140bddc2020-06-05 21:01:19 +020043 "@cacerts//file": "/etc/ssl/cert.pem",
Lorenz Brun3a99c592021-01-26 19:57:21 +010044 "//metropolis/node/core/network/dns:resolv.conf": "/etc/resolv.conf",
Serge Bazanski140bddc2020-06-05 21:01:19 +020045 ":os-release-info": "/etc/os-release",
46
47 # Hyperkube
Serge Bazanski77cb6c52020-12-19 00:09:22 +010048 "//metropolis/node/kubernetes/hyperkube": "/kubernetes/bin/kube",
Serge Bazanski140bddc2020-06-05 21:01:19 +020049
Lorenz Brun339582b2020-07-29 18:13:35 +020050 # CoreDNS
51 "@com_github_coredns_coredns//:coredns": "/kubernetes/bin/coredns",
52
Serge Bazanski140bddc2020-06-05 21:01:19 +020053 # runsc/gVisor
54 "@com_github_google_gvisor//runsc": "/containerd/bin/runsc",
Serge Bazanskif12bedf2021-01-15 16:58:50 +010055 "@com_github_google_gvisor//shim/v2:containerd-shim-runsc-v1": "/containerd/bin/containerd-shim-runsc-v1",
Serge Bazanski140bddc2020-06-05 21:01:19 +020056
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020057 # runc (runtime in files_cc because of cgo)
58 "@com_github_containerd_containerd//cmd/containerd-shim-runc-v2": "/containerd/bin/containerd-shim-runc-v2",
59
Serge Bazanski140bddc2020-06-05 21:01:19 +020060 # Containerd
61 "@com_github_containerd_containerd//cmd/containerd": "/containerd/bin/containerd",
62
63 # Containerd config files
Serge Bazanski77cb6c52020-12-19 00:09:22 +010064 "//metropolis/node/kubernetes/containerd:runsc.toml": "/containerd/conf/runsc.toml",
65 "//metropolis/node/kubernetes/containerd:config.toml": "/containerd/conf/config.toml",
66 "//metropolis/node/kubernetes/containerd:cnispec.gojson": "/containerd/conf/cnispec.gojson",
Serge Bazanski140bddc2020-06-05 21:01:19 +020067
Lorenz Brun8b0431a2020-07-13 16:56:36 +020068 # Containerd preseed bundles
Serge Bazanski77cb6c52020-12-19 00:09:22 +010069 "//metropolis/test/e2e/preseedtest:preseedtest.tar": "/containerd/preseed/k8s.io/preseedtest.tar",
70 "//metropolis/test/e2e/k8s_cts:k8s_cts_image.tar": "/containerd/preseed/k8s.io/k8s_cts.tar",
Lorenz Brun30167f52021-03-17 17:49:01 +010071 "//metropolis/vm/smoketest:smoketest_container.tar": "/containerd/preseed/k8s.io/smoketest.tar",
Lorenz Brun8b0431a2020-07-13 16:56:36 +020072
Serge Bazanski140bddc2020-06-05 21:01:19 +020073 # CNI Plugins
74 "@com_github_containernetworking_plugins//plugins/main/loopback": "/containerd/bin/cni/loopback",
75 "@com_github_containernetworking_plugins//plugins/main/ptp": "/containerd/bin/cni/ptp",
76 "@com_github_containernetworking_plugins//plugins/ipam/host-local": "/containerd/bin/cni/host-local",
Serge Bazanskic3ae7582020-06-08 17:15:26 +020077
Lorenz Brun70f65b22020-07-08 17:02:47 +020078 # Delve
79 "@com_github_go_delve_delve//cmd/dlv:dlv": "/dlv",
Serge Bazanski140bddc2020-06-05 21:01:19 +020080 },
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020081 files_cc = {
Serge Bazanskieac8f732021-10-05 23:30:37 +020082 "//metropolis/node/core/minit": "/init",
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020083 # runc runtime, with cgo
84 "@com_github_opencontainers_runc//:runc": "/containerd/bin/runc",
Lorenz Brunddd6caf2021-03-04 17:16:04 +010085 "@xfsprogs//:mkfs": "/bin/mkfs.xfs",
Lorenz Brune306d782021-09-01 13:01:06 +020086 "@chrony//:chrony": "/time/chrony",
Lorenz Brun5e4fc2d2020-09-22 18:35:15 +020087 },
Lorenz Brun3a99c592021-01-26 19:57:21 +010088 symlinks = {
89 "/ephemeral/machine-id": "/etc/machine-id",
90 "/ephemeral/hosts": "/etc/hosts",
91 },
Serge Bazanski731d00a2020-02-03 19:08:07 +010092)
93
Lorenz Brun2f9f3872021-09-29 19:48:08 +020094efi_unified_kernel_image(
95 name = "kernel_efi",
Mateusz Zalegadc7e31c2021-10-07 22:23:39 +020096 cmdline = "console=ttyS0 root=PARTLABEL=METROPOLIS-SYSTEM rootfstype=erofs init=/init",
Lorenz Brun2f9f3872021-09-29 19:48:08 +020097 kernel = "//third_party/linux",
98 os_release = ":os-release-info",
99)
100
Serge Bazanski731d00a2020-02-03 19:08:07 +0100101genrule(
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200102 name = "image",
103 srcs = [
Lorenz Brun2f9f3872021-09-29 19:48:08 +0200104 ":kernel_efi",
Lorenz Brun3a99c592021-01-26 19:57:21 +0100105 ":rootfs",
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200106 ],
107 outs = [
Serge Bazanski662b5b32020-12-21 13:49:00 +0100108 "node.img",
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200109 ],
110 cmd = """
Serge Bazanski77cb6c52020-12-19 00:09:22 +0100111 $(location //metropolis/node/build/mkimage) \
Lorenz Brun2f9f3872021-09-29 19:48:08 +0200112 -efi $(location :kernel_efi) \
Lorenz Brun3a99c592021-01-26 19:57:21 +0100113 -system $(location :rootfs) \
Leopold Schabel65493072019-11-06 13:40:44 +0000114 -out $@
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200115 """,
Lorenz Brun0bcaaee2019-11-06 12:42:39 +0100116 tools = [
Serge Bazanski77cb6c52020-12-19 00:09:22 +0100117 "//metropolis/node/build/mkimage",
Lorenz Brun0bcaaee2019-11-06 12:42:39 +0100118 ],
Serge Bazanski0be9be82021-01-07 15:23:44 +0100119 visibility = [
Serge Bazanski0be9be82021-01-07 15:23:44 +0100120 "//metropolis/test/e2e:__subpackages__",
Serge Bazanskif12bedf2021-01-15 16:58:50 +0100121 "//metropolis/test/launch:__subpackages__",
Serge Bazanski0be9be82021-01-07 15:23:44 +0100122 ],
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200123)
124
125genrule(
126 name = "swtpm_data",
127 outs = [
128 "tpm/tpm2-00.permall",
129 "tpm/signkey.pem",
130 "tpm/issuercert.pem",
131 ],
132 cmd = """
133 mkdir -p tpm/ca
134
135 cat <<EOF > tpm/swtpm.conf
136create_certs_tool= /usr/share/swtpm/swtpm-localca
137create_certs_tool_config = tpm/swtpm-localca.conf
138create_certs_tool_options = /etc/swtpm-localca.options
139EOF
140
141 cat <<EOF > tpm/swtpm-localca.conf
142statedir = tpm/ca
143signingkey = tpm/ca/signkey.pem
144issuercert = tpm/ca/issuercert.pem
145certserial = tpm/ca/certserial
146EOF
147
148 swtpm_setup \
149 --tpmstate tpm \
150 --create-ek-cert \
151 --create-platform-cert \
152 --allow-signing \
153 --tpm2 \
154 --display \
155 --pcr-banks sha1,sha256,sha384,sha512 \
156 --config tpm/swtpm.conf
157
158 cp tpm/tpm2-00.permall $(location tpm/tpm2-00.permall)
159 cp tpm/ca/issuercert.pem $(location tpm/issuercert.pem)
160 cp tpm/ca/signkey.pem $(location tpm/signkey.pem)
161 """,
Serge Bazanski0be9be82021-01-07 15:23:44 +0100162 visibility = [
Serge Bazanski0be9be82021-01-07 15:23:44 +0100163 "//metropolis/test/e2e:__subpackages__",
Serge Bazanskif12bedf2021-01-15 16:58:50 +0100164 "//metropolis/test/launch:__subpackages__",
Serge Bazanski0be9be82021-01-07 15:23:44 +0100165 ],
Hendrik Hofstadt0d7c91e2019-10-23 21:44:47 +0200166)
Lorenz Brun878f5f92020-05-12 16:15:39 +0200167
Serge Bazanski77cb6c52020-12-19 00:09:22 +0100168load("//metropolis/node/build/genosrelease:defs.bzl", "os_release")
Lorenz Brun878f5f92020-05-12 16:15:39 +0200169
170os_release(
171 name = "os-release-info",
Serge Bazanski662b5b32020-12-21 13:49:00 +0100172 os_id = "metropolis-node",
173 os_name = "Metropolis Node",
174 stamp_var = "STABLE_METROPOLIS_version",
Lorenz Brun878f5f92020-05-12 16:15:39 +0200175)