Skip to content

Commit

Permalink
hypervisor: add bios option in configuration file
Browse files Browse the repository at this point in the history
This patch adds a new option in configuration file
this will allow users specify the path to a specific
firmware, if a path is not specified qemu uses the default firmware
(bios-256k.bin)

Fixes clearcontainers#686

Signed-off-by: Julio Montes <julio.montes@intel.com>
  • Loading branch information
Julio Montes committed Nov 27, 2017
1 parent 70b5c83 commit 3583bca
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ PKGLIBEXECDIR := $(LIBEXECDIR)/$(CCDIR)

KERNELPATH := $(PKGDATADIR)/vmlinuz.container
IMAGEPATH := $(PKGDATADIR)/clear-containers.img
FIRMWAREPATH :=

KERNELPARAMS :=

Expand Down Expand Up @@ -156,6 +157,7 @@ USER_VARS += DESTTARGET
USER_VARS += IMAGEPATH
USER_VARS += MACHINETYPE
USER_VARS += KERNELPATH
USER_VARS += FIRMWAREPATH
USER_VARS += KERNELPARAMS
USER_VARS += LIBEXECDIR
USER_VARS += LOCALSTATEDIR
Expand Down Expand Up @@ -215,6 +217,7 @@ var version = "$(VERSION)"
var defaultHypervisorPath = "$(QEMUPATH)"
var defaultImagePath = "$(IMAGEPATH)"
var defaultKernelPath = "$(KERNELPATH)"
var defaultFirmwarePath = "$(FIRMWAREPATH)"
var defaultShimPath = "$(SHIMPATH)"

const defaultKernelParams = "$(KERNELPARAMS)"
Expand Down Expand Up @@ -285,6 +288,7 @@ $(GENERATED_FILES): %: %.in Makefile VERSION
-e "s|@CONFIG_IN@|$(CONFIG_IN)|g" \
-e "s|@IMAGEPATH@|$(IMAGEPATH)|g" \
-e "s|@KERNELPATH@|$(KERNELPATH)|g" \
-e "s|@FIRMWAREPATH@|$(FIRMWAREPATH)|g" \
-e "s|@KERNELPARAMS@|$(KERNELPARAMS)|g" \
-e "s|@LOCALSTATEDIR@|$(LOCALSTATEDIR)|g" \
-e "s|@PKGLIBEXECDIR@|$(PKGLIBEXECDIR)|g" \
Expand Down
21 changes: 21 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ type hypervisor struct {
Path string `toml:"path"`
Kernel string `toml:"kernel"`
Image string `toml:"image"`
Firmware string `toml:"firmware"`
KernelParams string `toml:"kernel_params"`
MachineType string `toml:"machine_type"`
DefaultVCPUs int32 `toml:"default_vcpus"`
Expand Down Expand Up @@ -134,6 +135,19 @@ func (h hypervisor) image() (string, error) {
return resolvePath(p)
}

func (h hypervisor) firmware() (string, error) {
p := h.Firmware

if p == "" {
if defaultFirmwarePath == "" {
return "", nil
}
p = defaultFirmwarePath
}

return resolvePath(p)
}

func (h hypervisor) kernelParams() string {
if h.KernelParams == "" {
return defaultKernelParams
Expand Down Expand Up @@ -210,13 +224,19 @@ func newQemuHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
return vc.HypervisorConfig{}, err
}

firmware, err := h.firmware()
if err != nil {
return vc.HypervisorConfig{}, err
}

kernelParams := h.kernelParams()
machineType := h.machineType()

return vc.HypervisorConfig{
HypervisorPath: hypervisor,
KernelPath: kernel,
ImagePath: image,
FirmwarePath: firmware,
KernelParams: vc.DeserializeParams(strings.Fields(kernelParams)),
HypervisorMachineType: machineType,
DefaultVCPUs: h.defaultVCPUs(),
Expand Down Expand Up @@ -320,6 +340,7 @@ func loadConfiguration(configPath string, ignoreLogging bool) (resolvedConfigPat
HypervisorPath: defaultHypervisorPath,
KernelPath: defaultKernelPath,
ImagePath: defaultImagePath,
FirmwarePath: defaultFirmwarePath,
HypervisorMachineType: defaultMachineType,
DefaultVCPUs: defaultVCPUCount,
DefaultMemSz: defaultMemSize,
Expand Down
4 changes: 4 additions & 0 deletions config/configuration.toml.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ machine_type = "@MACHINETYPE@"
# trouble running pre-2.15 glibc
kernel_params = "@KERNELPARAMS@"

# Path to the firmware.
# If you want that qemu uses the default firmware leave this option empty
firmware = "@FIRMWAREPATH@"

# Default number of vCPUs per POD/VM:
# unspecified or 0 --> will be set to @DEFVCPUS@
# < 0 --> will be set to the actual number of physical cores
Expand Down
20 changes: 20 additions & 0 deletions config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -899,3 +899,23 @@ func TestGetDefaultConfigFile(t *testing.T) {
_, err = getDefaultConfigFile()
assert.Error(err)
}

func TestDefaultFirmware(t *testing.T) {
assert := assert.New(t)

f, err := ioutil.TempFile(os.TempDir(), "qboot.bin")
assert.NoError(err)
assert.NoError(f.Close())
defer os.RemoveAll(f.Name())

h := hypervisor{}
defaultFirmwarePath = ""
p, err := h.firmware()
assert.NoError(err)
assert.Empty(p)

defaultFirmwarePath = f.Name()
p, err = h.firmware()
assert.NoError(err)
assert.NotEmpty(p)
}

0 comments on commit 3583bca

Please sign in to comment.