请问 CITA 有 Stable 版本吗

macOS Mojave version.10.14.3

根据 Getting Started 上的流程,试了好多遍(包括编译好的包与自行编译),一直没能流畅运行。

主要报错有两个:

  1. Unable to resolve host linuxkit-025000000001

    这个主要出现在最新版本(v0.21.1) 上面,包括源码编译与编译包都有这个问题。

    • 检查了 --net-host
  2. Node ‘test-chain/0’ not responding to pings

    这个主要出现在,第一个问题不报错的情况下,同样,v0.21.1 的官方编译包,源代码编译,包括我自己改了脚本都有这个问题,在容器里测试,看到了 cita-forever 的 pnaic,是否是 git submodules update 后 cita-forever 的问题?

    • 节点在 start 的过程中,能够 pong…

Link issue #334.


感谢 leeyr 的帮助。

解决办法

1. Unable to resolve host linuxkit-025000000001

mac 环境会出现的错误

将 --net-host 修改为 --net-host=bridge

2. Node ‘test-chain/0’ not responding to pings

使用 daemon.sh 运行 start 节点。

$ ./daemon.sh bin/cita start test-chain/0

3. Node Not Found

在镜像中运行 ./cita start test-chain/0 找不到节点

bin/cita start test-chain/0

后续

完成了 formula, 可以用来直接安装 CITA.

安装 Docker:

brew cask install docker

点击状态栏里面的 docker 图标,设置共享 /usr/local/Cellar/cita 这个文件

安装 CITA

brew tap clearloop/hypercask
brew install cita

部署 CITA

# 预设了 test-chain, 不需要跑配置脚本
cita setup test-chain/0

启动 CITA

cita start test-chain/0

停止 CITA

cita stop test-chain/0

更多操作

cita help
1赞

我们会马上补充在 mac 上的流程的

我一开始还以为你说 Rust 的 stable 版本……

我们每个发布版本都会尽量保证向前兼容及功能稳定。
我理解你说的 stable 版本,我只能在 1.0.0 给你这样的承诺

甩个链接: https://github.com/cryptape/cita/projects/5

@leeyr
在 mac 上有什么需要注意的吗?你协助一下?

好。
其实在MAC下使用docker 执行CITA最大的不同在于,端口映射与linux下不同。就是上面所说的--net-host
Change

--net=host

to

--net=bridge \

And add

-p 1337:1337 \
-p 4000:4000 \

其它就没有了。出现Node ‘test-chain/0’ not responding to pings,想问一下你有没有执行过:
bin/cita setup test-chain/0
?

日志贴一下看看?

因为我注意到你的流程里,好像没有提到setup这个动作。

一、Stable 的问题

对,是关于 CITA 的 Stable 版本问题,一个固定的编译好的包,可以随便修改脚本,rust 可执行文件都没有问题的那种 XD

1.git-submodule

一开始以为是 git submodule update 的问题,查了一下 git-submoduleman:

Update the registered submodules to match what the superproject expects by cloning missing submodules and updating the working tree of the submodules. The “updating” can be done in several ways depending on command line options and the value of submodule..update configuration variable. The command line option takes precedence over the configuration variable. If neither is given, a checkout is performed. The update procedures supported both from the command line as well as through the submodule..

但是,对于 git submodule update 会不会更新所有包的最新进度,还是很懵…如果会更新所有 sub 包的最新进度,那么问题就可能就不在目前的流程中了?

2.Rust Stable

这个我也确实有疑问,我直接在我的电脑上编译,到了 parity-rocksdb 那里,会报错,想起来之前遇到过关于 serializenightly Features 的问题。

CITA 是在 Nightly 环境下开发的吗?本机编译是否需要指定 Rust 版本?

我的 Rust 版本是:stable 1.33.0

二、在我的电脑上执行的流程

步骤一

# 下载编译好的 ed25519-v.21.1
$ wget https://github.com/cryptape/cita/releases/download/v0.21.1/cita_ed25519_blake2b.tar.gz
# 解压
$ tar zxvf cita_ed25519_blake2b.tar.gz
# 进入目录
$ cd cita_ed25519_blake2b.tar.gz
# 查看目录
$ tree -L 1
.
├── bin
├── daemon.sh
├── env.sh
├── resource
└── scripts

步骤二

# Generate test-chain.
$ ./env.sh ./scripts/create_cita_config.py create --super_admin "0x4b5ae4567ad5d9fb92bc9afd6a657e6fa13a2523" --nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003"

# -*- 没有报错 -*-

步骤三

$ ./env.sh ./bin/cita setup test-chain/0
sudo: unable to resolve host linuxkit-025000000001

$ ./env.sh ./bin/cita setup test-chain/1
sudo: unable to resolve host linuxkit-025000000001

# 根据电脑情况修改 env.sh
$ sed -i.bak s/host/bridge/g env.sh
# -*- 同时修改了端口的参数
$ sed -n '34,50p' ./env.sh 
# docker 部分
docker ps | grep ${CONTAINER_NAME} > /dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "Start docker container ${CONTAINER_NAME} ..."
    docker rm ${CONTAINER_NAME} > /dev/null 2>&1
    docker run -d \
           --net=bridge \
           --volume ${RELEASE_DIR}:${WORKDIR} \
           --volume ${LOCALTIME_PATH}:/etc/localtime \
           --env USER_ID=${USER_ID} \
           --workdir ${WORKDIR} \
           --name ${CONTAINER_NAME} ${DOCKER_IMAGE} \
           -p 1337:1337 \
           -p 4000:4000 \
           /bin/bash -c "while true;do sleep 100;done"
    # Wait entrypoint.sh to finish
    sleep 3
fi

步骤四

$ ./env.sh ./bin/cita setup test-chain/0
sudo: unable to resolve host linuxkit-025000000001
# -*- 还是报错 ; ( -*-

三、反思

1.前两天刚试的时候并没有 linux-host 的这个问题,还可以再想想办法自行解决。

  • 环境/配置问题?
  • Docker 的问题?
  • 容器版本问题?
  • 电脑缓存的问题?
  • 运气的问题…

2.Node Not Ressopding… 之前一直以为是我修改了脚本的问题,后来发现直接在我的电脑上运行官方编译好的,也有这个问题,尝试了直接调用 cita-forever, log 等下补上:hourglass_flowing_sand:

1赞

你步骤4没有成功,应该是你在上次执行./env.sh的时候没有改--net=bridge。而本次改后执行,它是不会重新加载镜像的:

docker ps | grep ${CONTAINER_NAME} > /dev/null 2>&1
if [ $? -ne 0 ]; then
...

所以你在改完后,要先把之前运行的docker kill掉,它就会用新的配置重新加载了。

完了之后,你再执行:

./env.sh ./bin/cita setup test-chain/0
./env.sh ./bin/cita start test-chain/0

以下是我执行的结果:

./env.sh
Start docker container cita_run_Volumes_x_cryptape_code_cita-release_cita_ed25519_blake2b ...
6a90f96139ec0867606a61c1f173569267ae9b4b2140e040fb211c907be19eb9
user@6a90f96139ec:~/cita-run$ ./bin/cita setup test-chain/0
user@6a90f96139ec:~/cita-run$ ./bin/cita start test-chain/0
ok
user@6a90f96139ec:~/cita-run$ ps aux | grep cita
user      2133  0.1  0.0  55256  3784 pts/0    Sl   19:25   0:00 cita-forever
user      2142  5.4  0.6 265152 28288 pts/0    Sl   19:25   0:01 cita-executor -c executor.toml
user      2145  1.7  0.3 129416 12148 pts/0    Sl   19:25   0:00 cita-network -c network.toml
user      2146  2.0  0.4 186100 17988 pts/0    Sl   19:25   0:00 cita-bft -c consensus.toml -p privkey
user      2147  7.1  0.5 228192 21992 pts/0    Sl   19:25   0:01 cita-auth -c auth.toml
user      2148  3.2  0.5 208040 21952 pts/0    Sl   19:25   0:00 cita-chain -c chain.toml
user      2149  1.2  0.6 126672 26272 pts/0    Sl   19:25   0:00 cita-jsonrpc -c jsonrpc.toml
user      2259  0.0  0.0  11460  1036 pts/0    S+   19:26   0:00 grep cita

又试了下,这次 not found 了…我再看看脚本 0 0

  1. 解压 cita_ed25519_blake2b.tar.gz 后,修改配置文件:

    docker run -d \
            --net=bridge \
            --volume ${RELEASE_DIR}:${WORKDIR} \
            ...
    
  2. 查看是否有 docker container 残留:—— (刚才的坑,使用了老 container)

     𝝺 docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
     𝝺 
    
  3. 直接进镜像:

     𝝺 ./env.sh
    Start docker container cita_run_usr_local_Cellar_cita_0.20.3_cita_ed25519_blake2b ...
    eacbe1506ac7e0c53e9ac177b573cc7a3f6641d536737b74df7972d3385ae76f
    
    user@eacbe1506ac7:~/cita-run$ ps aux | grep cita
    user        31  0.0  0.0  11460  1064 pts/0    S+   20:50   0:00 grep cita
    
    user@eacbe1506ac7:~/cita-run$ 
    
  4. 生成测试文件

    user@eacbe1506ac7:~/cita-run$ ./scripts/create_cita_config.py create --super_admin "0x4b5ae4567ad5d9fb92bc9afd6a657e6fa13a2523" --nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003"
    
  5. 设置节点

    user@eacbe1506ac7:~/cita-run/bin$ ./cita setup test-chain/0
    No such node directory: test-chain/0
    user@eacbe1506ac7:~/cita-run/bin$
    
  6. 在镜像中的 cita-run 目录中删除刚才生成的 test-chain,退回镜像外:

  7. 再次生成 test-chain

  8. 再次进入镜像

  9. 退出镜像, 再次 setup —— (设置成功是因为路径 ok)

    𝝺 ./env.sh bin/cita setup test-chain/0
    𝝺 
    

10. 在外面启动节点 —— (这里应该使用 daemon.sh)

𝝺 ./env.sh bin/cita start test-chain/0
ok
𝝺
  1. 进入镜像
    user@eacbe1506ac7:~/cita-run$ ps aux | grep cita
    user      3439  0.0  0.0  11460  1056 pts/0    S+   21:10   0:00 grep cita
    user@eacbe1506ac7:~/cita-run$ 
    

12. 在镜像中启动

你的执行路径不对:
执行时要在~/cita-run, 所有找不到test-chain/0.

Nice!

user@eacbe1506ac7:~/cita-run$ ./bin/cita test-chain/0
Usage: cita <command> <node> [options]
where <command> is one of the following:
    { help | setup | start | stop | restart | ping
      top | backup | clean | logs | logrotate }

Run `cita help` for more detailed information.

user@eacbe1506ac7:~/cita-run$ ./bin/cita start test-chain/0
ok
user@eacbe1506ac7:~/cita-run$ ps aux | grep cita
user      3599  0.0  0.1  53208  3872 pts/0    Sl   21:16   0:00 cita-forever
user      3616  0.4  1.2 116420 26428 pts/0    Sl   21:16   0:00 cita-jsonrpc -c jsonrpc.toml
user      3617  0.7  1.0 205992 21812 pts/0    Sl   21:16   0:00 cita-chain -c chain.toml
user      3618  2.6  1.3 248768 27268 pts/0    Sl   21:16   0:00 cita-executor -c executor.toml
user      3619  2.6  1.0 220000 22516 pts/0    Sl   21:16   0:00 cita-auth -c auth.toml
user      3622  0.6  0.6 121224 12928 pts/0    Sl   21:16   0:00 cita-network -c network.toml
user      3623  0.5  0.8 179956 18364 pts/0    Sl   21:16   0:00 cita-bft -c consensus.toml -p privkey
user      3729  0.0  0.0  11460  1036 pts/0    S+   21:16   0:00 grep cita
user@eacbe1506ac7:~/cita-run$ 

在镜像里面启动,ok

退回镜像外启动,Node Not Responding…

并且在镜像外启动,不会报错

这个路径真的令人头晕 = =

我去修改下我的脚本还有 formula.

镜像外启动的脚本发给我看一下。

这个脚本我之前在自己的分支里面检查过,问题这里:

# Wait for the node to come up                                                                                                                                                                          
 WAIT=3
 while [ $WAIT -gt 0 ]; do
     WAIT=`expr $WAIT - 1`
     sleep 1
     do_ping
     if [ "${PING_STATUS}" == "pong" ]; then
         exit 0
     fi
 done
 echo "Failed to start within 3 seconds,"
 echo "See ${NODE_LOGS_DIR}/cita-forever.log for detail"
 exit 1

启动的过程中可以 pong 通,结束后就没有了,搞得我怀疑 cita-forever…

在容器外执行start,你要用daemon.sh这个脚本。

./daemon.sh ./bin/cita start test-chain/0

详细请看

所以这里也要注意,整理的时候要关注到。

我修改下我的 脚本formula.