control/controlclient, version/distro: detect NixOS explicitly

The fallthrough happened to work in controlclient already due to the
/etc/os-release PRETTY_NAME default, but make it explicit so it
doesn't look like an accident.

Also add it to version/distro, even though nothing needs it yet.
pull/1045/head
Brad Fitzpatrick 3 years ago
parent 2b2a16d9a2
commit ef15096a7d

@ -73,7 +73,7 @@ func osVersionLinux() string {
return fmt.Sprintf("%s%s", bytes.TrimSpace(cr), attr)
}
fallthrough
case "fedora", "rhel", "alpine":
case "fedora", "rhel", "alpine", "nixos":
// Their PRETTY_NAME is fine as-is for all versions I tested.
fallthrough
default:

@ -6,6 +6,7 @@ package controlclient
import (
"encoding/hex"
"encoding/json"
"testing"
"github.com/tailscale/wireguard-go/wgcfg"
@ -282,3 +283,15 @@ func TestConciseDiffFrom(t *testing.T) {
})
}
}
func TestNewHostinfo(t *testing.T) {
hi := NewHostinfo()
if hi == nil {
t.Fatal("no Hostinfo")
}
j, err := json.MarshalIndent(hi, " ", "")
if err != nil {
t.Fatal(err)
}
t.Logf("Got: %s", j)
}

@ -17,6 +17,7 @@ const (
Arch = Distro("arch")
Synology = Distro("synology")
OpenWrt = Distro("openwrt")
NixOS = Distro("nixos")
)
// Get returns the current distro, or the empty string if unknown.
@ -27,18 +28,28 @@ func Get() Distro {
return ""
}
func have(file string) bool {
_, err := os.Stat(file)
return err == nil
}
func haveDir(file string) bool {
fi, err := os.Stat(file)
return err == nil && fi.IsDir()
}
func linuxDistro() Distro {
if fi, err := os.Stat("/usr/syno"); err == nil && fi.IsDir() {
switch {
case haveDir("usr/syno"):
return Synology
}
if _, err := os.Stat("/etc/debian_version"); err == nil {
case have("/etc/debian_version"):
return Debian
}
if _, err := os.Stat("/etc/arch-release"); err == nil {
case have("/etc/arch-release"):
return Arch
}
if _, err := os.Stat("/etc/openwrt_version"); err == nil {
case have("/etc/openwrt_version"):
return OpenWrt
case have("/run/current-system/sw/bin/nixos-version"):
return NixOS
}
return ""
}

Loading…
Cancel
Save