// GetPeerID reads the config of node 'n' and returns its peer ID func GetPeerID(n int) (string, error) { cfg, err := serial.Load(path.Join(IpfsDirN(n), "config")) if err != nil { return "", err } return cfg.Identity.PeerID, nil }
// openConfig returns an error if the config file is not present. func (r *FSRepo) openConfig() error { configFilename, err := config.Filename(r.path) if err != nil { return err } conf, err := serialize.Load(configFilename) if err != nil { return err } r.config = conf return nil }
// ConfigAt returns an error if the FSRepo at the given path is not // initialized. This function allows callers to read the config file even when // another process is running and holding the lock. func ConfigAt(repoPath string) (*config.Config, error) { // packageLock must be held to ensure that the Read is atomic. packageLock.Lock() defer packageLock.Unlock() configFilename, err := config.Filename(repoPath) if err != nil { return nil, err } return serialize.Load(configFilename) }
func starBootstrap(icfg *initCfg) error { // '0' node is the bootstrap node cfgpath := path.Join(IpfsDirN(0), "config") bcfg, err := serial.Load(cfgpath) if err != nil { return err } bcfg.Bootstrap = nil bcfg.Addresses.Swarm = []string{icfg.swarmAddrForPeer(0)} bcfg.Addresses.API = icfg.apiAddrForPeer(0) bcfg.Addresses.Gateway = "" bcfg.Discovery.MDNS.Enabled = icfg.Mdns err = serial.WriteConfigFile(cfgpath, bcfg) if err != nil { return err } for i := 1; i < icfg.Count; i++ { cfgpath := path.Join(IpfsDirN(i), "config") cfg, err := serial.Load(cfgpath) if err != nil { return err } ba := fmt.Sprintf("%s/ipfs/%s", bcfg.Addresses.Swarm[0], bcfg.Identity.PeerID) ba = strings.Replace(ba, "0.0.0.0", "127.0.0.1", -1) cfg.Bootstrap = []string{ba} cfg.Addresses.Gateway = "" cfg.Discovery.MDNS.Enabled = icfg.Mdns cfg.Addresses.Swarm = []string{ icfg.swarmAddrForPeer(i), } cfg.Addresses.API = icfg.apiAddrForPeer(i) err = serial.WriteConfigFile(cfgpath, cfg) if err != nil { return err } } return nil }
func starBootstrap(icfg *initCfg) error { // '0' node is the bootstrap node cfgpath := path.Join(IpfsDirN(0), "config") bcfg, err := serial.Load(cfgpath) if err != nil { return err } bcfg.Bootstrap = nil bcfg.Addresses.Swarm = []string{icfg.swarmAddrForPeer(0)} bcfg.Addresses.API = icfg.apiAddrForPeer(0) bcfg.Addresses.Gateway = "" err = serial.WriteConfigFile(cfgpath, bcfg) if err != nil { return err } for i := 1; i < icfg.Count; i++ { cfgpath := path.Join(IpfsDirN(i), "config") cfg, err := serial.Load(cfgpath) if err != nil { return err } cfg.Bootstrap = []string{fmt.Sprintf("%s/ipfs/%s", bcfg.Addresses.Swarm[0], bcfg.Identity.PeerID)} cfg.Addresses.Gateway = "" cfg.Addresses.Swarm = []string{ icfg.swarmAddrForPeer(i), } cfg.Addresses.API = icfg.apiAddrForPeer(i) err = serial.WriteConfigFile(cfgpath, cfg) if err != nil { return err } } return nil }
func clearBootstrapping(icfg *initCfg) error { for i := 0; i < icfg.Count; i++ { cfgpath := path.Join(IpfsDirN(i), "config") cfg, err := serial.Load(cfgpath) if err != nil { return err } cfg.Bootstrap = nil cfg.Addresses.Gateway = "" cfg.Addresses.Swarm = []string{icfg.swarmAddrForPeer(i)} cfg.Addresses.API = icfg.apiAddrForPeer(i) err = serial.WriteConfigFile(cfgpath, cfg) if err != nil { return err } } return nil }
func IpfsStart(waitall bool) error { var addrs []string n := GetNumNodes() for i := 0; i < n; i++ { dir := IpfsDirN(i) cmd := exec.Command("ipfs", "daemon") cmd.Dir = dir cmd.Env = envForDaemon(i) setupOpt(cmd) stdout, err := os.Create(path.Join(dir, "daemon.stdout")) if err != nil { return err } stderr, err := os.Create(path.Join(dir, "daemon.stderr")) if err != nil { return err } cmd.Stdout = stdout cmd.Stderr = stderr err = cmd.Start() if err != nil { return err } pid := cmd.Process.Pid fmt.Printf("Started daemon %d, pid = %d\n", i, pid) err = ioutil.WriteFile(path.Join(dir, "daemon.pid"), []byte(fmt.Sprint(pid)), 0666) if err != nil { return err } // Make sure node 0 is up before starting the rest so // bootstrapping works properly cfg, err := serial.Load(path.Join(IpfsDirN(i), "config")) if err != nil { return err } maddr := ma.StringCast(cfg.Addresses.API) _, addr, err := manet.DialArgs(maddr) if err != nil { return err } addrs = append(addrs, addr) err = waitOnAPI(cfg.Identity.PeerID, i) if err != nil { return err } } if waitall { for i := 0; i < n; i++ { err := waitOnSwarmPeers(i) if err != nil { return err } } } return nil }