Skip to content

Commit 11a2d0a

Browse files
authored
Merge pull request #11024 from ilya-zuyev/ilyaz/do_not_run_amd64_on_m1
Do not allow running darwin/amd64 minikube binary on darwin/arm64 systems
2 parents 7cb8b2d + 6aa7e11 commit 11a2d0a

File tree

7 files changed

+65
-1
lines changed

7 files changed

+65
-1
lines changed

cmd/minikube/cmd/root.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ import (
2525
"strings"
2626
"time"
2727

28+
"k8s.io/minikube/pkg/minikube/notify"
29+
"k8s.io/minikube/pkg/version"
30+
2831
"github.com/spf13/cobra"
2932
"github.com/spf13/pflag"
3033
"github.com/spf13/viper"
@@ -93,6 +96,11 @@ func Execute() {
9396
}
9497
}
9598

99+
if runtime.GOOS == "darwin" && detect.IsAmd64M1Emulation() {
100+
exit.Message(reason.WrongBinaryM1, "You are trying to run amd64 binary on M1 system. Please use darwin/arm64 binary instead (Download at {{.url}}.",
101+
out.V{"url": notify.DownloadURL(version.GetVersion(), "darwin", "amd64")})
102+
}
103+
96104
_, callingCmd := filepath.Split(os.Args[0])
97105

98106
if callingCmd == "kubectl" {

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ require (
3838
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect
3939
github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect
4040
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8
41-
github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 // indirect
41+
github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6
4242
github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f
4343
github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c
4444
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d // indirect
@@ -50,6 +50,7 @@ require (
5050
github.com/juju/utils v0.0.0-20180820210520-bf9cc5bdd62d // indirect
5151
github.com/juju/version v0.0.0-20180108022336-b64dbd566305 // indirect
5252
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
53+
github.com/klauspost/cpuid v1.2.0
5354
github.com/libvirt/libvirt-go v3.9.0+incompatible
5455
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1
5556
github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
642642
github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
643643
github.com/klauspost/compress v1.11.3 h1:dB4Bn0tN3wdCzQxnS8r06kV74qN/TAfaIS0bVE8h3jc=
644644
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
645+
github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE=
645646
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
646647
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
647648
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -808,6 +809,7 @@ github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3
808809
github.com/otiai10/copy v1.5.0 h1:SoXDGnlTUZoqB/wSuj/Y5L6T5i6iN4YRAcMCd+JnLNU=
809810
github.com/otiai10/copy v1.5.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E=
810811
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
812+
github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI=
811813
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
812814
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
813815
github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E=

pkg/minikube/detect/detect.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ package detect
1919
import (
2020
"net/http"
2121
"os"
22+
"runtime"
23+
"strings"
24+
25+
"github.com/klauspost/cpuid"
2226
)
2327

2428
// IsMicrosoftWSL will return true if process is running in WSL in windows
@@ -43,3 +47,8 @@ func IsCloudShell() bool {
4347
_, e := os.LookupEnv("CLOUDSHELL_ENVIRONMENT")
4448
return e
4549
}
50+
51+
// IsAmd64M1Emulation determines whether amd64 minikube binary is running on M1 mac in emulation mode
52+
func IsAmd64M1Emulation() bool {
53+
return runtime.GOARCH == "amd64" && strings.HasPrefix(cpuid.CPU.BrandName, "VirtualApple")
54+
}

pkg/minikube/notify/notify.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,16 @@ func getTimeFromFileIfExists(path string) time.Time {
152152
}
153153
return timeInFile
154154
}
155+
156+
// DownloadURL returns a URL to get minikube binary version ver for platform os/arch
157+
func DownloadURL(ver, os, arch string) string {
158+
if ver == "" || strings.HasSuffix(ver, "-unset") || os == "" || arch == "" {
159+
return "https://github.com/kubernetes/minikube/releases"
160+
}
161+
sfx := ""
162+
if os == "windows" {
163+
sfx = ".exe"
164+
}
165+
return fmt.Sprintf("https://github.com/kubernetes/minikube/releases/download/%s/minikube-%s-%s%s",
166+
ver, os, arch, sfx)
167+
}

pkg/minikube/notify/notify_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,33 @@ func TestMaybePrintUpdateText(t *testing.T) {
235235
})
236236
}
237237
}
238+
239+
func TestDownloadURL(t *testing.T) {
240+
const urlBase = "https://github.com/kubernetes/minikube/releases/download/"
241+
type args struct {
242+
ver string
243+
os string
244+
arch string
245+
}
246+
tests := []struct {
247+
name string
248+
args args
249+
want string
250+
}{
251+
{"linux-amd64", args{"foo", "linux", "amd64"}, urlBase + "foo/minikube-linux-amd64"},
252+
{"linux-arm64", args{"foo", "linux", "arm64"}, urlBase + "foo/minikube-linux-arm64"},
253+
{"darwin-amd64", args{"foo", "darwin", "amd64"}, urlBase + "foo/minikube-darwin-amd64"},
254+
{"darwin-arm64", args{"foo", "darwin", "arm64"}, urlBase + "foo/minikube-darwin-arm64"},
255+
{"windows", args{"foo", "windows", "amd64"}, urlBase + "foo/minikube-windows-amd64.exe"},
256+
{"linux-unset", args{"foo-unset", "linux", "amd64"}, "https://github.com/kubernetes/minikube/releases"},
257+
{"linux-unset", args{"foo-unset", "windows", "arm64"}, "https://github.com/kubernetes/minikube/releases"},
258+
{"windows-zzz", args{"bar", "windows", "zzz"}, urlBase + "bar/minikube-windows-zzz.exe"},
259+
}
260+
for _, tt := range tests {
261+
t.Run(tt.name, func(t *testing.T) {
262+
if got := DownloadURL(tt.args.ver, tt.args.os, tt.args.arch); got != tt.want {
263+
t.Errorf("DownloadURL() = %v, want %v", got, tt.want)
264+
}
265+
})
266+
}
267+
}

pkg/minikube/reason/reason.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ var (
8181
Interrupted = Kind{ID: "MK_INTERRUPTED", ExitCode: ExProgramConflict}
8282

8383
WrongBinaryWSL = Kind{ID: "MK_WRONG_BINARY_WSL", ExitCode: ExProgramUnsupported}
84+
WrongBinaryM1 = Kind{ID: "MK_WRONG_BINARY_M1", ExitCode: ExProgramUnsupported}
8485

8586
NewAPIClient = Kind{ID: "MK_NEW_APICLIENT", ExitCode: ExProgramError}
8687
InternalAddonEnable = Kind{ID: "MK_ADDON_ENABLE", ExitCode: ExProgramError}

0 commit comments

Comments
 (0)