配置文件问题 - Agzs/geth-pbft-study GitHub Wiki

1、core.yaml文件

修改viper中获取core.yaml的路径:(注释部分为$HOME/.geth-pbft路径,未注释部分为$GOPATH/src/github.com/yeongchingtarn/geth-pbft/node路径)

                viper.AddConfigPath("./") // Path to look for the config file in
		//========================================================>
		// Path to look for the config file in based on HOME
		// home := os.Getenv("HOME") //=>GOPATH -> HOME --Agzs
		// for _, p := range filepath.SplitList(home) {
		// 	pbftpath := filepath.Join(p, ".geth-pbft") //=>11.13 path--Agzs
		// 	viper.AddConfigPath(pbftpath)
		// }
		//=========================================================>
		// Path to look for the config file in based on GOPATH
		gopath := os.Getenv("GOPATH")
		for _, p := range filepath.SplitList(gopath) {
			peerpath := filepath.Join(p, "src/github.com/yeongchingtarn/geth-pbft/node")
			viper.AddConfigPath(peerpath)
		}

调整rocksDB中db.Start()和db.Stop()的方式,二者仅在geth-pbft版本下的signer情形下启动,即含有PBFT配置文件的pbft实例下才会启动rocksDB。此外,修改core.yaml文件中的fileSystemPath/usr/local/geth-pbft/hyperledgerRocksDB/signer,这样在ubuntu的任何账户下该路径不用重新修改。

2、config.yaml文件

修改viper中获取config.yaml的路径:(注释部分为$HOME/.geth-pbft路径,未注释部分为$GOPATH/src/github.com/yeongchingtarn/geth-pbft/consensus/pbft路径)

        //========================================================>
	// Path to look for the config file in based on HOME
	// home := os.Getenv("HOME") //=>GOPATH -> HOME --Agzs
	// for _, p := range filepath.SplitList(home) {
	// 	pbftpath := filepath.Join(p, ".geth-pbft") //=>11.13 $HOME/.geth-pbft. path--Agzs
	// 	config.AddConfigPath(pbftpath)
	// }
	//=========================================================>
	// Path to look for the config file in based on GOPATH
	gopath := os.Getenv("GOPATH")
	for _, p := range filepath.SplitList(gopath) {
		pbftpath := filepath.Join(p, "src/github.com/yeongchingtarn/geth-pbft/consensus/pbft")
		config.AddConfigPath(pbftpath)
	}

3、通过shell脚本,配置.yaml文件

大体思路:将.yaml文件和可执行程序(geth、puppeth...)放在同一个文件夹,在该文件夹内创建名为install.sh的shell脚本,通过运行该脚本,将.yaml文件放到指定目录($HOME/.geth-pbft),将可执行程序安装到指定目录(/usr/local/geth-pbft),并将可执行程序的安装目录添加到环境变量PATH中。

编写install.sh脚本,如下:

#!/bin/bash
set -eu

prefix="$HOME"

if [ "${PREFIX:-}" != "" ] ; then
  prefix=${PREFIX:-}
elif [ "${BOXEN_HOME:-}" != "" ] ; then
  prefix=${BOXEN_HOME:-}
fi

rm -rf $prefix/geth-pbft
mkdir -p $prefix/geth-pbft

for i in `ls -l |awk 'NR>1 {print $NF}' `
do
  for FILE in `echo $i | awk  '/yaml$/{print $i}'`
    do
       mv $i  "$prefix/geth-pbft"
    done
done

mv $HOME/geth-pbft $HOME/.geth-pbft
rm -rf rm -rf $prefix/geth-pbft

prefix2="/usr/local"

if [ "${PREFIX:-}" != "" ] ; then
  prefix2=${PREFIX:-}
elif [ "${BOXEN_HOME:-}" != "" ] ; then
  prefix2=${BOXEN_HOME:-}
fi

rm -rf $prefix2/geth-pbft
mkdir -p $prefix2/geth-pbft

pushd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null

  install abigen "$prefix2/geth-pbft"
  install bootnode "$prefix2/geth-pbft"
  install evm "$prefix2/geth-pbft"
  install faucet "$prefix2/geth-pbft"
  install puppeth "$prefix2/geth-pbft"
  install rlpdump "$prefix2/geth-pbft"
  install geth "$prefix2/geth-pbft"
  
popd > /dev/null

注:该脚本参考git-lfs的安装脚本