mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-12 03:04:40 +00:00
net/dns: bound how long we block looking for, restarting systemd-resolved
Fixes #3537
Change-Id: Iba6a3cde75983490d4072b5341f48dbfa2f997c0
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
(cherry picked from commit cab5c46481
)
This commit is contained in:
parent
7d6407a632
commit
2d6404609d
@ -7,6 +7,7 @@
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -16,6 +17,7 @@
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
@ -132,12 +134,20 @@ func isResolvedRunning() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// is-active exits with code 3 if the service is not active.
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||||
err = exec.Command("systemctl", "is-active", "systemd-resolved.service").Run()
|
defer cancel()
|
||||||
|
err = exec.CommandContext(ctx, "systemctl", "is-active", "systemd-resolved.service").Run()
|
||||||
|
|
||||||
|
// is-active exits with code 3 if the service is not active.
|
||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func restartResolved() error {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
return exec.CommandContext(ctx, "systemctl", "restart", "systemd-resolved.service").Run()
|
||||||
|
}
|
||||||
|
|
||||||
// directManager is an OSConfigurator which replaces /etc/resolv.conf with a file
|
// directManager is an OSConfigurator which replaces /etc/resolv.conf with a file
|
||||||
// generated from the given configuration, creating a backup of its old state.
|
// generated from the given configuration, creating a backup of its old state.
|
||||||
//
|
//
|
||||||
@ -394,7 +404,12 @@ func (m *directManager) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isResolvedRunning() && !runningAsGUIDesktopUser() {
|
if isResolvedRunning() && !runningAsGUIDesktopUser() {
|
||||||
exec.Command("systemctl", "restart", "systemd-resolved.service").Run() // Best-effort.
|
m.logf("restarting systemd-resolved...")
|
||||||
|
if err := restartResolved(); err != nil {
|
||||||
|
m.logf("restart of systemd-resolved failed: %v", err)
|
||||||
|
} else {
|
||||||
|
m.logf("restarted systemd-resolved")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user