diff --git a/config/config.go b/config/config.go index a5a212f5..a508d6b4 100644 --- a/config/config.go +++ b/config/config.go @@ -5,8 +5,6 @@ import ( "os" "path/filepath" "time" - - tmconn "github.com/tendermint/tendermint/p2p/conn" ) const ( @@ -304,9 +302,8 @@ type P2PConfig struct { AllowDuplicateIP bool `mapstructure:"allow_duplicate_ip"` // Peer connection configuration. - HandshakeTimeout time.Duration `mapstructure:"handshake_timeout"` - DialTimeout time.Duration `mapstructure:"dial_timeout"` - MConfig tmconn.MConnConfig `mapstructure:"connection"` + HandshakeTimeout time.Duration `mapstructure:"handshake_timeout"` + DialTimeout time.Duration `mapstructure:"dial_timeout"` // Testing params. // Force dial to fail @@ -332,7 +329,6 @@ func DefaultP2PConfig() *P2PConfig { AllowDuplicateIP: true, // so non-breaking yet HandshakeTimeout: 20 * time.Second, DialTimeout: 3 * time.Second, - MConfig: tmconn.DefaultMConnConfig(), TestDialFail: false, TestFuzz: false, TestFuzzConfig: DefaultFuzzConnConfig(), diff --git a/docs/install.rst b/docs/install.rst index 63a4bb65..7ae87eae 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -2,7 +2,11 @@ Install Tendermint ================== The fastest and easiest way to install the ``tendermint`` binary -is to run `this script `__ on a fresh Ubuntu instance. Read the comments / instructions carefully (i.e., reset your terminal after running the script). +is to run `this script `__ on +a fresh Ubuntu instance, +or `this script `__ +on a fresh FreeBSD instance. Read the comments / instructions carefully (i.e., reset your terminal after running the script, +make sure your okay with the network connections being made). From Binary ----------- diff --git a/p2p/peer.go b/p2p/peer.go index 73e2eac2..da69fe74 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -102,6 +102,7 @@ type peer struct { func newPeer( pc peerConn, + mConfig tmconn.MConnConfig, nodeInfo NodeInfo, reactorsByCh map[byte]Reactor, chDescs []*tmconn.ChannelDescriptor, @@ -120,7 +121,7 @@ func newPeer( reactorsByCh, chDescs, onPeerError, - pc.config.MConfig, + mConfig, ) p.BaseService = *cmn.NewBaseService(nil, "Peer", p) diff --git a/p2p/peer_test.go b/p2p/peer_test.go index d4781c65..3a477199 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -27,7 +27,7 @@ func TestPeerBasic(t *testing.T) { rp.Start() defer rp.Stop() - p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), cfg) + p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), cfg, tmconn.DefaultMConnConfig()) require.Nil(err) err = p.Start() @@ -53,7 +53,7 @@ func TestPeerSend(t *testing.T) { rp.Start() defer rp.Stop() - p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), config) + p, err := createOutboundPeerAndPerformHandshake(rp.Addr(), config, tmconn.DefaultMConnConfig()) require.Nil(err) err = p.Start() @@ -65,7 +65,11 @@ func TestPeerSend(t *testing.T) { assert.True(p.Send(testCh, []byte("Asylum"))) } -func createOutboundPeerAndPerformHandshake(addr *NetAddress, config *config.P2PConfig) (*peer, error) { +func createOutboundPeerAndPerformHandshake( + addr *NetAddress, + config *config.P2PConfig, + mConfig tmconn.MConnConfig, +) (*peer, error) { chDescs := []*tmconn.ChannelDescriptor{ {ID: testCh, Priority: 1}, } @@ -86,7 +90,7 @@ func createOutboundPeerAndPerformHandshake(addr *NetAddress, config *config.P2PC return nil, err } - p := newPeer(pc, nodeInfo, reactorsByCh, chDescs, func(p Peer, r interface{}) {}) + p := newPeer(pc, mConfig, nodeInfo, reactorsByCh, chDescs, func(p Peer, r interface{}) {}) p.SetLogger(log.TestingLogger().With("peer", addr)) return p, nil } diff --git a/p2p/switch.go b/p2p/switch.go index 9068aa11..f1ceee5c 100644 --- a/p2p/switch.go +++ b/p2p/switch.go @@ -70,6 +70,8 @@ type Switch struct { filterConnByAddr func(net.Addr) error filterConnByID func(ID) error + mConfig conn.MConnConfig + rng *cmn.Rand // seed for randomizing dial times and orders } @@ -88,10 +90,13 @@ func NewSwitch(cfg *config.P2PConfig) *Switch { // Ensure we have a completely undeterministic PRNG. sw.rng = cmn.NewRand() - sw.config.MConfig.FlushThrottle = time.Duration(cfg.FlushThrottleTimeout) * time.Millisecond - sw.config.MConfig.SendRate = cfg.SendRate - sw.config.MConfig.RecvRate = cfg.RecvRate - sw.config.MConfig.MaxPacketMsgPayloadSize = cfg.MaxPacketMsgPayloadSize + mConfig := conn.DefaultMConnConfig() + mConfig.FlushThrottle = time.Duration(cfg.FlushThrottleTimeout) * time.Millisecond + mConfig.SendRate = cfg.SendRate + mConfig.RecvRate = cfg.RecvRate + mConfig.MaxPacketMsgPayloadSize = cfg.MaxPacketMsgPayloadSize + + sw.mConfig = mConfig sw.BaseService = *cmn.NewBaseService(nil, "P2P Switch", sw) return sw @@ -600,7 +605,7 @@ func (sw *Switch) addPeer(pc peerConn) error { return err } - peer := newPeer(pc, peerNodeInfo, sw.reactorsByCh, sw.chDescs, sw.StopPeerForError) + peer := newPeer(pc, sw.mConfig, peerNodeInfo, sw.reactorsByCh, sw.chDescs, sw.StopPeerForError) peer.SetLogger(sw.Logger.With("peer", addr)) peer.Logger.Info("Successful handshake with peer", "peerNodeInfo", peerNodeInfo) diff --git a/scripts/install/install_tendermint_bsd.sh b/scripts/install/install_tendermint_bsd.sh new file mode 100644 index 00000000..aba584f2 --- /dev/null +++ b/scripts/install/install_tendermint_bsd.sh @@ -0,0 +1,54 @@ +#!/usr/bin/tcsh + +# XXX: this script is intended to be run from +# a fresh Digital Ocean droplet with FreeBSD +# Just run tcsh install_tendermint_bsd.sh + +# upon its completion, you must either reset +# your terminal or run `source ~/.tcshrc` + +# This assumes your installing it through tcsh as root. +# Change the relevant lines from tcsh to csh if your +# installing as a different user, along with changing the +# gopath. + +# change this to a specific release or branch +set BRANCH=master + +sudo pkg update + +sudo pkg upgrade -y +sudo pkg install -y gmake +sudo pkg install -y git + +# get and unpack golang +curl -O https://storage.googleapis.com/golang/go1.10.freebsd-amd64.tar.gz +tar -xvf go1.10.freebsd-amd64.tar.gz + +# move go binary and add to path +mv go /usr/local +set path=($path /usr/local/go/bin) + + +# create the go directory, set GOPATH, and put it on PATH +mkdir go +echo "setenv GOPATH /root/go" >> ~/.tcshrc +setenv GOPATH /root/go +echo "set path=($path $GOPATH/bin)" >> ~/.tcshrc + +source ~/.tcshrc + +# get the code and move into repo +set REPO=github.com/tendermint/tendermint +go get $REPO +cd $GOPATH/src/$REPO + +# build & install master +git checkout $BRANCH +gmake get_tools +gmake get_vendor_deps +gmake install + +# the binary is located in $GOPATH/bin +# run `source ~/.profile` or reset your terminal +# to persist the changes diff --git a/scripts/install_tendermint.sh b/scripts/install/install_tendermint_ubuntu.sh similarity index 100% rename from scripts/install_tendermint.sh rename to scripts/install/install_tendermint_ubuntu.sh