mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-04 23:45:34 +00:00
version, hostinfo: recognize gokrazy as a distro
Now:
/tmp/breakglass3929186798 # /user/tailscale debug hostinfo
{
"IPNVersion": "1.23.0-date.20220107",
"OS": "linux",
"OSVersion": "Gokrazy; kernel=5.16.11",
"DeviceModel": "Raspberry Pi 4 Model B Rev 1.2",
"Hostname": "gokrazy",
"GoArch": "arm64"
}
Also, cache the distro lookup. It doesn't change while the program is
running:
name old time/op new time/op delta
Get-6 5.21µs ± 5% 0.00µs ± 3% -99.91% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
Get-6 792B ± 0% 0B -100.00% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
Get-6 8.00 ± 0% 0.00 -100.00% (p=0.008 n=5+5)
Updates #1866
Change-Id: Ifb9a63b94287010d3f4c8bfeb6b78119e8a9b203
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
(cherry picked from commit 58a6c9b2b8
)
This commit is contained in:
parent
bfd7f9d318
commit
d0698cfcec
@ -113,6 +113,8 @@ func osVersionLinux() string {
|
||||
return fmt.Sprintf("Synology %s%s", m["productversion"], attr)
|
||||
case distro.OpenWrt:
|
||||
return fmt.Sprintf("OpenWrt %s%s", m["DISTRIB_RELEASE"], attr)
|
||||
case distro.Gokrazy:
|
||||
return fmt.Sprintf("Gokrazy%s", attr)
|
||||
}
|
||||
return fmt.Sprintf("Other%s", attr)
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
import (
|
||||
"os"
|
||||
"runtime"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type Distro string
|
||||
@ -22,17 +23,25 @@
|
||||
Pfsense = Distro("pfsense")
|
||||
OPNsense = Distro("opnsense")
|
||||
TrueNAS = Distro("truenas")
|
||||
Gokrazy = Distro("gokrazy")
|
||||
)
|
||||
|
||||
var distroAtomic atomic.Value // of Distro
|
||||
|
||||
// Get returns the current distro, or the empty string if unknown.
|
||||
func Get() Distro {
|
||||
if runtime.GOOS == "linux" {
|
||||
return linuxDistro()
|
||||
d, ok := distroAtomic.Load().(Distro)
|
||||
if ok {
|
||||
return d
|
||||
}
|
||||
if runtime.GOOS == "freebsd" {
|
||||
return freebsdDistro()
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
d = linuxDistro()
|
||||
case "freebsd":
|
||||
d = freebsdDistro()
|
||||
}
|
||||
return ""
|
||||
distroAtomic.Store(d) // even if empty
|
||||
return d
|
||||
}
|
||||
|
||||
func have(file string) bool {
|
||||
@ -62,6 +71,8 @@ func linuxDistro() Distro {
|
||||
return NixOS
|
||||
case have("/etc/config/uLinux.conf"):
|
||||
return QNAP
|
||||
case haveDir("/gokrazy"):
|
||||
return Gokrazy
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
16
version/distro/distro_test.go
Normal file
16
version/distro/distro_test.go
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package distro
|
||||
|
||||
import "testing"
|
||||
|
||||
func BenchmarkGet(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
var d Distro
|
||||
for i := 0; i < b.N; i++ {
|
||||
d = Get()
|
||||
}
|
||||
_ = d
|
||||
}
|
Loading…
Reference in New Issue
Block a user