Skip to content

Commit 6b96db7

Browse files
committed
Make integration tests work in aarch64
Makefile and CPU templates handling is not quite ready for aarch64. Signed-off-by: Kazuyoshi Kato <[email protected]>
1 parent 54e0edc commit 6b96db7

File tree

5 files changed

+37
-9
lines changed

5 files changed

+37
-9
lines changed

Makefile

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,18 @@ FIRECRACKER_CONTAINERD_BUILDER_IMAGE?=golang:1.13-buster
3232
export FIRECRACKER_CONTAINERD_TEST_IMAGE?=localhost/firecracker-containerd-test
3333
export GO_CACHE_VOLUME_NAME?=gocache
3434

35+
# This Makefile uses Firecracker's pre-build Linux kernels for x86_64 and aarch64.
36+
host_arch=$(shell arch)
37+
ifeq ($(host_arch),x86_64)
38+
kernel_sha256sum="bc7e2dbf12cf7038937abf42056f6bcd405d3eef4d27aaa3016f0ba15069ae4b"
39+
else ifeq ($(host_arch),aarch64)
40+
kernel_sha256sum="e2d7c3d6cc123de9e6052d1f434ca7b47635a1f630d63f7fcc1b7164958375e4"
41+
else
42+
$(error "$(host_arch) is not supported by Firecracker")
43+
endif
44+
FIRECRACKER_TARGET?=$(host_arch)-unknown-linux-musl
45+
3546
FIRECRACKER_DIR=$(SUBMODULES)/firecracker
36-
FIRECRACKER_TARGET?=x86_64-unknown-linux-musl
3747
FIRECRACKER_BIN=$(FIRECRACKER_DIR)/build/cargo_target/$(FIRECRACKER_TARGET)/release/firecracker
3848
FIRECRACKER_BUILDER_NAME?=firecracker-builder
3949
CARGO_CACHE_VOLUME_NAME?=cargocache
@@ -171,8 +181,8 @@ $(FIRECRACKER_CONTAINERD_RUNTIME_DIR) $(ETC_CONTAINERD):
171181
DEFAULT_VMLINUX_NAME?=default-vmlinux.bin
172182
$(DEFAULT_VMLINUX_NAME):
173183
curl --silent --show-error --retry 3 --max-time 30 --output $@ \
174-
"https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/kernels/vmlinux.bin"
175-
echo "bc7e2dbf12cf7038937abf42056f6bcd405d3eef4d27aaa3016f0ba15069ae4b $@" | sha256sum -c -
184+
"https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/$(host_arch)/kernels/vmlinux.bin"
185+
echo "$(kernel_sha256sum) $@" | sha256sum -c -
176186
chmod 0400 $@
177187

178188
DEFAULT_VMLINUX_INSTALLPATH=$(FIRECRACKER_CONTAINERD_RUNTIME_DIR)/$(DEFAULT_VMLINUX_NAME)

config/config.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/pkg/errors"
2222

23+
"github.com/firecracker-microvm/firecracker-containerd/internal"
2324
"github.com/firecracker-microvm/firecracker-containerd/internal/debug"
2425
"github.com/firecracker-microvm/firecracker-containerd/proto"
2526
models "github.com/firecracker-microvm/firecracker-go-sdk/client/models"
@@ -87,12 +88,14 @@ func LoadConfig(path string) (*Config, error) {
8788
KernelArgs: defaultKernelArgs,
8889
KernelImagePath: defaultKernelPath,
8990
RootDrive: defaultRootfsPath,
90-
CPUTemplate: string(defaultCPUTemplate),
9191
ShimBaseDir: defaultShimBaseDir,
9292
JailerConfig: JailerConfig{
9393
RuncConfigPath: runcConfigPath,
9494
},
9595
}
96+
if internal.SupportCPUTemplate() {
97+
cfg.CPUTemplate = string(defaultCPUTemplate)
98+
}
9699

97100
if err := json.Unmarshal(data, cfg); err != nil {
98101
return nil, errors.Wrapf(err, "failed to unmarshal config from %q", path)

internal/common.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"bytes"
1818
"fmt"
1919
"io"
20+
"runtime"
2021
)
2122

2223
const (
@@ -125,3 +126,9 @@ func GenerateStubContent(id string) (string, error) {
125126

126127
return fmt.Sprintf("%s%c%s", MagicStubBytes, byte(length), id), nil
127128
}
129+
130+
// SupportCPUTemplate returns true if Firecracker supports CPU templates on
131+
// the current architecture.
132+
func SupportCPUTemplate() bool {
133+
return runtime.GOARCH == "amd64"
134+
}

runtime/helpers.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
models "github.com/firecracker-microvm/firecracker-go-sdk/client/models"
2424

2525
"github.com/firecracker-microvm/firecracker-containerd/config"
26+
"github.com/firecracker-microvm/firecracker-containerd/internal"
2627
"github.com/firecracker-microvm/firecracker-containerd/proto"
2728
)
2829

@@ -33,10 +34,12 @@ const (
3334

3435
func machineConfigurationFromProto(cfg *config.Config, req *proto.FirecrackerMachineConfiguration) models.MachineConfiguration {
3536
config := models.MachineConfiguration{
36-
CPUTemplate: models.CPUTemplate(cfg.CPUTemplate),
37-
VcpuCount: firecracker.Int64(defaultCPUCount),
38-
MemSizeMib: firecracker.Int64(defaultMemSizeMb),
39-
HtEnabled: firecracker.Bool(cfg.HtEnabled),
37+
VcpuCount: firecracker.Int64(defaultCPUCount),
38+
MemSizeMib: firecracker.Int64(defaultMemSizeMb),
39+
HtEnabled: firecracker.Bool(cfg.HtEnabled),
40+
}
41+
if internal.SupportCPUTemplate() {
42+
config.CPUTemplate = models.CPUTemplate(cfg.CPUTemplate)
4043
}
4144

4245
if req == nil {

runtime/integ_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ var defaultRuntimeConfig = config.Config{
3838
KernelImagePath: "/var/lib/firecracker-containerd/runtime/default-vmlinux.bin",
3939
KernelArgs: "ro console=ttyS0 noapic reboot=k panic=1 pci=off nomodules systemd.journald.forward_to_console systemd.log_color=false systemd.unit=firecracker.target init=/sbin/overlay-init",
4040
RootDrive: "/var/lib/firecracker-containerd/runtime/default-rootfs.img",
41-
CPUTemplate: "T2",
4241
LogLevels: []string{"debug"},
4342
ShimBaseDir: shimBaseDir(),
4443
JailerConfig: config.JailerConfig{
@@ -47,6 +46,12 @@ var defaultRuntimeConfig = config.Config{
4746
},
4847
}
4948

49+
func init() {
50+
if internal.SupportCPUTemplate() {
51+
defaultRuntimeConfig.CPUTemplate = "T2"
52+
}
53+
}
54+
5055
func shimBaseDir() string {
5156
if v := os.Getenv(shimBaseDirEnvVar); v != "" {
5257
return v

0 commit comments

Comments
 (0)