mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 19:08:58 +00:00
cmd/syncthing, lib/config: Update default config creation (#5492)
Also remove dead code in config.Wrapper.
This commit is contained in:
parent
6452e16f15
commit
82afe73a9a
@ -1068,45 +1068,15 @@ func setupGUI(mainService *suture.Supervisor, cfg *config.Wrapper, m *model.Mode
|
|||||||
}
|
}
|
||||||
|
|
||||||
func defaultConfig(cfgFile string) *config.Wrapper {
|
func defaultConfig(cfgFile string) *config.Wrapper {
|
||||||
myName, _ := os.Hostname()
|
newCfg := config.NewWithFreePorts(myID)
|
||||||
|
|
||||||
var defaultFolder config.FolderConfiguration
|
if noDefaultFolder {
|
||||||
|
|
||||||
if !noDefaultFolder {
|
|
||||||
l.Infoln("Default folder created and/or linked to new config")
|
|
||||||
defaultFolder = config.NewFolderConfiguration(myID, "default", "Default Folder", fs.FilesystemTypeBasic, locations[locDefFolder])
|
|
||||||
} else {
|
|
||||||
l.Infoln("We will skip creation of a default folder on first start since the proper envvar is set")
|
l.Infoln("We will skip creation of a default folder on first start since the proper envvar is set")
|
||||||
|
return config.Wrap(cfgFile, newCfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
thisDevice := config.NewDeviceConfiguration(myID, myName)
|
newCfg.Folders = append(newCfg.Folders, config.NewFolderConfiguration(myID, "default", "Default Folder", fs.FilesystemTypeBasic, locations[locDefFolder]))
|
||||||
thisDevice.Addresses = []string{"dynamic"}
|
l.Infoln("Default folder created and/or linked to new config")
|
||||||
|
|
||||||
newCfg := config.New(myID)
|
|
||||||
if !noDefaultFolder {
|
|
||||||
newCfg.Folders = []config.FolderConfiguration{defaultFolder}
|
|
||||||
}
|
|
||||||
newCfg.Devices = []config.DeviceConfiguration{thisDevice}
|
|
||||||
|
|
||||||
port, err := getFreePort("127.0.0.1", 8384)
|
|
||||||
if err != nil {
|
|
||||||
l.Fatalln("get free port (GUI):", err)
|
|
||||||
}
|
|
||||||
newCfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port)
|
|
||||||
|
|
||||||
port, err = getFreePort("0.0.0.0", 22000)
|
|
||||||
if err != nil {
|
|
||||||
l.Fatalln("get free port (BEP):", err)
|
|
||||||
}
|
|
||||||
if port == 22000 {
|
|
||||||
newCfg.Options.ListenAddresses = []string{"default"}
|
|
||||||
} else {
|
|
||||||
newCfg.Options.ListenAddresses = []string{
|
|
||||||
fmt.Sprintf("tcp://%s", net.JoinHostPort("0.0.0.0", strconv.Itoa(port))),
|
|
||||||
"dynamic+https://relays.syncthing.net/endpoint",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config.Wrap(cfgFile, newCfg)
|
return config.Wrap(cfgFile, newCfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1146,27 +1116,6 @@ func ensureDir(dir string, mode fs.FileMode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getFreePort returns a free TCP port fort listening on. The ports given are
|
|
||||||
// tried in succession and the first to succeed is returned. If none succeed,
|
|
||||||
// a random high port is returned.
|
|
||||||
func getFreePort(host string, ports ...int) (int, error) {
|
|
||||||
for _, port := range ports {
|
|
||||||
c, err := net.Listen("tcp", fmt.Sprintf("%s:%d", host, port))
|
|
||||||
if err == nil {
|
|
||||||
c.Close()
|
|
||||||
return port, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.Listen("tcp", host+":0")
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
addr := c.Addr().(*net.TCPAddr)
|
|
||||||
c.Close()
|
|
||||||
return addr.Port, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func standbyMonitor() {
|
func standbyMonitor() {
|
||||||
restartDelay := 60 * time.Second
|
restartDelay := 60 * time.Second
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
@ -47,6 +47,7 @@ var (
|
|||||||
util.Address("tcp", net.JoinHostPort("0.0.0.0", strconv.Itoa(DefaultTCPPort))),
|
util.Address("tcp", net.JoinHostPort("0.0.0.0", strconv.Itoa(DefaultTCPPort))),
|
||||||
"dynamic+https://relays.syncthing.net/endpoint",
|
"dynamic+https://relays.syncthing.net/endpoint",
|
||||||
}
|
}
|
||||||
|
DefaultGUIPort = 8384
|
||||||
// DefaultDiscoveryServersV4 should be substituted when the configuration
|
// DefaultDiscoveryServersV4 should be substituted when the configuration
|
||||||
// contains <globalAnnounceServer>default-v4</globalAnnounceServer>.
|
// contains <globalAnnounceServer>default-v4</globalAnnounceServer>.
|
||||||
DefaultDiscoveryServersV4 = []string{
|
DefaultDiscoveryServersV4 = []string{
|
||||||
@ -83,6 +84,31 @@ func New(myID protocol.DeviceID) Configuration {
|
|||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewWithFreePorts(myID protocol.DeviceID) Configuration {
|
||||||
|
cfg := New(myID)
|
||||||
|
|
||||||
|
port, err := getFreePort("127.0.0.1", DefaultGUIPort)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatalln("get free port (GUI):", err)
|
||||||
|
}
|
||||||
|
cfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port)
|
||||||
|
|
||||||
|
port, err = getFreePort("0.0.0.0", DefaultTCPPort)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatalln("get free port (BEP):", err)
|
||||||
|
}
|
||||||
|
if port == DefaultTCPPort {
|
||||||
|
cfg.Options.ListenAddresses = []string{"default"}
|
||||||
|
} else {
|
||||||
|
cfg.Options.ListenAddresses = []string{
|
||||||
|
fmt.Sprintf("tcp://%s", net.JoinHostPort("0.0.0.0", strconv.Itoa(port))),
|
||||||
|
"dynamic+https://relays.syncthing.net/endpoint",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
func ReadXML(r io.Reader, myID protocol.DeviceID) (Configuration, error) {
|
func ReadXML(r io.Reader, myID protocol.DeviceID) (Configuration, error) {
|
||||||
var cfg Configuration
|
var cfg Configuration
|
||||||
|
|
||||||
@ -840,3 +866,23 @@ func filterURLSchemePrefix(addrs []string, prefix string) []string {
|
|||||||
}
|
}
|
||||||
return addrs
|
return addrs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tried in succession and the first to succeed is returned. If none succeed,
|
||||||
|
// a random high port is returned.
|
||||||
|
func getFreePort(host string, ports ...int) (int, error) {
|
||||||
|
for _, port := range ports {
|
||||||
|
c, err := net.Listen("tcp", fmt.Sprintf("%s:%d", host, port))
|
||||||
|
if err == nil {
|
||||||
|
c.Close()
|
||||||
|
return port, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := net.Listen("tcp", host+":0")
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
addr := c.Addr().(*net.TCPAddr)
|
||||||
|
c.Close()
|
||||||
|
return addr.Port, nil
|
||||||
|
}
|
||||||
|
@ -64,7 +64,6 @@ type Wrapper struct {
|
|||||||
|
|
||||||
deviceMap map[protocol.DeviceID]DeviceConfiguration
|
deviceMap map[protocol.DeviceID]DeviceConfiguration
|
||||||
folderMap map[string]FolderConfiguration
|
folderMap map[string]FolderConfiguration
|
||||||
replaces chan Configuration
|
|
||||||
subs []Committer
|
subs []Committer
|
||||||
mut sync.Mutex
|
mut sync.Mutex
|
||||||
|
|
||||||
@ -79,7 +78,6 @@ func Wrap(path string, cfg Configuration) *Wrapper {
|
|||||||
path: path,
|
path: path,
|
||||||
mut: sync.NewMutex(),
|
mut: sync.NewMutex(),
|
||||||
}
|
}
|
||||||
w.replaces = make(chan Configuration)
|
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,12 +102,6 @@ func (w *Wrapper) ConfigPath() string {
|
|||||||
return w.path
|
return w.path
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop stops the Serve() loop. Set and Replace operations will panic after a
|
|
||||||
// Stop.
|
|
||||||
func (w *Wrapper) Stop() {
|
|
||||||
close(w.replaces)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subscribe registers the given handler to be called on any future
|
// Subscribe registers the given handler to be called on any future
|
||||||
// configuration changes.
|
// configuration changes.
|
||||||
func (w *Wrapper) Subscribe(c Committer) {
|
func (w *Wrapper) Subscribe(c Committer) {
|
||||||
|
Loading…
Reference in New Issue
Block a user