From e9936cf0da9ff19f0e6693c3019c022961b829de Mon Sep 17 00:00:00 2001 From: Thomas Dreibholz Date: Sat, 20 Feb 2021 20:09:16 +0100 Subject: [PATCH] Added option for audio controller. --- builder/virtualbox/iso/builder.go | 13 +++++++++++++ builder/virtualbox/iso/step_create_vm.go | 6 ++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/builder/virtualbox/iso/builder.go b/builder/virtualbox/iso/builder.go index 618d88a33..5307ea955 100644 --- a/builder/virtualbox/iso/builder.go +++ b/builder/virtualbox/iso/builder.go @@ -64,6 +64,11 @@ type Config struct { // When set to Am79C960, the NICs are AMD PCnet-ISA/NE2100 (Am79C960). // When set to virtio, the NICs are VirtIO. NICType string `mapstructure:"nic_type" required:"false"` + // The audio controller type to be used. + // When set to ac97, the audio controller is ICH AC97 (default). + // When set to hda, the audio controller is Intel HD Audio. + // When set to sb16, the audio controller is SoundBlaster 16. + AudioController string `mapstructure:"audio_controller" required:"false"` // The guest OS type being installed. By default this is other, but you can // get dramatic performance improvements by setting this to the proper // value. To view all available values for this run VBoxManage list @@ -220,6 +225,14 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, []string, error) { errs, errors.New("NIC type can only be 82540EM, 82543GC, 82545EM, Am79C970A, Am79C973, Am79C960 or virtio")) } + switch b.config.AudioController { + case "ac97", "hda", "sb16": + // do nothing + default: + errs = packersdk.MultiErrorAppend( + errs, errors.New("Audio controller type can only be ac97, hda or sb16")) + } + if b.config.GuestOSType == "" { b.config.GuestOSType = "Other" } diff --git a/builder/virtualbox/iso/step_create_vm.go b/builder/virtualbox/iso/step_create_vm.go index 1810789f3..e258551c0 100644 --- a/builder/virtualbox/iso/step_create_vm.go +++ b/builder/virtualbox/iso/step_create_vm.go @@ -40,9 +40,11 @@ func (s *stepCreateVM) Run(ctx context.Context, state multistep.StateBag) multis commands[4] = []string{"modifyvm", name, "--usb", map[bool]string{true: "on", false: "off"}[config.HWConfig.USB]} if strings.ToLower(config.HWConfig.Sound) == "none" { - commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound} + commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound, + "--audiocontroller", config.AudioController} } else { - commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound, "--audioin", "on", "--audioout", "on"} + commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound, "--audioin", "on", "--audioout", "on", + "--audiocontroller", config.AudioController} } commands[6] = []string{"modifyvm", name, "--chipset", config.Chipset}