tailscaled: try migrating old state on synology devices
@@ -163,6 +163,34 @@ func main() {
}
}
+func trySynologyMigration(p string) error {
+ if runtime.GOOS != "linux" || distro.Get() != distro.Synology {
+ return nil
+ }
+
+ fi, err := os.Stat(p)
+ if err == nil && fi.Size() > 0 || !os.IsNotExist(err) {
+ return err
+ }
+ // File is empty or doesn't exist, try reading from the old path.
+
+ const oldPath = "/var/packages/Tailscale/etc/tailscaled.state"
+ if _, err := os.Stat(oldPath); err != nil {
+ if os.IsNotExist(err) {
+ return nil
+ }
+ return err
+ }
+
+ if err := os.Chown(oldPath, os.Getuid(), os.Getgid()); err != nil {
+ return err
+ }
+ if err := os.Rename(oldPath, p); err != nil {
+ return err
+ }
+ return nil
+}
+
func ipnServerOpts() (o ipnserver.Options) {
// Allow changing the OS-specific IPN behavior for tests
// so we can e.g. test Windows-specific behaviors on Linux.
@@ -225,6 +253,9 @@ func run() error {
if args.statepath == "" {
log.Fatalf("--state is required")
}
+ if err := trySynologyMigration(args.statepath); err != nil {
+ log.Printf("error in synology migration: %v", err)
+ }
var debugMux *http.ServeMux
if args.debug != "" {
