mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-09 23:00:58 +00:00
Merge pull request #1744 from Zillode/fix-1692
Upgrade running Syncthing instances (fixes #1692)
This commit is contained in:
commit
1c31cf6319
@ -10,6 +10,7 @@ import (
|
|||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -349,7 +350,13 @@ func main() {
|
|||||||
// Use leveldb database locks to protect against concurrent upgrades
|
// Use leveldb database locks to protect against concurrent upgrades
|
||||||
_, err = leveldb.OpenFile(locations[locDatabase], &opt.Options{OpenFilesCacheCapacity: 100})
|
_, err = leveldb.OpenFile(locations[locDatabase], &opt.Options{OpenFilesCacheCapacity: 100})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Fatalln("Cannot upgrade, database seems to be locked. Is another copy of Syncthing already running?")
|
l.Infoln("Attempting upgrade through running Syncthing...")
|
||||||
|
err = upgradeViaRest()
|
||||||
|
if err != nil {
|
||||||
|
l.Fatalln("Upgrade:", err)
|
||||||
|
}
|
||||||
|
l.Okln("Syncthing upgrading")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = upgrade.To(rel)
|
err = upgrade.To(rel)
|
||||||
@ -374,6 +381,43 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func upgradeViaRest() error {
|
||||||
|
cfg, err := config.Load(locations[locConfigFile], protocol.LocalDeviceID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
target := cfg.GUI().Address
|
||||||
|
if cfg.GUI().UseTLS {
|
||||||
|
target = "https://" + target
|
||||||
|
} else {
|
||||||
|
target = "http://" + target
|
||||||
|
}
|
||||||
|
r, _ := http.NewRequest("POST", target+"/rest/system/upgrade", nil)
|
||||||
|
r.Header.Set("X-API-Key", cfg.GUI().APIKey)
|
||||||
|
|
||||||
|
tr := &http.Transport{
|
||||||
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||||
|
}
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: tr,
|
||||||
|
Timeout: 60 * time.Second,
|
||||||
|
}
|
||||||
|
resp, err := client.Do(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
bs, err := ioutil.ReadAll(resp.Body)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return errors.New(string(bs))
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func syncthingMain() {
|
func syncthingMain() {
|
||||||
// Create a main service manager. We'll add things to this as we go along.
|
// Create a main service manager. We'll add things to this as we go along.
|
||||||
// We want any logging it does to go through our log system, with INFO
|
// We want any logging it does to go through our log system, with INFO
|
||||||
|
Loading…
Reference in New Issue
Block a user