diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 3b6ae2456..a0ddbb04e 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -145,6 +145,9 @@ nfpms: formats: - deb + replaces: + - wiretrustee + scripts: postinstall: "release_files/post_install.sh" preremove: "release_files/pre_remove.sh" @@ -159,6 +162,9 @@ nfpms: formats: - rpm + replaces: + - wiretrustee + scripts: postinstall: "release_files/post_install.sh" preremove: "release_files/pre_remove.sh" diff --git a/README.md b/README.md index 11e196deb..bb619d87e 100644 --- a/README.md +++ b/README.md @@ -105,11 +105,17 @@ Hosted version: curl -L https://pkgs.wiretrustee.com/debian/public.key | sudo apt-key add - echo 'deb https://pkgs.wiretrustee.com/debian stable main' | sudo tee /etc/apt/sources.list.d/wiretrustee.list ``` -2. Install the package +2. Update APT's cache ```shell sudo apt-get update - sudo apt-get install wiretrustee ``` +3. Install the package + ```shell + # for CLI only + sudo apt-get install netbird + # for GUI package + sudo apt-get install netbird-ui + ``` **RPM/Red hat** 1. Add the repository: ```shell @@ -125,26 +131,37 @@ Hosted version: ``` 2. Install the package ```shell - sudo yum install wiretrustee + # for CLI only + sudo yum install netbird + # for GUI package + sudo yum install netbird-ui ``` #### MACOS **Brew install** 1. Download and install Brew at https://brew.sh/ 2. Install the client ```shell - brew install wiretrustee/client/wiretrustee + # for CLI only + brew install netbirdio/tap/netbird + # for GUI package + brew install --cask netbirdio/tap/netbird-ui ``` -**Installation from binary** +3. As homebrew doesn't allow sudo exec, we need to install and start the client daemon: + ```shell + sudo netbird service install + sudo netbird service start + ``` +**Installation from binary (CLI only)** 1. Checkout Netbird [releases](https://github.com/netbirdio/netbird/releases/latest) 2. Download the latest release (**Switch VERSION to the latest**): ```shell - curl -o ./wiretrustee__darwin_amd64.tar.gz https://github.com/netbirdio/netbird/releases/download/v/wiretrustee__darwin_amd64.tar.gz + curl -o ./netbird__darwin_amd64.tar.gz https://github.com/netbirdio/netbird/releases/download/v/wiretrustee__darwin_amd64.tar.gz ``` 3. Decompress ```shell - tar xcf ./wiretrustee__darwin_amd64.tar.gz - sudo mv wiretrusee /usr/bin/wiretrustee - chmod +x /usr/bin/wiretrustee + tar xcf ./netbird__darwin_amd64.tar.gz + sudo mv netbird /usr/bin/netbird + chmod +x /usr/bin/netbird ``` After that you may need to add /usr/bin in your PATH environment variable: ````shell @@ -152,47 +169,64 @@ Hosted version: ```` 4. Install and run the service ```shell - sudo wiretrustee service install - sudo wiretrustee service start + sudo netbird service install + sudo netbird service start ``` #### Windows 1. Checkout Netbird [releases](https://github.com/netbirdio/netbird/releases/latest) -2. Download the latest Windows release installer ```wiretrustee_installer__windows_amd64.exe``` (**Switch VERSION to the latest**): +2. Download the latest Windows release installer ```netbird_installer__windows_amd64.exe``` (**Switch VERSION to the latest**): 3. Proceed with installation steps -4. This will install the client in the C:\\Program Files\\Wiretrustee and add the client service +4. This will install the client in the C:\\Program Files\\Netbird and add the client service 5. After installing, you can follow the [Client Configuration](#Client-Configuration) steps. > To uninstall the client and service, you can use Add/Remove programs ### Client Configuration +If you installed the UI client, you can launch it and click on Connect +> It will open your browser, and you will be prompt for email and password + +Simply run: +```shell + netbird up +``` +> It will open your browser, and you will be prompt for email and password + +Check connection status: +```shell + netbird status +``` +In case you are activating a server peer, you can use a setup-key as described in the steps below: + + 1. Login to the Management Service. You need to have a `setup key` in hand (see ). -For **Unix** systems: +For all systems: ```shell - sudo wiretrustee up --setup-key + netbird up --setup-key ``` -For **Windows** systems, start powershell as administrator and: - ```shell - wiretrustee up --setup-key - ``` + For **Docker**, you can run with the following command: ```shell -docker run --network host --privileged --rm -d -e WT_SETUP_KEY= -v wiretrustee-client:/etc/wiretrustee wiretrustee/wiretrustee: +docker run --network host --privileged --rm -d -e NB_SETUP_KEY= -v netbird-client:/etc/netbird netbirdio/netbird: ``` -> TAG > 0.3.0 version +> TAG > 0.6.0 version Alternatively, if you are hosting your own Management Service provide `--management-url` property pointing to your Management Service: ```shell - sudo wiretrustee up --setup-key --management-url https://localhost:33073 + sudo netbird up --setup-key --management-url http://localhost:33073 ``` > You could also omit the `--setup-key` property. In this case, the tool will prompt for the key. +2. Check connection status: +```shell + netbird status +``` -2. Check your IP: +3. Check your IP: For **MACOS** you will just start the service: ````shell - sudo ipconfig getifaddr utun100 + sudo ifconfig utun100 ```` For **Linux** systems: ```shell @@ -203,20 +237,19 @@ For **Windows** systems: netsh interface ip show config name="wt0" ``` -3. Repeat on other machines. +4. Repeat on other machines. ### Troubleshooting +1. If you are using self-hosted version and haven't specified `--management-url`, the client app will use the default URL + which is ```https://api.wiretrustee.com:33073```. -1. If you have specified a wrong `--management-url` (e.g., just by mistake when self-hosting) +2. If you have specified a wrong `--management-url` (e.g., just by mistake when self-hosting) to override it you can do the following: ```shell - sudo wiretrustee down - sudo wiretrustee up --management-url https:/// + netbird down + netbird up --management-url https:/// ``` - -2. If you are using self-hosted version and haven't specified `--management-url`, the client app will use the default URL - which is ```https://api.wiretrustee.com:33073```. To override it see solution #1 above. diff --git a/client/cmd/down.go b/client/cmd/down.go index 7d1a5add9..97c484ee7 100644 --- a/client/cmd/down.go +++ b/client/cmd/down.go @@ -13,11 +13,16 @@ import ( var downCmd = &cobra.Command{ Use: "down", - Short: "down wiretrustee connections", + Short: "down netbird connections", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, "console") + err := handleRebrand(cmd) + if err != nil { + return err + } + + err = util.InitLog(logLevel, "console") if err != nil { log.Errorf("failed initializing log %v", err) return err diff --git a/client/cmd/login.go b/client/cmd/login.go index 0a0a6eb95..e43c6a2ce 100644 --- a/client/cmd/login.go +++ b/client/cmd/login.go @@ -18,11 +18,16 @@ import ( var loginCmd = &cobra.Command{ Use: "login", - Short: "login to the Wiretrustee Management Service (first run)", + Short: "login to the Netbird Management Service (first run)", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, "console") + err := handleRebrand(cmd) + if err != nil { + return err + } + + err = util.InitLog(logLevel, "console") if err != nil { return fmt.Errorf("failed initializing log %v", err) } diff --git a/client/cmd/root.go b/client/cmd/root.go index 4d44d4db4..9a02dcc44 100644 --- a/client/cmd/root.go +++ b/client/cmd/root.go @@ -2,9 +2,14 @@ package cmd import ( "context" + "errors" "fmt" + "io" + "io/fs" + "io/ioutil" "os" "os/signal" + "path" "runtime" "strings" "syscall" @@ -21,18 +26,24 @@ import ( ) var ( - configPath string - defaultConfigPath string - logLevel string - defaultLogFile string - logFile string - daemonAddr string - managementURL string - adminURL string - setupKey string - preSharedKey string - rootCmd = &cobra.Command{ - Use: "wiretrustee", + configPath string + defaultConfigPathDir string + defaultConfigPath string + oldDefaultConfigPathDir string + oldDefaultConfigPath string + logLevel string + defaultLogFileDir string + defaultLogFile string + oldDefaultLogFileDir string + oldDefaultLogFile string + logFile string + daemonAddr string + managementURL string + adminURL string + setupKey string + preSharedKey string + rootCmd = &cobra.Command{ + Use: "netbird", Short: "", Long: "", SilenceUsage: true, @@ -45,23 +56,36 @@ func Execute() error { } func init() { - defaultConfigPath = "/etc/wiretrustee/config.json" - defaultLogFile = "/var/log/wiretrustee/client.log" + defaultConfigPathDir = "/etc/netbird/" + defaultLogFileDir = "/var/log/netbird/" + + oldDefaultConfigPathDir = "/etc/wiretrustee/" + oldDefaultLogFileDir = "/var/log/wiretrustee/" + if runtime.GOOS == "windows" { - defaultConfigPath = os.Getenv("PROGRAMDATA") + "\\Wiretrustee\\" + "config.json" - defaultLogFile = os.Getenv("PROGRAMDATA") + "\\Wiretrustee\\" + "client.log" + defaultConfigPathDir = os.Getenv("PROGRAMDATA") + "\\Netbird\\" + defaultLogFileDir = os.Getenv("PROGRAMDATA") + "\\Netbird\\" + + oldDefaultConfigPathDir = os.Getenv("PROGRAMDATA") + "\\Wiretrustee\\" + oldDefaultLogFileDir = os.Getenv("PROGRAMDATA") + "\\Wiretrustee\\" } - defaultDaemonAddr := "unix:///var/run/wiretrustee.sock" + defaultConfigPath = defaultConfigPathDir + "config.json" + defaultLogFile = defaultLogFileDir + "client.log" + + oldDefaultConfigPath = oldDefaultConfigPathDir + "config.json" + oldDefaultLogFile = oldDefaultLogFileDir + "client.log" + + defaultDaemonAddr := "unix:///var/run/netbird.sock" if runtime.GOOS == "windows" { defaultDaemonAddr = "tcp://127.0.0.1:41731" } rootCmd.PersistentFlags().StringVar(&daemonAddr, "daemon-addr", defaultDaemonAddr, "Daemon service address to serve CLI requests [unix|tcp]://[path|host:port]") rootCmd.PersistentFlags().StringVar(&managementURL, "management-url", "", fmt.Sprintf("Management Service URL [http|https]://[host]:[port] (default \"%s\")", internal.ManagementURLDefault().String())) rootCmd.PersistentFlags().StringVar(&adminURL, "admin-url", "https://app.netbird.io", "Admin Panel URL [http|https]://[host]:[port]") - rootCmd.PersistentFlags().StringVar(&configPath, "config", defaultConfigPath, "Wiretrustee config file location") - rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "sets Wiretrustee log level") - rootCmd.PersistentFlags().StringVar(&logFile, "log-file", defaultLogFile, "sets Wiretrustee log path. If console is specified the the log will be output to stdout") + rootCmd.PersistentFlags().StringVar(&configPath, "config", defaultConfigPath, "Netbird config file location") + rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "sets Netbird log level") + rootCmd.PersistentFlags().StringVar(&logFile, "log-file", defaultLogFile, "sets Netbird log path. If console is specified the the log will be output to stdout") rootCmd.PersistentFlags().StringVar(&setupKey, "setup-key", "", "Setup key obtained from the Management Service Dashboard (used to register peer)") rootCmd.PersistentFlags().StringVar(&preSharedKey, "preshared-key", "", "Sets Wireguard PreSharedKey property. If set, then only peers that have the same key can communicate.") rootCmd.AddCommand(serviceCmd) @@ -94,22 +118,30 @@ func SetupCloseHandler(ctx context.Context, cancel context.CancelFunc) { func SetFlagsFromEnvVars() { flags := rootCmd.PersistentFlags() flags.VisitAll(func(f *pflag.Flag) { - envVar := FlagNameToEnvVar(f.Name) + oldEnvVar := FlagNameToEnvVar(f.Name, "WT_") - if value, present := os.LookupEnv(envVar); present { + if value, present := os.LookupEnv(oldEnvVar); present { err := flags.Set(f.Name, value) if err != nil { - log.Infof("unable to configure flag %s using variable %s, err: %v", f.Name, envVar, err) + log.Infof("unable to configure flag %s using variable %s, err: %v", f.Name, oldEnvVar, err) + } + } + + newEnvVar := FlagNameToEnvVar(f.Name, "NB_") + + if value, present := os.LookupEnv(newEnvVar); present { + err := flags.Set(f.Name, value) + if err != nil { + log.Infof("unable to configure flag %s using variable %s, err: %v", f.Name, newEnvVar, err) } } }) } // FlagNameToEnvVar converts flag name to environment var name adding a prefix, -// replacing dashes and making all uppercase (e.g. setup-keys is converted to WT_SETUP_KEYS) -func FlagNameToEnvVar(f string) string { - prefix := "WT_" - parsed := strings.ReplaceAll(f, "-", "_") +// replacing dashes and making all uppercase (e.g. setup-keys is converted to NB_SETUP_KEYS according to the input prefix) +func FlagNameToEnvVar(cmdFlag string, prefix string) string { + parsed := strings.ReplaceAll(cmdFlag, "-", "_") upper := strings.ToUpper(parsed) return prefix + upper } @@ -144,3 +176,113 @@ var CLIBackOffSettings = &backoff.ExponentialBackOff{ Stop: backoff.Stop, Clock: backoff.SystemClock, } + +func handleRebrand(cmd *cobra.Command) error { + var err error + if logFile == defaultLogFile { + if migrateToNetbird(oldDefaultLogFile, defaultLogFile) { + cmd.Printf("will copy Log dir %s and its content to %s\n", oldDefaultLogFileDir, defaultLogFileDir) + err = cpDir(oldDefaultLogFileDir, defaultLogFileDir) + if err != nil { + return err + } + } + } + if configPath == defaultConfigPath { + if migrateToNetbird(oldDefaultConfigPath, defaultConfigPath) { + cmd.Printf("will copy Config dir %s and its content to %s\n", oldDefaultConfigPathDir, defaultConfigPathDir) + err = cpDir(oldDefaultConfigPathDir, defaultConfigPathDir) + if err != nil { + return err + } + } + } + return nil +} + +func cpFile(src, dst string) error { + var err error + var srcfd *os.File + var dstfd *os.File + var srcinfo os.FileInfo + + if srcfd, err = os.Open(src); err != nil { + return err + } + defer srcfd.Close() + + if dstfd, err = os.Create(dst); err != nil { + return err + } + defer dstfd.Close() + + if _, err = io.Copy(dstfd, srcfd); err != nil { + return err + } + if srcinfo, err = os.Stat(src); err != nil { + return err + } + return os.Chmod(dst, srcinfo.Mode()) +} + +func copySymLink(source, dest string) error { + link, err := os.Readlink(source) + if err != nil { + return err + } + return os.Symlink(link, dest) +} + +func cpDir(src string, dst string) error { + var err error + var fds []os.FileInfo + var srcinfo os.FileInfo + + if srcinfo, err = os.Stat(src); err != nil { + return err + } + + if err = os.MkdirAll(dst, srcinfo.Mode()); err != nil { + return err + } + + if fds, err = ioutil.ReadDir(src); err != nil { + return err + } + for _, fd := range fds { + srcfp := path.Join(src, fd.Name()) + dstfp := path.Join(dst, fd.Name()) + + fileInfo, err := os.Stat(srcfp) + if err != nil { + return fmt.Errorf("fouldn't get fileInfo; %v", err) + } + + switch fileInfo.Mode() & os.ModeType { + case os.ModeSymlink: + if err = copySymLink(srcfp, dstfp); err != nil { + return fmt.Errorf("failed to copy from %s to %s; %v", srcfp, dstfp, err) + } + case os.ModeDir: + if err = cpDir(srcfp, dstfp); err != nil { + return fmt.Errorf("failed to copy from %s to %s; %v", srcfp, dstfp, err) + } + default: + if err = cpFile(srcfp, dstfp); err != nil { + return fmt.Errorf("failed to copy from %s to %s; %v", srcfp, dstfp, err) + } + } + } + return nil +} + +func migrateToNetbird(oldPath, newPath string) bool { + _, errOld := os.Stat(oldPath) + _, errNew := os.Stat(newPath) + + if errors.Is(errOld, fs.ErrNotExist) || errNew == nil { + return false + } + + return true +} diff --git a/client/cmd/service.go b/client/cmd/service.go index 1afe8c044..8745889db 100644 --- a/client/cmd/service.go +++ b/client/cmd/service.go @@ -24,8 +24,8 @@ func newProgram(ctx context.Context, cancel context.CancelFunc) *program { func newSVCConfig() *service.Config { return &service.Config{ - Name: "wiretrustee", - DisplayName: "Wiretrustee", + Name: "netbird", + DisplayName: "Netbird", Description: "A WireGuard-based mesh network that connects your devices into a single private network.", } } @@ -41,5 +41,5 @@ func newSVC(prg *program, conf *service.Config) (service.Service, error) { var serviceCmd = &cobra.Command{ Use: "service", - Short: "manages wiretrustee service", + Short: "manages Netbird service", } diff --git a/client/cmd/service_controller.go b/client/cmd/service_controller.go index bdf94d338..e745b480e 100644 --- a/client/cmd/service_controller.go +++ b/client/cmd/service_controller.go @@ -76,20 +76,24 @@ func (p *program) Stop(srv service.Service) error { } time.Sleep(time.Second * 2) - log.Info("stopped Wiretrustee service") //nolint + log.Info("stopped Netbird service") //nolint return nil } var runCmd = &cobra.Command{ Use: "run", - Short: "runs wiretrustee as service", - Run: func(cmd *cobra.Command, args []string) { + Short: "runs Netbird as service", + RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, logFile) + err := handleRebrand(cmd) if err != nil { - log.Errorf("failed initializing log %v", err) - return + return err + } + + err = util.InitLog(logLevel, logFile) + if err != nil { + return fmt.Errorf("failed initializing log %v", err) } ctx, cancel := context.WithCancel(cmd.Context()) @@ -97,27 +101,30 @@ var runCmd = &cobra.Command{ s, err := newSVC(newProgram(ctx, cancel), newSVCConfig()) if err != nil { - cmd.PrintErrln(err) - return + return err } err = s.Run() if err != nil { - cmd.PrintErrln(err) - return + return err } - cmd.Printf("Wiretrustee service is running") + cmd.Printf("Netbird service is running") + return nil }, } var startCmd = &cobra.Command{ Use: "start", - Short: "starts wiretrustee service", + Short: "starts Netbird service", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, logFile) + err := handleRebrand(cmd) + if err != nil { + return err + } + + err = util.InitLog(logLevel, logFile) if err != nil { - log.Errorf("failed initializing log %v", err) return err } @@ -133,61 +140,69 @@ var startCmd = &cobra.Command{ cmd.PrintErrln(err) return err } - cmd.Println("Wiretrustee service has been started") + cmd.Println("Netbird service has been started") return nil }, } var stopCmd = &cobra.Command{ Use: "stop", - Short: "stops wiretrustee service", - Run: func(cmd *cobra.Command, args []string) { + Short: "stops Netbird service", + RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, logFile) + err := handleRebrand(cmd) if err != nil { - log.Errorf("failed initializing log %v", err) + return err + } + + err = util.InitLog(logLevel, logFile) + if err != nil { + return fmt.Errorf("failed initializing log %v", err) } ctx, cancel := context.WithCancel(cmd.Context()) s, err := newSVC(newProgram(ctx, cancel), newSVCConfig()) if err != nil { - cmd.PrintErrln(err) - return + return err } err = s.Stop() if err != nil { - cmd.PrintErrln(err) - return + return err } - cmd.Println("Wiretrustee service has been stopped") + cmd.Println("Netbird service has been stopped") + return nil }, } var restartCmd = &cobra.Command{ Use: "restart", - Short: "restarts wiretrustee service", - Run: func(cmd *cobra.Command, args []string) { + Short: "restarts Netbird service", + RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, logFile) + err := handleRebrand(cmd) if err != nil { - log.Errorf("failed initializing log %v", err) + return err + } + + err = util.InitLog(logLevel, logFile) + if err != nil { + return fmt.Errorf("failed initializing log %v", err) } ctx, cancel := context.WithCancel(cmd.Context()) s, err := newSVC(newProgram(ctx, cancel), newSVCConfig()) if err != nil { - cmd.PrintErrln(err) - return + return err } err = s.Restart() if err != nil { - cmd.PrintErrln(err) - return + return err } - cmd.Println("Wiretrustee service has been restarted") + cmd.Println("Netbird service has been restarted") + return nil }, } diff --git a/client/cmd/service_installer.go b/client/cmd/service_installer.go index a0913f46f..0d6c9ef91 100644 --- a/client/cmd/service_installer.go +++ b/client/cmd/service_installer.go @@ -9,10 +9,15 @@ import ( var installCmd = &cobra.Command{ Use: "install", - Short: "installs wiretrustee service", + Short: "installs Netbird service", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() + err := handleRebrand(cmd) + if err != nil { + return err + } + svcConfig := newSVCConfig() svcConfig.Arguments = []string{ @@ -47,30 +52,34 @@ var installCmd = &cobra.Command{ cmd.PrintErrln(err) return err } - cmd.Println("Wiretrustee service has been installed") + cmd.Println("Netbird service has been installed") return nil }, } var uninstallCmd = &cobra.Command{ Use: "uninstall", - Short: "uninstalls wiretrustee service from system", - Run: func(cmd *cobra.Command, args []string) { + Short: "uninstalls Netbird service from system", + RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() + err := handleRebrand(cmd) + if err != nil { + return err + } + ctx, cancel := context.WithCancel(cmd.Context()) s, err := newSVC(newProgram(ctx, cancel), newSVCConfig()) if err != nil { - cmd.PrintErrln(err) - return + return err } err = s.Uninstall() if err != nil { - cmd.PrintErrln(err) - return + return err } - cmd.Println("Wiretrustee has been uninstalled") + cmd.Println("Netbird has been uninstalled") + return nil }, } diff --git a/client/cmd/status.go b/client/cmd/status.go index 3aa812d97..e6fb9db74 100644 --- a/client/cmd/status.go +++ b/client/cmd/status.go @@ -14,11 +14,16 @@ import ( var statusCmd = &cobra.Command{ Use: "status", - Short: "status of the Wiretrustee Service", + Short: "status of the Netbird Service", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, "console") + err := handleRebrand(cmd) + if err != nil { + return err + } + + err = util.InitLog(logLevel, "console") if err != nil { return fmt.Errorf("failed initializing log %v", err) } diff --git a/client/cmd/up.go b/client/cmd/up.go index d7b9074b4..648f14557 100644 --- a/client/cmd/up.go +++ b/client/cmd/up.go @@ -13,11 +13,16 @@ import ( var upCmd = &cobra.Command{ Use: "up", - Short: "install, login and start wiretrustee client", + Short: "install, login and start Netbird client", RunE: func(cmd *cobra.Command, args []string) error { SetFlagsFromEnvVars() - err := util.InitLog(logLevel, "console") + err := handleRebrand(cmd) + if err != nil { + return err + } + + err = util.InitLog(logLevel, "console") if err != nil { return fmt.Errorf("failed initializing log %v", err) } diff --git a/client/cmd/version.go b/client/cmd/version.go index e774fc7b5..90cd2015a 100644 --- a/client/cmd/version.go +++ b/client/cmd/version.go @@ -8,7 +8,7 @@ import ( var ( versionCmd = &cobra.Command{ Use: "version", - Short: "prints wiretrustee version", + Short: "prints Netbird version", Run: func(cmd *cobra.Command, args []string) { cmd.Println(system.WiretrusteeVersion()) }, diff --git a/client/ui/client_ui.go b/client/ui/client_ui.go index 5ee8c81cf..44fd0bf30 100644 --- a/client/ui/client_ui.go +++ b/client/ui/client_ui.go @@ -40,7 +40,7 @@ const ( func main() { var daemonAddr string - defaultDaemonAddr := "unix:///var/run/wiretrustee.sock" + defaultDaemonAddr := "unix:///var/run/netbird.sock" if runtime.GOOS == "windows" { defaultDaemonAddr = "tcp://127.0.0.1:41731" } diff --git a/client/ui/netbird-ui.rb.tmpl b/client/ui/netbird-ui.rb.tmpl index b74037990..e612f84ee 100644 --- a/client/ui/netbird-ui.rb.tmpl +++ b/client/ui/netbird-ui.rb.tmpl @@ -15,6 +15,8 @@ cask "{{ $projectName }}" do app "netbird_ui_darwin_arm64", target: "Netbird UI.app" end + depends_on formula: "netbird" + name "Netbird UI" desc "Netbird UI Client" homepage "https://www.netbird.io/" diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 3abdba74a..71a7da7fd 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -47,32 +47,34 @@ For this tutorial we will be using domain ```test.netbird.io``` which points to The [setup.env](../infrastructure_files/setup.env) file contains the following properties that have to be filled: ```bash - # e.g. app.mydomain.com - WIRETRUSTEE_DOMAIN="" + # Dashboard domain. e.g. app.mydomain.com + NETBIRD_DOMAIN="" # e.g. dev-24vkclam.us.auth0.com - WIRETRUSTEE_AUTH0_DOMAIN="" + NETBIRD_AUTH0_DOMAIN="" # e.g. 61u3JMXRO0oOevc7gCkZLCwePQvT4lL0 - WIRETRUSTEE_AUTH0_CLIENT_ID="" - # e.g. https://app.mydomain.com/ - WIRETRUSTEE_AUTH0_AUDIENCE="" + NETBIRD_AUTH0_CLIENT_ID="" + # e.g. https://app.mydomain.com/ or https://app.mydomain.com, + # Make sure you used the exact same value for Identifier + # you used when creating your Auth0 API + NETBIRD_AUTH0_AUDIENCE="" # e.g. hello@mydomain.com - WIRETRUSTEE_LETSENCRYPT_EMAIL="" + NETBIRD_LETSENCRYPT_EMAIL="" ``` > Other options are available, but they are automatically updated. Please follow the steps to get the values. -4. Configure ```WIRETRUSTEE_AUTH0_DOMAIN``` ```WIRETRUSTEE_AUTH0_CLIENT_ID``` ```WIRETRUSTEE_AUTH0_AUDIENCE``` properties. +4. Configure ```NETBIRD_AUTH0_DOMAIN``` ```NETBIRD_AUTH0_CLIENT_ID``` ```NETBIRD_AUTH0_AUDIENCE``` properties. * To obtain these, please use [Auth0 React SDK Guide](https://auth0.com/docs/quickstart/spa/react/01-login#configure-auth0) up until "Install the Auth0 React SDK". :grey_exclamation: Use ```https://YOUR DOMAIN``` as ````Allowed Callback URLs````, ```Allowed Logout URLs```, ```Allowed Web Origins``` and ```Allowed Origins (CORS)``` * set the variables in the ```setup.env``` -5. Configure ```WIRETRUSTEE_AUTH0_AUDIENCE``` property. +5. Configure ```NETBIRD_AUTH0_AUDIENCE``` property. * Check [Auth0 Golang API Guide](https://auth0.com/docs/quickstart/backend/golang) to obtain AuthAudience. * set the property in the ```setup.env``` file. -6. Configure ```WIRETRUSTEE_LETSENCRYPT_EMAIL``` property. +6. Configure ```NETBIRD_LETSENCRYPT_EMAIL``` property. This can be any email address. [Let's Encrypt](https://letsencrypt.org/) will create an account while generating a new certificate. @@ -97,8 +99,8 @@ For this tutorial we will be using domain ```test.netbird.io``` which points to docker-compose logs coturn docker-compose logs dashboard -10. Once the server is running, you can access the dashboard by https://$WIRETRUSTEE_DOMAIN -11. Adding a peer will require you to enter the management URL by following the steps in the page https://$WIRETRUSTEE_DOMAIN/add-peer and in the 3rd step: +10. Once the server is running, you can access the dashboard by https://$NETBIRD_DOMAIN +11. Adding a peer will require you to enter the management URL by following the steps in the page https://$NETBIRD_DOMAIN/add-peer and in the 3rd step: ```shell -sudo wiretrustee up --setup-key --management-url https://$WIRETRUSTEE_DOMAIN:33073 +sudo netbird up --setup-key --management-url https://$NETBIRD_DOMAIN:33073 ``` diff --git a/infrastructure_files/configure.sh b/infrastructure_files/configure.sh index b14aa9f2c..f1bfa368f 100755 --- a/infrastructure_files/configure.sh +++ b/infrastructure_files/configure.sh @@ -2,18 +2,18 @@ source setup.env -if [[ "x-$WIRETRUSTEE_DOMAIN" == "x-" ]] +if [[ "x-$NETBIRD_DOMAIN" == "x-" ]] then - echo WIRETRUSTEE_DOMAIN is not set, please update your setup.env file + echo NETBIRD_DOMAIN is not set, please update your setup.env file exit 1 fi # local development or tests -if [[ $WIRETRUSTEE_DOMAIN == "localhost" || $WIRETRUSTEE_DOMAIN == "127.0.0.1" ]] +if [[ $NETBIRD_DOMAIN == "localhost" || $NETBIRD_DOMAIN == "127.0.0.1" ]] then - export WIRETRUSTEE_MGMT_API_ENDPOINT=http://$WIRETRUSTEE_DOMAIN:$WIRETRUSTEE_MGMT_API_PORT - unset WIRETRUSTEE_MGMT_API_CERT_FILE - unset WIRETRUSTEE_MGMT_API_CERT_KEY_FILE + export NETBIRD_MGMT_API_ENDPOINT=http://$NETBIRD_DOMAIN:$NETBIRD_MGMT_API_PORT + unset NETBIRD_MGMT_API_CERT_FILE + unset NETBIRD_MGMT_API_CERT_KEY_FILE fi # if not provided, we generate a turn password @@ -28,13 +28,13 @@ LETSENCRYPT_VOLUMENAME="${VOLUME_PREFIX}${LETSENCRYPT_VOLUMESUFFIX}" # if volume with wiretrustee- prefix already exists, use it, else create new with netbird- OLD_PREFIX='wiretrustee-' if docker volume ls | grep -q "${OLD_PREFIX}${MGMT_VOLUMESUFFIX}"; then - MGMT_VOLUMENAME="${$OLD_PREFIX}${MGMT_VOLUMESUFFIX}" + MGMT_VOLUMENAME="${OLD_PREFIX}${MGMT_VOLUMESUFFIX}" fi if docker volume ls | grep -q "${OLD_PREFIX}${SIGNAL_VOLUMESUFFIX}"; then - SIGNAL_VOLUMENAME="${$OLD_PREFIX}${SIGNAL_VOLUMESUFFIX}" + SIGNAL_VOLUMENAME="${OLD_PREFIX}${SIGNAL_VOLUMESUFFIX}" fi if docker volume ls | grep -q "${OLD_PREFIX}${LETSENCRYPT_VOLUMESUFFIX}"; then - LETSENCRYPT_VOLUMENAME="${$OLD_PREFIX}${LETSENCRYPT_VOLUMESUFFIX}" + LETSENCRYPT_VOLUMENAME="${OLD_PREFIX}${LETSENCRYPT_VOLUMESUFFIX}" fi export MGMT_VOLUMENAME diff --git a/infrastructure_files/docker-compose.yml.tmpl b/infrastructure_files/docker-compose.yml.tmpl index a06710584..605ed812b 100644 --- a/infrastructure_files/docker-compose.yml.tmpl +++ b/infrastructure_files/docker-compose.yml.tmpl @@ -8,13 +8,13 @@ services: - 80:80 - 443:443 environment: - - AUTH0_DOMAIN=$WIRETRUSTEE_AUTH0_DOMAIN - - AUTH0_CLIENT_ID=$WIRETRUSTEE_AUTH0_CLIENT_ID - - AUTH0_AUDIENCE=$WIRETRUSTEE_AUTH0_AUDIENCE - - WIRETRUSTEE_MGMT_API_ENDPOINT=$WIRETRUSTEE_MGMT_API_ENDPOINT + - AUTH0_DOMAIN=$NETBIRD_AUTH0_DOMAIN + - AUTH0_CLIENT_ID=$NETBIRD_AUTH0_CLIENT_ID + - AUTH0_AUDIENCE=$NETBIRD_AUTH0_AUDIENCE + - NETBIRD_MGMT_API_ENDPOINT=$NETBIRD_MGMT_API_ENDPOINT - NGINX_SSL_PORT=443 - - LETSENCRYPT_DOMAIN=$WIRETRUSTEE_DOMAIN - - LETSENCRYPT_EMAIL=$WIRETRUSTEE_LETSENCRYPT_EMAIL + - LETSENCRYPT_DOMAIN=$NETBIRD_DOMAIN + - LETSENCRYPT_EMAIL=$NETBIRD_LETSENCRYPT_EMAIL volumes: - $LETSENCRYPT_VOLUMENAME:/etc/letsencrypt/ # Signal @@ -27,7 +27,7 @@ services: - 10000:10000 # # port and command for Let's Encrypt validation # - 443:443 - # command: ["--letsencrypt-domain", "$WIRETRUSTEE_DOMAIN", "--log-file", "console"] + # command: ["--letsencrypt-domain", "$NETBIRD_DOMAIN", "--log-file", "console"] # Management management: image: netbirdio/management:latest @@ -40,15 +40,15 @@ services: - ./management.json:/etc/netbird/management.json ports: - 33073:33073 #gRPC port - - $WIRETRUSTEE_MGMT_API_PORT:33071 #API port + - $NETBIRD_MGMT_API_PORT:33071 #API port # # port and command for Let's Encrypt validation # - 443:443 - # command: ["--letsencrypt-domain", "$WIRETRUSTEE_DOMAIN", "--log-file", "console"] + # command: ["--letsencrypt-domain", "$NETBIRD_DOMAIN", "--log-file", "console"] # Coturn coturn: image: coturn/coturn restart: unless-stopped - domainname: $WIRETRUSTEE_DOMAIN + domainname: $NETBIRD_DOMAIN volumes: - ./turnserver.conf:/etc/turnserver.conf:ro # - ./privkey.pem:/etc/coturn/private/privkey.pem:ro diff --git a/infrastructure_files/management.json.tmpl b/infrastructure_files/management.json.tmpl index 324c3278d..b01dba94d 100644 --- a/infrastructure_files/management.json.tmpl +++ b/infrastructure_files/management.json.tmpl @@ -2,7 +2,7 @@ "Stuns": [ { "Proto": "udp", - "URI": "stun:$WIRETRUSTEE_DOMAIN:3478", + "URI": "stun:$NETBIRD_DOMAIN:3478", "Username": "", "Password": null } @@ -11,7 +11,7 @@ "Turns": [ { "Proto": "udp", - "URI": "turn:$WIRETRUSTEE_DOMAIN:3478", + "URI": "turn:$NETBIRD_DOMAIN:3478", "Username": "$TURN_USER", "Password": "$TURN_PASSWORD" } @@ -22,18 +22,18 @@ }, "Signal": { "Proto": "http", - "URI": "$WIRETRUSTEE_DOMAIN:10000", + "URI": "$NETBIRD_DOMAIN:10000", "Username": "", "Password": null }, "Datadir": "", "HttpConfig": { - "Address": "0.0.0.0:$WIRETRUSTEE_MGMT_API_PORT", - "AuthIssuer": "https://$WIRETRUSTEE_AUTH0_DOMAIN/", - "AuthAudience": "$WIRETRUSTEE_AUTH0_AUDIENCE", - "AuthKeysLocation": "https://$WIRETRUSTEE_AUTH0_DOMAIN/.well-known/jwks.json", - "CertFile":"$WIRETRUSTEE_MGMT_API_CERT_FILE", - "CertKey":"$WIRETRUSTEE_MGMT_API_CERT_KEY_FILE" + "Address": "0.0.0.0:$NETBIRD_MGMT_API_PORT", + "AuthIssuer": "https://$NETBIRD_AUTH0_DOMAIN/", + "AuthAudience": "$NETBIRD_AUTH0_AUDIENCE", + "AuthKeysLocation": "https://$NETBIRD_AUTH0_DOMAIN/.well-known/jwks.json", + "CertFile":"$NETBIRD_MGMT_API_CERT_FILE", + "CertKey":"$NETBIRD_MGMT_API_CERT_KEY_FILE" }, "IdpManagerConfig": { "Manager": "none" diff --git a/infrastructure_files/setup.env b/infrastructure_files/setup.env index 879bcdb5d..855e81c6a 100644 --- a/infrastructure_files/setup.env +++ b/infrastructure_files/setup.env @@ -1,30 +1,30 @@ # Dashboard domain and auth0 configuration # Dashboard domain. e.g. app.mydomain.com -WIRETRUSTEE_DOMAIN="" +NETBIRD_DOMAIN="" # e.g. dev-24vkclam.us.auth0.com -WIRETRUSTEE_AUTH0_DOMAIN="" +NETBIRD_AUTH0_DOMAIN="" # e.g. 61u3JMXRO0oOevc7gCkZLCwePQvT4lL0 -WIRETRUSTEE_AUTH0_CLIENT_ID="" +NETBIRD_AUTH0_CLIENT_ID="" # e.g. https://app.mydomain.com/ or https://app.mydomain.com, # Make sure you used the exact same value for Identifier # you used when creating your Auth0 API -WIRETRUSTEE_AUTH0_AUDIENCE="" +NETBIRD_AUTH0_AUDIENCE="" # e.g. hello@mydomain.com -WIRETRUSTEE_LETSENCRYPT_EMAIL="" +NETBIRD_LETSENCRYPT_EMAIL="" ## From this point, most settings are being done automatically, but you can edit if you need some customization # Management API # Management API port -WIRETRUSTEE_MGMT_API_PORT=33071 +NETBIRD_MGMT_API_PORT=33071 # Management API endpoint address, used by the Dashboard -WIRETRUSTEE_MGMT_API_ENDPOINT=https://$WIRETRUSTEE_DOMAIN:$WIRETRUSTEE_MGMT_API_PORT +NETBIRD_MGMT_API_ENDPOINT=https://$NETBIRD_DOMAIN:$NETBIRD_MGMT_API_PORT # Management Certficate file path. These are generated by the Dashboard container -WIRETRUSTEE_MGMT_API_CERT_FILE="/etc/letsencrypt/live/$WIRETRUSTEE_DOMAIN/fullchain.pem" +NETBIRD_MGMT_API_CERT_FILE="/etc/letsencrypt/live/$NETBIRD_DOMAIN/fullchain.pem" # Management Certficate key file path. -WIRETRUSTEE_MGMT_API_CERT_KEY_FILE="/etc/letsencrypt/live/$WIRETRUSTEE_DOMAIN/privkey.pem" +NETBIRD_MGMT_API_CERT_KEY_FILE="/etc/letsencrypt/live/$NETBIRD_DOMAIN/privkey.pem" # Turn credentials @@ -43,15 +43,15 @@ SIGNAL_VOLUMESUFFIX="signal" LETSENCRYPT_VOLUMESUFFIX="letsencrypt" # exports -export WIRETRUSTEE_DOMAIN -export WIRETRUSTEE_AUTH0_DOMAIN -export WIRETRUSTEE_AUTH0_CLIENT_ID -export WIRETRUSTEE_AUTH0_AUDIENCE -export WIRETRUSTEE_LETSENCRYPT_EMAIL -export WIRETRUSTEE_MGMT_API_PORT -export WIRETRUSTEE_MGMT_API_ENDPOINT -export WIRETRUSTEE_MGMT_API_CERT_FILE -export WIRETRUSTEE_MGMT_API_CERT_KEY_FILE +export NETBIRD_DOMAIN +export NETBIRD_AUTH0_DOMAIN +export NETBIRD_AUTH0_CLIENT_ID +export NETBIRD_AUTH0_AUDIENCE +export NETBIRD_LETSENCRYPT_EMAIL +export NETBIRD_MGMT_API_PORT +export NETBIRD_MGMT_API_ENDPOINT +export NETBIRD_MGMT_API_CERT_FILE +export NETBIRD_MGMT_API_CERT_KEY_FILE export TURN_USER export TURN_PASSWORD export TURN_MIN_PORT diff --git a/management/README.md b/management/README.md index 07fce4fd5..f0eb0cb70 100644 --- a/management/README.md +++ b/management/README.md @@ -10,16 +10,17 @@ Usage: netbird-mgmt management [flags] Flags: - --datadir string server data directory location (default "/var/lib/netbird/") + --cert-file string Location of your SSL certificate. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect + --cert-key string Location of your SSL certificate private key. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect + --datadir string server data directory location -h, --help help for management --letsencrypt-domain string a domain to issue Let's Encrypt certificate for. Enables TLS using Let's Encrypt. Will fetch and renew certificate, and run the server with TLS --port int server port to listen on (default 33073) - --cert-file string Location of your SSL certificate. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect - --cert-key string Location of your SSL certificate private key. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect + Global Flags: - --config string Netbird config file location to write new config to (default "/etc/netbird/config.json") - --log-level string (default "info") + --config string Netbird config file location to write new config to (default "/etc/netbird") --log-file string sets Netbird log path. If console is specified the the log will be output to stdout (default "/var/log/netbird/management.log") + --log-level string (default "info") ``` ## Run Management service (Docker) @@ -42,7 +43,7 @@ docker run -d --name netbird-management \ -p 443:443 \ -v netbird-mgmt:/var/lib/netbird \ -v ./config.json:/etc/netbird/config.json \ -netbird/management:latest \ +netbirdio/management:latest \ --letsencrypt-domain ``` > An example of config.json can be found here [management.json](../infrastructure_files/management.json.tmpl) @@ -81,7 +82,7 @@ docker run -d --name netbird-management \ -p 33073:33073 \ -v netbird-mgmt:/var/lib/netbird \ -v ./config.json:/etc/netbird/config.json \ -netbird/management:latest +netbirdio/management:latest ``` ### Debug tag We also publish a docker image with the debug tag which has the log-level set to default, plus it uses the ```gcr.io/distroless/base:debug``` image that can be used with docker exec in order to run some commands in the Management container. @@ -90,7 +91,7 @@ shell $ docker run -d --name netbird-management-debug \ -p 33073:33073 \ -v netbird-mgmt:/var/lib/netbird \ -v ./config.json:/etc/netbird/config.json \ -netbird/management:debug-latest +netbirdio/management:debug-latest shell $ docker exec -ti netbird-management-debug /bin/sh container-shell $ diff --git a/management/cmd/management.go b/management/cmd/management.go index c870cf648..72c3a5d23 100644 --- a/management/cmd/management.go +++ b/management/cmd/management.go @@ -3,9 +3,11 @@ package cmd import ( "context" "crypto/tls" + "errors" "flag" "fmt" "io" + "io/fs" "io/ioutil" "net" "os" @@ -294,10 +296,10 @@ func cpDir(src string, dst string) error { } func migrateToNetbird(oldPath, newPath string) bool { - _, old := os.Stat(oldPath) - _, new := os.Stat(newPath) + _, errOld := os.Stat(oldPath) + _, errNew := os.Stat(newPath) - if os.IsNotExist(old) || os.IsExist(new) { + if errors.Is(errOld, fs.ErrNotExist) || errNew == nil { return false } diff --git a/release_files/post_install.sh b/release_files/post_install.sh index 5e6336e71..12b272698 100644 --- a/release_files/post_install.sh +++ b/release_files/post_install.sh @@ -12,24 +12,24 @@ fi cleanInstall() { printf "\033[32m Post Install of an clean install\033[0m\n" # Step 3 (clean install), enable the service in the proper way for this platform - /usr/bin/wiretrustee service install - /usr/bin/wiretrustee service start + /usr/bin/netbird service install + /usr/bin/netbird service start } upgrade() { printf "\033[32m Post Install of an upgrade\033[0m\n" if [ "${use_systemctl}" = "True" ]; then printf "\033[32m Stopping the service\033[0m\n" - systemctl stop wiretrustee 2> /dev/null || true + systemctl stop netbird 2> /dev/null || true fi - if [ -e /lib/systemd/system/wiretrustee.service ]; then - rm -f /lib/systemd/system/wiretrustee.service + if [ -e /lib/systemd/system/netbird.service ]; then + rm -f /lib/systemd/system/netbird.service systemctl daemon-reload fi # will trow an error until everyone upgrade - /usr/bin/wiretrustee service uninstall 2> /dev/null || true - /usr/bin/wiretrustee service install - /usr/bin/wiretrustee service start + /usr/bin/netbird service uninstall 2> /dev/null || true + /usr/bin/netbird service install + /usr/bin/netbird service start } # Check if this is a clean install or an upgrade diff --git a/release_files/pre_remove.sh b/release_files/pre_remove.sh index 925cd6ab5..121f42671 100644 --- a/release_files/pre_remove.sh +++ b/release_files/pre_remove.sh @@ -13,16 +13,16 @@ remove() { if [ "${use_systemctl}" = "True" ]; then printf "\033[32m Stopping the service\033[0m\n" - systemctl stop wiretrustee || true + systemctl stop netbird || true - if [ -e /lib/systemd/system/wiretrustee.service ]; then - rm -f /lib/systemd/system/wiretrustee.service + if [ -e /lib/systemd/system/netbird.service ]; then + rm -f /lib/systemd/system/netbird.service systemctl daemon-reload || true fi fi printf "\033[32m Uninstalling the service\033[0m\n" - /usr/bin/wiretrustee service uninstall || true + /usr/bin/netbird service uninstall || true if [ "${use_systemctl}" = "True" ]; then diff --git a/signal/README.md b/signal/README.md index a7cc8676d..96c80a490 100644 --- a/signal/README.md +++ b/signal/README.md @@ -5,31 +5,31 @@ This is a netbird signal-exchange server and client library to exchange connecti ## Command Options The CLI accepts the command **management** with the following options: ```shell -start Wiretrustee Signal Server daemon +start Netbird Signal Server daemon Usage: - wiretrustee-signal run [flags] + netbird-signal run [flags] Flags: -h, --help help for run --letsencrypt-domain string a domain to issue Let's Encrypt certificate for. Enables TLS using Let's Encrypt. Will fetch and renew certificate, and run the server with TLS --port int Server port to listen on (e.g. 10000) (default 10000) - --ssl-dir string server ssl directory location. *Required only for Let's Encrypt certificates. (default "/var/lib/wiretrustee/") + --ssl-dir string server ssl directory location. *Required only for Let's Encrypt certificates. (default "/var/lib/netbird/") Global Flags: + --log-file string sets Netbird log path. If console is specified the the log will be output to stdout (default "/var/log/netbird/signal.log") --log-level string (default "info") - --log-file string sets Wiretrustee log path. If console is specified the the log will be output to stdout (default "/var/log/wiretrustee/management.log") ``` ## Running the Signal service (Docker) We have packed the Signal server into docker image. You can pull the image from Docker Hub and execute it with the following commands: ````shell -docker pull wiretrustee/signal:latest -docker run -d --name wiretrustee-signal -p 10000:10000 wiretrustee/signal:latest +docker pull netbirdio/signal:latest +docker run -d --name netbird-signal -p 10000:10000 netbirdio/signal:latest ```` The default log-level is set to INFO, if you need you can change it using by updating the docker cmd as followed: ````shell -docker run -d --name wiretrustee-signal -p 10000:10000 wiretrustee/signal:latest --log-level DEBUG +docker run -d --name netbird-signal -p 10000:10000 netbirdio/signal:latest --log-level DEBUG ```` ### Run with TLS (Let's Encrypt). By specifying the **--letsencrypt-domain** the daemon will handle SSL certificate request and configuration. @@ -43,11 +43,11 @@ Replace with your server's public domain (e.g. mydomain.com or sub # create a volume docker volume create wiretrustee-signal # run the docker container -docker run -d --name wiretrustee-management \ +docker run -d --name netbird-signal \ -p 10000:10000 \ -p 443:443 \ --v wiretrustee-signal:/var/lib/wiretrustee \ -wiretrustee/signal:latest \ +-v netbird-signal:/var/lib/netbird \ +netbirdio/signal:latest \ --letsencrypt-domain ``` ## For development purposes: diff --git a/signal/cmd/run.go b/signal/cmd/run.go index f2b2e402d..ad179ad47 100644 --- a/signal/cmd/run.go +++ b/signal/cmd/run.go @@ -1,9 +1,11 @@ package cmd import ( + "errors" "flag" "fmt" "io" + "io/fs" "io/ioutil" "net" "net/http" @@ -178,10 +180,10 @@ func cpDir(src string, dst string) error { } func migrateToNetbird(oldPath, newPath string) bool { - _, old := os.Stat(oldPath) - _, new := os.Stat(newPath) + _, errOld := os.Stat(oldPath) + _, errNew := os.Stat(newPath) - if os.IsNotExist(old) || os.IsExist(new) { + if errors.Is(errOld, fs.ErrNotExist) || errNew == nil { return false }