diff --git a/builder/qemu/builder.go b/builder/qemu/builder.go index 971613dd8..77178ffd2 100644 --- a/builder/qemu/builder.go +++ b/builder/qemu/builder.go @@ -139,7 +139,7 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { } if b.config.MachineType == "" { - b.config.MachineType = "pc-1.0" + b.config.MachineType = "pc" } if b.config.OutputDir == "" { diff --git a/builder/qemu/step_forward_ssh.go b/builder/qemu/step_forward_ssh.go index 7c7925b17..3b84d26c1 100644 --- a/builder/qemu/step_forward_ssh.go +++ b/builder/qemu/step_forward_ssh.go @@ -2,11 +2,12 @@ package qemu import ( "fmt" - "github.com/mitchellh/multistep" - "github.com/mitchellh/packer/packer" "log" "math/rand" "net" + + "github.com/mitchellh/multistep" + "github.com/mitchellh/packer/packer" ) // This step adds a NAT port forwarding definition so that SSH is available @@ -23,9 +24,16 @@ func (s *stepForwardSSH) Run(state multistep.StateBag) multistep.StepAction { log.Printf("Looking for available SSH port between %d and %d", config.SSHHostPortMin, config.SSHHostPortMax) var sshHostPort uint + var offset uint = 0 + portRange := int(config.SSHHostPortMax - config.SSHHostPortMin) + if portRange > 0 { + // Have to check if > 0 to avoid a panic + offset = uint(rand.Intn(portRange)) + } + for { - sshHostPort = uint(rand.Intn(portRange)) + config.SSHHostPortMin + sshHostPort = offset + config.SSHHostPortMin log.Printf("Trying port: %d", sshHostPort) l, err := net.Listen("tcp", fmt.Sprintf(":%d", sshHostPort)) if err == nil { diff --git a/builder/qemu/step_run.go b/builder/qemu/step_run.go index 6d4b43d6e..82a98dbba 100644 --- a/builder/qemu/step_run.go +++ b/builder/qemu/step_run.go @@ -2,11 +2,12 @@ package qemu import ( "fmt" - "github.com/mitchellh/multistep" - "github.com/mitchellh/packer/packer" "log" "path/filepath" "strings" + + "github.com/mitchellh/multistep" + "github.com/mitchellh/packer/packer" ) // stepRun runs the virtual machine @@ -78,13 +79,12 @@ func getCommandArgs(bootDrive string, state multistep.StateBag) ([]string, error defaultArgs["-name"] = vmName defaultArgs["-machine"] = fmt.Sprintf("type=%s", config.MachineType) - defaultArgs["-netdev"] = "user,id=user.0" + defaultArgs["-netdev"] = fmt.Sprintf("user,id=user.0,hostfwd=tcp::%v-:22", sshHostPort) defaultArgs["-device"] = fmt.Sprintf("%s,netdev=user.0", config.NetDevice) defaultArgs["-drive"] = fmt.Sprintf("file=%s,if=%s", imgPath, config.DiskInterface) defaultArgs["-cdrom"] = isoPath defaultArgs["-boot"] = bootDrive defaultArgs["-m"] = "512M" - defaultArgs["-redir"] = fmt.Sprintf("tcp:%v::22", sshHostPort) defaultArgs["-vnc"] = vnc // Append the accelerator to the machine type if it is specified