From ce5c80d0fe7f6a9d2b45ca3aaab3c2c41e93dc87 Mon Sep 17 00:00:00 2001 From: Andrew Lytvynov Date: Mon, 29 Apr 2024 12:16:40 -0700 Subject: [PATCH] clientupdate: exec systemctl instead of using dbus to restart (#11923) Shell out to "systemctl", which lets us drop an extra dependency. Updates https://github.com/tailscale/corp/issues/18935 Signed-off-by: Andrew Lytvynov --- clientupdate/clientupdate.go | 14 +++++++++++++ clientupdate/systemd_linux.go | 37 ----------------------------------- clientupdate/systemd_other.go | 15 -------------- cmd/tailscale/depaware.txt | 4 +--- cmd/tailscaled/depaware.txt | 3 +-- go.mod | 1 - go.sum | 3 --- 7 files changed, 16 insertions(+), 61 deletions(-) delete mode 100644 clientupdate/systemd_linux.go delete mode 100644 clientupdate/systemd_other.go diff --git a/clientupdate/clientupdate.go b/clientupdate/clientupdate.go index f3b8dca7c..9f5b7674e 100644 --- a/clientupdate/clientupdate.go +++ b/clientupdate/clientupdate.go @@ -1019,6 +1019,20 @@ func (up *Updater) updateLinuxBinary() error { return nil } +func restartSystemdUnit(ctx context.Context) error { + if _, err := exec.LookPath("systemctl"); err != nil { + // Likely not a systemd-managed distro. + return errors.ErrUnsupported + } + if out, err := exec.Command("systemctl", "daemon-reload").CombinedOutput(); err != nil { + return fmt.Errorf("systemctl daemon-reload failed: %w\noutput: %s", err, out) + } + if out, err := exec.Command("systemctl", "restart", "tailscaled.service").CombinedOutput(); err != nil { + return fmt.Errorf("systemctl restart failed: %w\noutput: %s", err, out) + } + return nil +} + func (up *Updater) downloadLinuxTarball(ver string) (string, error) { dlDir, err := os.UserCacheDir() if err != nil { diff --git a/clientupdate/systemd_linux.go b/clientupdate/systemd_linux.go deleted file mode 100644 index e34f6ace9..000000000 --- a/clientupdate/systemd_linux.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Tailscale Inc & AUTHORS -// SPDX-License-Identifier: BSD-3-Clause - -package clientupdate - -import ( - "context" - "errors" - "fmt" - - "github.com/coreos/go-systemd/v22/dbus" -) - -func restartSystemdUnit(ctx context.Context) error { - c, err := dbus.NewWithContext(ctx) - if err != nil { - // Likely not a systemd-managed distro. - return errors.ErrUnsupported - } - defer c.Close() - if err := c.ReloadContext(ctx); err != nil { - return fmt.Errorf("failed to reload tailscaled.service: %w", err) - } - ch := make(chan string, 1) - if _, err := c.RestartUnitContext(ctx, "tailscaled.service", "replace", ch); err != nil { - return fmt.Errorf("failed to restart tailscaled.service: %w", err) - } - select { - case res := <-ch: - if res != "done" { - return fmt.Errorf("systemd service restart failed with result %q", res) - } - case <-ctx.Done(): - return ctx.Err() - } - return nil -} diff --git a/clientupdate/systemd_other.go b/clientupdate/systemd_other.go deleted file mode 100644 index b2412b6e4..000000000 --- a/clientupdate/systemd_other.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Tailscale Inc & AUTHORS -// SPDX-License-Identifier: BSD-3-Clause - -//go:build !linux - -package clientupdate - -import ( - "context" - "errors" -) - -func restartSystemdUnit(ctx context.Context) error { - return errors.ErrUnsupported -} diff --git a/cmd/tailscale/depaware.txt b/cmd/tailscale/depaware.txt index c7b03ec9a..5883507f0 100644 --- a/cmd/tailscale/depaware.txt +++ b/cmd/tailscale/depaware.txt @@ -6,11 +6,9 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep W github.com/alexbrainman/sspi/internal/common from github.com/alexbrainman/sspi/negotiate W 💣 github.com/alexbrainman/sspi/negotiate from tailscale.com/net/tshttpproxy L github.com/coreos/go-iptables/iptables from tailscale.com/util/linuxfw - L github.com/coreos/go-systemd/v22/dbus from tailscale.com/clientupdate W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/pe+ W 💣 github.com/dblohm7/wingoes/pe from tailscale.com/util/winutil/authenticode github.com/fxamacker/cbor/v2 from tailscale.com/tka - L 💣 github.com/godbus/dbus/v5 from github.com/coreos/go-systemd/v22/dbus github.com/golang/groupcache/lru from tailscale.com/net/dnscache L github.com/google/nftables from tailscale.com/util/linuxfw L 💣 github.com/google/nftables/alignedbuff from github.com/google/nftables/xt @@ -271,7 +269,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep image/png from github.com/skip2/go-qrcode io from archive/tar+ io/fs from archive/tar+ - io/ioutil from github.com/godbus/dbus/v5+ + io/ioutil from github.com/mitchellh/go-ps+ log from expvar+ log/internal from log maps from tailscale.com/clientupdate+ diff --git a/cmd/tailscaled/depaware.txt b/cmd/tailscaled/depaware.txt index 218e48dac..56a755ec6 100644 --- a/cmd/tailscaled/depaware.txt +++ b/cmd/tailscaled/depaware.txt @@ -80,7 +80,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de L github.com/aws/smithy-go/waiter from github.com/aws/aws-sdk-go-v2/service/ssm github.com/bits-and-blooms/bitset from github.com/gaissmai/bart L github.com/coreos/go-iptables/iptables from tailscale.com/util/linuxfw - L github.com/coreos/go-systemd/v22/dbus from tailscale.com/clientupdate LD 💣 github.com/creack/pty from tailscale.com/ssh/tailssh W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+ W 💣 github.com/dblohm7/wingoes/com from tailscale.com/cmd/tailscaled+ @@ -98,7 +97,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de github.com/go-json-experiment/json/jsontext from tailscale.com/logtail W 💣 github.com/go-ole/go-ole from github.com/go-ole/go-ole/oleutil+ W 💣 github.com/go-ole/go-ole/oleutil from tailscale.com/wgengine/winnet - L 💣 github.com/godbus/dbus/v5 from github.com/coreos/go-systemd/v22/dbus+ + L 💣 github.com/godbus/dbus/v5 from tailscale.com/net/dns+ github.com/golang/groupcache/lru from tailscale.com/net/dnscache github.com/google/btree from gvisor.dev/gvisor/pkg/tcpip/header+ L github.com/google/nftables from tailscale.com/util/linuxfw diff --git a/go.mod b/go.mod index fb0e42bb5..c35d1057d 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7 github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf - github.com/coreos/go-systemd/v22 v22.5.0 github.com/creack/pty v1.1.21 github.com/dave/courtney v0.4.0 github.com/dave/jennifer v1.7.0 diff --git a/go.sum b/go.sum index f5e907b85..3c8428556 100644 --- a/go.sum +++ b/go.sum @@ -217,8 +217,6 @@ github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 h1:8h5+bWd7R6 github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= @@ -362,7 +360,6 @@ github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 h1:sQspH8M4niEijh3PFscJRLDnkL547IeP7kpPe3uUhEg= github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466/go.mod h1:ZiQxhyQ+bbbfxUKVvjfO498oPYvtYhZzycal3G/NHmU= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=