diff --git a/CHANGELOG.md b/CHANGELOG.md index 80ceceff6..a195a23dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ BUG FIXES: [GH-554] * builder/openstack: Properly scrub password from logs [GH-554] * builder/virtualbox: No panic if SSH host port min/max is the same. [GH-594] +* builder/vmware: checks if `ifconfig` is in `/sbin` [GH-591] * builder/vmware: Host IP lookup works for non-C locales. [GH-592] * common/uuid: Use cryptographically secure PRNG when generating UUIDs. [GH-552] diff --git a/builder/vmware/host_ip_ifconfig.go b/builder/vmware/host_ip_ifconfig.go index 7c4204e17..28e434b33 100644 --- a/builder/vmware/host_ip_ifconfig.go +++ b/builder/vmware/host_ip_ifconfig.go @@ -3,6 +3,7 @@ package vmware import ( "bytes" "errors" + "os" "os/exec" "regexp" ) @@ -13,9 +14,20 @@ type IfconfigIPFinder struct { } func (f *IfconfigIPFinder) HostIP() (string, error) { - ifconfigPath, err := exec.LookPath("ifconfig") - if err != nil { - return "", err + var ifconfigPath string + + // On some systems, ifconfig is in /sbin which is generally not + // on the PATH for a standard user, so we just check that first. + if _, err := os.Stat("/sbin/ifconfig"); err == nil { + ifconfigPath = "/sbin/ifconfig" + } + + if ifconfigPath == "" { + var err error + ifconfigPath, err = exec.LookPath("ifconfig") + if err != nil { + return "", err + } } stdout := new(bytes.Buffer)