clientupdate: fix background install for linux tarballs (#9852)

Two bug fixes:
1. when tailscale update is executed as root, `os.UserCacheDir` may
   return an error because `$XDG_CACHE_HOME` and `$HOME` are not set;
   fallback to `os.TempDir` in those cases
2. on some weird distros (like my EndeavourOS), `/usr/sbin` is just a
   symlink to `/usr/bin`; when we resolve `tailscale` binary path from
   `tailscaled`, allow `tailscaled` to be in either directory

Updates #755

Signed-off-by: Andrew Lytvynov <awly@tailscale.com>
This commit is contained in:
Andrew Lytvynov 2023-10-17 14:24:06 -07:00 committed by GitHub
parent c27870e160
commit 77127a2494
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 2 deletions

View File

@ -911,7 +911,7 @@ func (up *Updater) updateLinuxBinary() error {
func (up *Updater) downloadLinuxTarball(ver string) (string, error) { func (up *Updater) downloadLinuxTarball(ver string) (string, error) {
dlDir, err := os.UserCacheDir() dlDir, err := os.UserCacheDir()
if err != nil { if err != nil {
return "", err dlDir = os.TempDir()
} }
dlDir = filepath.Join(dlDir, "tailscale-update") dlDir = filepath.Join(dlDir, "tailscale-update")
if err := os.MkdirAll(dlDir, 0700); err != nil { if err := os.MkdirAll(dlDir, 0700); err != nil {

View File

@ -305,9 +305,12 @@ func findCmdTailscale() (string, error) {
} }
switch runtime.GOOS { switch runtime.GOOS {
case "linux": case "linux":
if self == "/usr/sbin/tailscaled" { if self == "/usr/sbin/tailscaled" || self == "/usr/bin/tailscaled" {
return "/usr/bin/tailscale", nil return "/usr/bin/tailscale", nil
} }
if self == "/usr/local/sbin/tailscaled" || self == "/usr/local/bin/tailscaled" {
return "/usr/local/bin/tailscale", nil
}
return "", errors.New("tailscale not found in expected place") return "", errors.New("tailscale not found in expected place")
case "windows": case "windows":
dir := filepath.Dir(self) dir := filepath.Dir(self)