以太坊geth客户端安装

2018-09-15 56次浏览 发表评论

Geth是Go Ethereum开源项目的简称,它是使用Go语言编写且实现了Ethereum协议的客户端软件,也是目前用户最多,使用最广泛的客户端。通过Geth客户端与以太坊网络进行连接和交互可以实现账户管理、合约部署、挖矿等众多有趣且实用的功能。Geth支持Windows、Mac及Linux等主流操作系统。

下载地址:https://geth.ethereum.org/downloads/

不过一般在Ubuntu系统安装geth不需要下载,使用ppa方式安装,采用Ubuntu16.04:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

这样就已经安装好了,为了方便管理geth客户端,写了一个bash脚本:

#!/bin/bash
# SunKai last update at 2018-9-15
# geth 管理脚本

geth_bin='/usr/bin/geth'

# 数据存储路径
geth_data_path='/data2/geth_data'

# RPC 接口端口
rpcport='9898'

##########################################

echo_r() {
    echo -e "\e[1;31m$1\e[0m"
}
echo_g() {
    echo -e "\e[1;32m$1\e[0m"
}
echo_y() {
    echo -e "\e[1;33m$1\e[0m"
}

if [ ! -e $geth_data_path ]; then
    echo_r "$geth_data_path Not created..."
    exit 1
fi

if ! type $geth_bin > /dev/null 2>&1; then
    echo_r "$geth_bin Not installed"
    exit 1
fi


# 检查进程PID
check_pid() {
    app_pid=$(ps -ef | grep -v "grep\|$0" | grep "$geth_bin" | awk '{print $2}')
    if [ -n "$app_pid" ]; then
        return 0  #start
    else
        return 1  #stop
    fi
}

# 进程启动/停止等待检测15秒
wait_for_pid() {
    i=0
    while [ $i -lt 15 ]; do
        case "$1" in
            'created')
                check_pid
                [ $? -eq 0 ] && i='' && break
            ;;

            'removed')
                check_pid
                [ $? -eq 1 ] && i='' && break
            ;;
        esac

        echo -n .
        i=$(expr $i + 1)
        sleep 1
    done
}

app_start(){

    if check_pid; then
        echo_g "$geth_bin is running (pid:$app_pid)"

    else
        $geth_bin version
        echo '======================================================'
        echo -n "startup $geth_bin..."
        nohup $geth_bin --syncmode "fast" --datadir $geth_data_path \
              --cache 2048 --maxpeers 100 --identity "ethereum ipc" \
              --rpcaddr 0.0.0.0 --rpc --rpcport $rpcport --rpcapi "db,eth,net,web3,personal,txpool" \
              --networkid 1 > $geth_data_path/geth.log 2>&1 &

        wait_for_pid created
        [ -n "$i" ] && echo_r ' failed' || echo_g ' success'
    fi

}

app_stop(){

    if check_pid; then
        echo -n "stop $geth_bin..."
        kill -QUIT $app_pid

        wait_for_pid removed
        [ -n "$i" ] && echo_r ' failed' || echo_g ' success'
    else
        echo_y "$geth_bin is not running"
    fi

}

app_status() {

    if check_pid; then
        $geth_bin version
        echo '======================================================'
        echo_g "$geth_bin is running (pid:$app_pid)"
    else
        echo_y "$geth_bin is not running"
    fi

}

usage() {

    echo '======================================================='
    echo "使用方法:$0 [start|stop|status|restart]"
    echo '-------------------------------------------------------'
    echo "$0 start      启动"
    echo "$0 stop       关闭"
    echo "$0 status     状态"
    echo "$0 restart    重启"

}

case $1 in

    'start')
        app_start
    ;;

    'stop')
        app_stop
    ;;

    'status')
        app_status
    ;;

    'restart')
        app_stop
        sleep 1
        app_start
    ;;

    *)
        usage
    ;;

esac

未完待续...

评论

随便说点,聊聊天~