diff --git a/cli/kata-check.go b/cli/kata-check.go index 26bc9f25e..75f427f36 100644 --- a/cli/kata-check.go +++ b/cli/kata-check.go @@ -35,6 +35,9 @@ type kernelModule struct { // maps parameter names to values parameters map[string]string + + // if it is definitely required + required bool } type vmContainerCapableDetails struct { @@ -124,8 +127,11 @@ func haveKernelModule(module string) bool { // Now, check if the module is unloaded, but available. // And modprobe it if so. cmd := exec.Command(modProbeCmd, module) - err := cmd.Run() - return err == nil + if output, err := cmd.CombinedOutput(); err != nil { + kataLog.WithField("module", module).WithError(err).Warnf("modprobe insert module failed: %s", string(output)) + return false + } + return true } // checkCPU checks all required CPU attributes modules and returns a count of @@ -200,7 +206,9 @@ func checkKernelModules(modules map[string]kernelModule, handler kernelParamHand if !haveKernelModule(module) { kataLog.WithFields(fields).Error("kernel property not found") - count++ + if details.required { + count++ + } continue } diff --git a/cli/kata-check_amd64.go b/cli/kata-check_amd64.go index 2aa34f34e..21e210e89 100644 --- a/cli/kata-check_amd64.go +++ b/cli/kata-check_amd64.go @@ -15,14 +15,15 @@ import ( ) const ( - cpuFlagsTag = genericCPUFlagsTag - archCPUVendorField = genericCPUVendorField - archCPUModelField = genericCPUModelField - archGenuineIntel = "GenuineIntel" - archAuthenticAMD = "AuthenticAMD" - msgKernelVM = "Kernel-based Virtual Machine" - msgKernelVirtio = "Host kernel accelerator for virtio" - msgKernelVirtioNet = "Host kernel accelerator for virtio network" + cpuFlagsTag = genericCPUFlagsTag + archCPUVendorField = genericCPUVendorField + archCPUModelField = genericCPUModelField + archGenuineIntel = "GenuineIntel" + archAuthenticAMD = "AuthenticAMD" + msgKernelVM = "Kernel-based Virtual Machine" + msgKernelVirtio = "Host kernel accelerator for virtio" + msgKernelVirtioNet = "Host kernel accelerator for virtio network" + msgKernelVirtioVhostVsock = "Host Support for Linux VM Sockets" ) // CPU types @@ -75,17 +76,25 @@ func setCPUtype() error { } archRequiredKernelModules = map[string]kernelModule{ "kvm": { - desc: msgKernelVM, + desc: msgKernelVM, + required: true, }, "kvm_intel": { desc: "Intel KVM", parameters: kvmIntelParams, + required: true, }, "vhost": { - desc: msgKernelVirtio, + desc: msgKernelVirtio, + required: true, }, "vhost_net": { - desc: msgKernelVirtioNet, + desc: msgKernelVirtioNet, + required: true, + }, + "vhost_vsock": { + desc: msgKernelVirtioVhostVsock, + required: false, }, } } else if cpuType == cpuTypeAMD { @@ -99,16 +108,24 @@ func setCPUtype() error { } archRequiredKernelModules = map[string]kernelModule{ "kvm": { - desc: msgKernelVM, + desc: msgKernelVM, + required: true, }, "kvm_amd": { - desc: "AMD KVM", + desc: "AMD KVM", + required: true, }, "vhost": { - desc: msgKernelVirtio, + desc: msgKernelVirtio, + required: true, }, "vhost_net": { - desc: msgKernelVirtioNet, + desc: msgKernelVirtioNet, + required: true, + }, + "vhost_vsock": { + desc: msgKernelVirtioVhostVsock, + required: false, }, } } diff --git a/cli/kata-check_arm64.go b/cli/kata-check_arm64.go index 0b116ad65..0128287c9 100644 --- a/cli/kata-check_arm64.go +++ b/cli/kata-check_arm64.go @@ -30,13 +30,20 @@ var archRequiredCPUAttribs = map[string]string{} // required module parameters. var archRequiredKernelModules = map[string]kernelModule{ "kvm": { - desc: "Kernel-based Virtual Machine", + desc: "Kernel-based Virtual Machine", + required: true, }, "vhost": { - desc: "Host kernel accelerator for virtio", + desc: "Host kernel accelerator for virtio", + required: true, }, "vhost_net": { - desc: "Host kernel accelerator for virtio network", + desc: "Host kernel accelerator for virtio network", + required: true, + }, + "vhost_vsock": { + desc: "Host Support for Linux VM Sockets", + required: false, }, } diff --git a/cli/kata-check_ppc64le.go b/cli/kata-check_ppc64le.go index f26e4df93..4d7ec3494 100644 --- a/cli/kata-check_ppc64le.go +++ b/cli/kata-check_ppc64le.go @@ -42,10 +42,16 @@ var archRequiredCPUAttribs = map[string]string{} // required module parameters. var archRequiredKernelModules = map[string]kernelModule{ "kvm": { - desc: "Kernel-based Virtual Machine", + desc: "Kernel-based Virtual Machine", + required: true, }, "kvm_hv": { - desc: "Kernel-based Virtual Machine hardware virtualization", + desc: "Kernel-based Virtual Machine hardware virtualization", + required: true, + }, + "vhost_vsock": { + desc: "Host Support for Linux VM Sockets", + required: false, }, } diff --git a/cli/kata-check_s390x.go b/cli/kata-check_s390x.go index 43a0ed82d..1e5f42d50 100644 --- a/cli/kata-check_s390x.go +++ b/cli/kata-check_s390x.go @@ -33,7 +33,12 @@ var archRequiredCPUAttribs = map[string]string{} // required module parameters. var archRequiredKernelModules = map[string]kernelModule{ "kvm": { - desc: "Kernel-based Virtual Machine", + desc: "Kernel-based Virtual Machine", + required: true, + }, + "vhost_vsock": { + desc: "Host Support for Linux VM Sockets", + required: false, }, }