gokrazy: add two arm64 variants for Pi & VMs
We previously had two GOARCH variants for natlab testing (gokrazy/natlabapp and gokrazy/natlabapp.arm64), but we didn't have those variants for the "tsapp" (production, not testing) variant. This adds arm64 for tsapp too. But there are two major users of arm64 for gokrazy: Raspberry Pis, and cloud VMs. So make two variants. Updates #1866 Change-Id: Ib9efaf1255101e3cdbc31d49c76fd86dcba21bb1 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
6cd185bf31
commit
638b73a68d
@@ -164,4 +164,4 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
# nix-direnv cache busting line: sha256-lgWFUDa1hHooieOSE/2L74RHtfkzK2q4W2GiDQOrxGw=
|
# nix-direnv cache busting line: sha256-N9feTY91Q2WUin3De5NYEy/R1ZyuE5cjx49lc1i3nSQ=
|
||||||
|
|||||||
+2
-2
@@ -4,7 +4,7 @@
|
|||||||
"sri": "sha256-cY5yryX+p/xtoTv+WZEKFagiIl0OREHnJY1Bk5VpVVc="
|
"sri": "sha256-cY5yryX+p/xtoTv+WZEKFagiIl0OREHnJY1Bk5VpVVc="
|
||||||
},
|
},
|
||||||
"vendor": {
|
"vendor": {
|
||||||
"goModSum": "sha256-ep5BPjx4MPaldI71++7vgJPSyftdBqlKciKyx08MOQw=",
|
"goModSum": "sha256-/CvlMPHEbBEpHd/fTRfxSYUMLaNdDrMi1d8hvoXoSw0=",
|
||||||
"sri": "sha256-lgWFUDa1hHooieOSE/2L74RHtfkzK2q4W2GiDQOrxGw="
|
"sri": "sha256-N9feTY91Q2WUin3De5NYEy/R1ZyuE5cjx49lc1i3nSQ="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,8 +47,11 @@ require (
|
|||||||
github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737
|
github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737
|
||||||
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466
|
github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466
|
||||||
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486
|
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486
|
||||||
|
github.com/gokrazy/firmware v0.0.0-20260522070551-527ce0ed43cf
|
||||||
github.com/gokrazy/gokrazy v0.0.0-20260418085648-c38c3134b8a7
|
github.com/gokrazy/gokrazy v0.0.0-20260418085648-c38c3134b8a7
|
||||||
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a
|
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a
|
||||||
|
github.com/gokrazy/kernel.rpi v0.0.0-20251127164438-9778ec0261de
|
||||||
|
github.com/gokrazy/rpi-eeprom v0.0.0-20260518070910-95f7328a8228
|
||||||
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7
|
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7
|
||||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8
|
||||||
github.com/golang/snappy v0.0.4
|
github.com/golang/snappy v0.0.4
|
||||||
|
|||||||
@@ -496,6 +496,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
|||||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486 h1:QBELQyXGy+eCEcWtvSfslJk3y7nUPZldOwBqIz1tkXc=
|
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486 h1:QBELQyXGy+eCEcWtvSfslJk3y7nUPZldOwBqIz1tkXc=
|
||||||
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486/go.mod h1:PFPkRFcazBmCZKo+sBaGjsWouTtfDvg13nCDm0tFOCA=
|
github.com/gokrazy/breakglass v0.0.0-20251229072214-9dbc0478d486/go.mod h1:PFPkRFcazBmCZKo+sBaGjsWouTtfDvg13nCDm0tFOCA=
|
||||||
|
github.com/gokrazy/firmware v0.0.0-20260522070551-527ce0ed43cf h1:WRmvIwhtcWJfHnrfpfXWPh3Xq6Lztn0y5l3li+NjaYw=
|
||||||
|
github.com/gokrazy/firmware v0.0.0-20260522070551-527ce0ed43cf/go.mod h1:x8Lwd/ZFqJTBWUGW7yt/qwgxO8/AHh5KGFYJ4yfH+FE=
|
||||||
github.com/gokrazy/gokapi v0.0.0-20250222071133-506fdb322775 h1:f5+2UMRRbr3+e/gdWCBNn48chS/KMMljfbmlSSHfRBA=
|
github.com/gokrazy/gokapi v0.0.0-20250222071133-506fdb322775 h1:f5+2UMRRbr3+e/gdWCBNn48chS/KMMljfbmlSSHfRBA=
|
||||||
github.com/gokrazy/gokapi v0.0.0-20250222071133-506fdb322775/go.mod h1:q9mIV8al0wqmqFXJhKiO3SOHkL9/7Q4kIMynqUQWhgU=
|
github.com/gokrazy/gokapi v0.0.0-20250222071133-506fdb322775/go.mod h1:q9mIV8al0wqmqFXJhKiO3SOHkL9/7Q4kIMynqUQWhgU=
|
||||||
github.com/gokrazy/gokrazy v0.0.0-20200501080617-f3445e01a904/go.mod h1:pq6rGHqxMRPSaTXaCMzIZy0wLDusAJyoVNyNo05RLs0=
|
github.com/gokrazy/gokrazy v0.0.0-20200501080617-f3445e01a904/go.mod h1:pq6rGHqxMRPSaTXaCMzIZy0wLDusAJyoVNyNo05RLs0=
|
||||||
@@ -506,6 +508,10 @@ github.com/gokrazy/internal v0.0.0-20251208203110-3c1aa9087c82 h1:4ghNfD9NaZLpFr
|
|||||||
github.com/gokrazy/internal v0.0.0-20251208203110-3c1aa9087c82/go.mod h1:dQY4EMkD4L5ZjYJ0SPtpgYbV7MIUMCxNIXiOfnZ6jP4=
|
github.com/gokrazy/internal v0.0.0-20251208203110-3c1aa9087c82/go.mod h1:dQY4EMkD4L5ZjYJ0SPtpgYbV7MIUMCxNIXiOfnZ6jP4=
|
||||||
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a h1:fa11POmSLo6fkkcqc+RUIyiqGJzBAOHEe/CCHAA/NGc=
|
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a h1:fa11POmSLo6fkkcqc+RUIyiqGJzBAOHEe/CCHAA/NGc=
|
||||||
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a/go.mod h1:WWx72LXHEesuJxbopusRfSoKJQ6ffdwkT0DZditdrLo=
|
github.com/gokrazy/kernel.arm64 v0.0.0-20260403054012-807489e0272a/go.mod h1:WWx72LXHEesuJxbopusRfSoKJQ6ffdwkT0DZditdrLo=
|
||||||
|
github.com/gokrazy/kernel.rpi v0.0.0-20251127164438-9778ec0261de h1:RSLWj1Ska9s4cl+n/bC5LY4s8vLr+tZoO2vMm/wGP64=
|
||||||
|
github.com/gokrazy/kernel.rpi v0.0.0-20251127164438-9778ec0261de/go.mod h1:p5uBeUWKZVv3KJWWD6s9MpAjPjGJUe2CmKDML+5pm6U=
|
||||||
|
github.com/gokrazy/rpi-eeprom v0.0.0-20260518070910-95f7328a8228 h1:sLyorzF3zTdEiTvTUpctCIf14tZQFXTfayWBhn9QPG4=
|
||||||
|
github.com/gokrazy/rpi-eeprom v0.0.0-20260518070910-95f7328a8228/go.mod h1:vabxV1M+i6S3rGuWoFieHxCJW3jlob3rqe0KV82j+0o=
|
||||||
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7 h1:gurTGc4sL7Ik+IKZ29rhGgHNZQTXPtEXLw+aM9E+/HE=
|
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7 h1:gurTGc4sL7Ik+IKZ29rhGgHNZQTXPtEXLw+aM9E+/HE=
|
||||||
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7/go.mod h1:OYcG5tSb+QrelmUOO4EZVUFcIHyyZb0QDbEbZFUp1TA=
|
github.com/gokrazy/serial-busybox v0.0.0-20250119153030-ac58ba7574e7/go.mod h1:OYcG5tSb+QrelmUOO4EZVUFcIHyyZb0QDbEbZFUp1TA=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
|
|||||||
@@ -23,6 +23,78 @@ import (
|
|||||||
|
|
||||||
var runVMTests = flag.Bool("run-vm-tests", false, "run tests that require a VM")
|
var runVMTests = flag.Bool("run-vm-tests", false, "run tests that require a VM")
|
||||||
|
|
||||||
|
func TestTsappConfigs(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
app string
|
||||||
|
goarch string
|
||||||
|
kernel string
|
||||||
|
firmware string
|
||||||
|
eeprom string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "tsapp",
|
||||||
|
app: "tsapp",
|
||||||
|
goarch: "amd64",
|
||||||
|
kernel: "github.com/tailscale/gokrazy-kernel",
|
||||||
|
firmware: "github.com/tailscale/gokrazy-kernel",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "tsapp-vm-arm64",
|
||||||
|
app: "tsapp-vm.arm64",
|
||||||
|
goarch: "arm64",
|
||||||
|
kernel: "github.com/gokrazy/kernel.arm64",
|
||||||
|
firmware: "github.com/gokrazy/kernel.arm64",
|
||||||
|
eeprom: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "tsapp-pi-arm64",
|
||||||
|
app: "tsapp-pi.arm64",
|
||||||
|
goarch: "arm64",
|
||||||
|
kernel: "github.com/gokrazy/kernel.rpi",
|
||||||
|
firmware: "github.com/gokrazy/firmware",
|
||||||
|
eeprom: "github.com/gokrazy/rpi-eeprom",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
cfgBytes, err := os.ReadFile(filepath.Join(tt.app, "config.json"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("reading config.json: %v", err)
|
||||||
|
}
|
||||||
|
var cfg struct {
|
||||||
|
Environment []string
|
||||||
|
KernelPackage string
|
||||||
|
FirmwarePackage string
|
||||||
|
EEPROMPackage *string
|
||||||
|
}
|
||||||
|
if err := json.Unmarshal(cfgBytes, &cfg); err != nil {
|
||||||
|
t.Fatalf("unmarshaling config.json: %v", err)
|
||||||
|
}
|
||||||
|
var raw map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(cfgBytes, &raw); err != nil {
|
||||||
|
t.Fatalf("unmarshaling config.json as map: %v", err)
|
||||||
|
}
|
||||||
|
gokCfg := gokrazyConfig{Environment: cfg.Environment}
|
||||||
|
if got := gokCfg.GOARCH(); got != tt.goarch {
|
||||||
|
t.Errorf("GOARCH = %q; want %q", got, tt.goarch)
|
||||||
|
}
|
||||||
|
if cfg.KernelPackage != tt.kernel {
|
||||||
|
t.Errorf("KernelPackage = %q; want %q", cfg.KernelPackage, tt.kernel)
|
||||||
|
}
|
||||||
|
if cfg.FirmwarePackage != tt.firmware {
|
||||||
|
t.Errorf("FirmwarePackage = %q; want %q", cfg.FirmwarePackage, tt.firmware)
|
||||||
|
}
|
||||||
|
if _, ok := raw["EEPROMPackage"]; tt.goarch == "arm64" && !ok {
|
||||||
|
t.Error("EEPROMPackage is missing")
|
||||||
|
}
|
||||||
|
if cfg.EEPROMPackage != nil && *cfg.EEPROMPackage != tt.eeprom {
|
||||||
|
t.Errorf("EEPROMPackage = %q; want %q", *cfg.EEPROMPackage, tt.eeprom)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func findKernelPath(t *testing.T) string {
|
func findKernelPath(t *testing.T) string {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
goModPath := filepath.Join("..", "go.mod")
|
goModPath := filepath.Join("..", "go.mod")
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Tailscale Appliance Raspberry Pi arm64
|
||||||
|
|
||||||
|
This is the Raspberry Pi arm64 variant of the Gokrazy Tailscale Appliance image.
|
||||||
|
See ../tsapp/README.md for more info.
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"Hostname": "tsapp",
|
||||||
|
"Update": {
|
||||||
|
"NoPassword": true
|
||||||
|
},
|
||||||
|
"SerialConsole": "ttyS0,115200",
|
||||||
|
"GokrazyPackages": [
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/dhcp",
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/randomd",
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/ntp"
|
||||||
|
],
|
||||||
|
"Packages": [
|
||||||
|
"github.com/gokrazy/serial-busybox",
|
||||||
|
"github.com/gokrazy/breakglass",
|
||||||
|
"tailscale.com/cmd/tailscale",
|
||||||
|
"tailscale.com/cmd/tailscaled"
|
||||||
|
],
|
||||||
|
"PackageConfig": {
|
||||||
|
"github.com/gokrazy/breakglass": {
|
||||||
|
"CommandLineFlags": [
|
||||||
|
"-authorized_keys=ec2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tailscale.com/cmd/tailscale": {
|
||||||
|
"ExtraFilePaths": {
|
||||||
|
"/usr": "usr-dir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Environment": [
|
||||||
|
"GOOS=linux",
|
||||||
|
"GOARCH=arm64"
|
||||||
|
],
|
||||||
|
"KernelPackage": "github.com/gokrazy/kernel.rpi",
|
||||||
|
"FirmwarePackage": "github.com/gokrazy/firmware",
|
||||||
|
"EEPROMPackage": "github.com/gokrazy/rpi-eeprom",
|
||||||
|
"InternalCompatibilityFlags": {
|
||||||
|
"InitImportPath": "github.com/tailscale/ts-gokrazy/gokrazyinit"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & contributors
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build for_go_mod_tidy_only
|
||||||
|
|
||||||
|
package gokrazydeps
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "github.com/gokrazy/breakglass"
|
||||||
|
_ "github.com/gokrazy/firmware"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/dhcp"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/ntp"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/randomd"
|
||||||
|
_ "github.com/gokrazy/kernel.rpi"
|
||||||
|
_ "github.com/gokrazy/rpi-eeprom"
|
||||||
|
_ "github.com/gokrazy/serial-busybox"
|
||||||
|
_ "github.com/tailscale/ts-gokrazy/gokrazyinit"
|
||||||
|
_ "tailscale.com/cmd/tailscale"
|
||||||
|
_ "tailscale.com/cmd/tailscaled"
|
||||||
|
)
|
||||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
|||||||
|
# Tailscale Appliance VM arm64
|
||||||
|
|
||||||
|
This is the arm64 VM variant of the Gokrazy Tailscale Appliance image.
|
||||||
|
See ../tsapp/README.md for more info.
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"Hostname": "tsapp",
|
||||||
|
"Update": {
|
||||||
|
"NoPassword": true
|
||||||
|
},
|
||||||
|
"SerialConsole": "ttyS0,115200",
|
||||||
|
"GokrazyPackages": [
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/dhcp",
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/randomd",
|
||||||
|
"github.com/gokrazy/gokrazy/cmd/ntp"
|
||||||
|
],
|
||||||
|
"Packages": [
|
||||||
|
"github.com/gokrazy/serial-busybox",
|
||||||
|
"github.com/gokrazy/breakglass",
|
||||||
|
"tailscale.com/cmd/tailscale",
|
||||||
|
"tailscale.com/cmd/tailscaled"
|
||||||
|
],
|
||||||
|
"PackageConfig": {
|
||||||
|
"github.com/gokrazy/breakglass": {
|
||||||
|
"CommandLineFlags": [
|
||||||
|
"-authorized_keys=ec2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tailscale.com/cmd/tailscale": {
|
||||||
|
"ExtraFilePaths": {
|
||||||
|
"/usr": "usr-dir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Environment": [
|
||||||
|
"GOOS=linux",
|
||||||
|
"GOARCH=arm64"
|
||||||
|
],
|
||||||
|
"KernelPackage": "github.com/gokrazy/kernel.arm64",
|
||||||
|
"FirmwarePackage": "github.com/gokrazy/kernel.arm64",
|
||||||
|
"EEPROMPackage": "",
|
||||||
|
"InternalCompatibilityFlags": {
|
||||||
|
"InitImportPath": "github.com/tailscale/ts-gokrazy/gokrazyinit"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & contributors
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build for_go_mod_tidy_only
|
||||||
|
|
||||||
|
package gokrazydeps
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "github.com/gokrazy/breakglass"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/dhcp"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/ntp"
|
||||||
|
_ "github.com/gokrazy/gokrazy/cmd/randomd"
|
||||||
|
_ "github.com/gokrazy/kernel.arm64"
|
||||||
|
_ "github.com/gokrazy/serial-busybox"
|
||||||
|
_ "github.com/tailscale/ts-gokrazy/gokrazyinit"
|
||||||
|
_ "tailscale.com/cmd/tailscale"
|
||||||
|
_ "tailscale.com/cmd/tailscaled"
|
||||||
|
)
|
||||||
Binary file not shown.
Reference in New Issue
Block a user