飞行的蜗牛

vuePress-theme-reco 极客学长    2013 - 2025
飞行的蜗牛 飞行的蜗牛

Choose mode

  • dark
  • auto
  • light
首页
分类
  • 技术杂谈
  • Database
  • Docker
  • PHP
  • 随笔杂谈
  • 前端开发
  • FunnyTools
  • Jekyll
  • 读书笔记
  • Java
  • SpringBoot
  • 区块链技术
  • IPFS
  • C/C++
  • Filecoin
  • Golang
  • Sharding-JDBC
  • 分布式存储
  • Lotus-源码系列
  • Lotus
  • 框架源码系列
  • Spring-源码系列
  • AI
  • ChatGPT
  • Stable Diffusion
  • DeepSeek-R1
  • DeepSeek-V3
标签
时间抽
关于作者
开源项目
GeekAI (opens new window)
author-avatar

极客学长

154

文章

151

标签

首页
分类
  • 技术杂谈
  • Database
  • Docker
  • PHP
  • 随笔杂谈
  • 前端开发
  • FunnyTools
  • Jekyll
  • 读书笔记
  • Java
  • SpringBoot
  • 区块链技术
  • IPFS
  • C/C++
  • Filecoin
  • Golang
  • Sharding-JDBC
  • 分布式存储
  • Lotus-源码系列
  • Lotus
  • 框架源码系列
  • Spring-源码系列
  • AI
  • ChatGPT
  • Stable Diffusion
  • DeepSeek-R1
  • DeepSeek-V3
标签
时间抽
关于作者
开源项目
GeekAI (opens new window)
  • 从零开始搭建 Filecoin 主网挖矿集群[持续更新]

    • 环境说明
      • 搭建编译环境
        • 编译 lotus 源码
          • 启动 lotus daemon
            • 初始化矿工
              • 修改 Miner 配置
                • 使用远程 lotus daemon
                  • 启动 lotus-miner
                    • 启动 lotus-worker
                      • 集群常规运维操作

                      从零开始搭建 Filecoin 主网挖矿集群[持续更新]

                      vuePress-theme-reco 极客学长    2013 - 2025

                      从零开始搭建 Filecoin 主网挖矿集群[持续更新]


                      极客学长 2020-10-20 0 Lotus

                      和菜头 -- 成年人修炼手册

                      角色之所以为角色,是因为舞台恰好需要。

                      如果你是一个 Filecoin 小白,但是略懂 Linux 运维,那么读完这篇教程,你应该可以自己动手搭建一个 Filecoin 挖矿集群。

                      # 环境说明

                      • 操作系统:Ubuntu-18.04LTS
                      • Golang 版本:1.15.5
                      • Rust 版本:1.46
                      • Lotus 版本:1.2.1

                      # 搭建编译环境

                      1. 安装 lotus 编译所需要的依赖库和工具

                        sudo apt install mesa-opencl-icd ocl-icd-opencl-dev gcc git bzr jq pkg-config curl clang build-essential hwloc libhwloc-dev wget -y 
                        
                      2. 安装 golang 编译环境:

                        wget -c https://golang.org/dl/go1.16.4.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
                        

                        添加环境变量

                        echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc && source ~/.bashrc
                        
                      3. 安装 Rust 编译环境

                        提示

                        本步骤需要到 Rust 官方镜像去下载一些软件包,如果你有个好的代理的话,能节省不少时间。

                        curl https://sh.rustup.rs -sSf | sh
                        

                        上面脚本会让你选择安装方式,直接选择 1, 回车。安装完成之后运行下面脚本使 rust 环境变量生效:

                        source $HOME/.cargo/env
                        

                      # 编译 lotus 源码

                      1. 下载源代码,并切换到指定的分支。

                        # clone 源码到本地
                        git clone https://github.com/filecoin-project/lotus.git 
                        # 切换到你想要分支或者 tag 版本,如:
                        cd lotus && git checkout v1.13.0
                        
                      2. AMD 机器编译命令

                        RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean all
                        
                      3. 对于一些不支持 ADX 指令的旧 Intel 和 AMD 处理器可能会因非法指令错误(illegal instruction errors)。可以通过添加 CGO_CFLAGS 环境变量来解决此问题:

                        FFI_BUILD_FROM_SOURCE=1 CGO_CFLAGS_ALLOW="-D__BLST_PORTABLE__" CGO_CFLAGS="-D__BLST_PORTABLE__" make clean all
                        
                      4. 如果想要启用 GPU CUDA 计算支持(能显著提升 C2 计算效率),通过添加 FFI_USE_GPU 环境变量来启用:

                        FFI_BUILD_FROM_SOURCE=1 FFI_USE_GPU=1 make clean all
                        

                      # 启动 lotus daemon

                      由于 Lotus 需要通过设置环境变量的形式来修改节点的默认配置,而使用全局的环境变量又容易污染系统环境,有时还会导致一些莫名奇妙的错误。所以为了避免每次使用 lotus 命令之前都要 输入一大堆环境变量,因此我们建议重写 lotus 命令。

                      首先,新建脚本

                      vim /usr/local/bin/lotus
                      

                      脚本内容如下

                      export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/ 
                      export LOTUS_PATH=/data/lotus 
                      /opt/lotus/lotus $*
                      
                      • /data/lotus lotus 区块存储地址
                      • /opt/lotus/lotus lotus 可执行文件的路径

                      启动 lotus daemon

                      lotus daemon > daemon.log 2>&1 &
                      

                      注意

                      上面的命令是启动全节点,从 0 开始同步区块,这样会比较慢,以目前的高度 286186 来说,网络好的话,估计也得同步 5 天到 1 个星期。 但是通常如果你不是做钱包或者交易所的话,你并不需要全节点,你可以直接从官方提供的快照来同步,或者从其他节点导出快照,再导入到当前 daemon.

                      可以使用以下方式创建完整的 CAR 快照:

                      # usage 
                      lotus chain export <filename> 
                      # e.g
                      lotus chain export lotus-chain-2020-12-02.car
                      

                      通过上面的命令你可以导出一个完整的 lotus chain 快照。不过这个快照比较大,可能超过 100 GB。所以更常用的方式是使用下面的命令导出一个阉割版的快照, 就是只导出最新的区块,跳过以前的旧消息。

                      # usage
                      lotus chain export --skip-old-msgs --recent-stateroots=<stateroots-num> <filename>
                      # e.g
                      lotus chain export --skip-old-msgs --recent-stateroots=2000 lotus-chain-2020-12-02.car
                      

                      --recent-stateroots 参数指定要导出的状态根数,最小快照 --recent-stateroots 为 900,小于 900 的快照可能导入失败。 --skip-old-msgs 参数表示只导出那些 stateroots 直接引用的区块。

                      然后在首次启动 daemon 的时候执行导入快照。(只是第一次需要导入,后面再启动 daemon 就不需要了)。

                      Note: 如果导入失败的话,请试着加大 --recent-stateroots 的值,不过通常情况下 2000 足够了。

                      # Without verification
                      lotus daemon --import-snapshot <filename>
                      # With verification
                      lotus daemon --import-chain <filename>
                      

                      如果你希望在快照导入之后就立即退出守护进程,(例如在docker环境中很有用),请在命令中添加 --halt-after-import 标志:

                      lotus daemon --import-snapshot --halt-after-import <filename>
                      

                      # 初始化矿工

                      进行这个操作之前,你最好先等 lotus daemon 完成区块同步,使用下面的命令检查区块是否同步完成

                      lotus sync wait
                      

                      该命令会显示当前同步多少区块了,还有多少没有同步完成,以及你现在的同步速度。如果没有同步完成,会一直处于阻塞状态,等待同步完成了该命令才会退出。

                      同样的,我们也需要重写 lotus-miner 脚本

                      vim /usr/local/bin/lotus-miner
                      

                      脚本内容如下

                      export FIL_PROOFS_PARAMETER_CACHE=/gamma/filecoin-proof-parameters  # proof 参数路径
                      export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/ 
                      export LOTUS_PATH=/data/lotus  # daemon 数据根路径
                      export LOTUS_MINER_PATH=/data/lotus-miner   # miner 数据存储跟路径
                      export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1  # 启用 GPU加速 COLUMN hash 计算
                      export FIL_PROOFS_USE_GPU_TREE_BUILDER=1  # 启用 GPU 构造 Merkle 树
                      export RUST_LOG=Info 
                      export FIL_PROOFS_MAXIMIZE_CACHING=1 
                      /opt/lotus/lotus-miner $*
                      
                      1. 创建钱包:

                        lotus wallet new bls
                        

                        输出钱包地址: f3xxxx。

                        警告

                        创建好钱包先不要急着充值,而是要先备份钱包私钥!!!

                        lotus wallet export f3xxxx
                        
                      2. 充值,如果只是创建矿工的话,充值 1 个FIL 足够了。

                      3. 创建矿工。

                        # usage
                        lotus-miner init --owner=<address> --sector-size=<val>
                        # e.g
                        lotus-miner init --owner=f0xxxx --sector-size=32GiB
                        lotus-miner init --owner=f0xxxx --sector-size=64GiB
                        

                      # 修改 Miner 配置

                      miner 的配置文档在 $LOTUS_MINER_PATH/config.toml,如果你是跑单节点的话,那么无需修改配置文档,但是如果你是需要跑集群的话, 那么你需要修改下面几个地方:

                      1. 修改 API 连接配置,主要用于 worker 连接 miner.

                        # e.g
                        [API]
                        ListenAddress = "/ip4/xxx.xxx.xxx.xxx/tcp/2345/http"
                        RemoteListenAddress = "xxx.xxx.xxx.xxx:2345"
                        

                        xxx.xxx.xxx.xxx 替换成你 miner 的内网 IP 地址。

                      2. 修改 [Storage] 选项,将密封相关的任务全部分配给 worker 去做。

                        [Storage]
                        #  ParallelFetchLimit = 10
                        AllowAddPiece = false
                        AllowPreCommit1 = false
                        AllowPreCommit2 = false
                        AllowCommit = false
                        #  AllowUnseal = true
                        

                      # 使用远程 lotus daemon

                      如果你的 miner 和 lotus daemon 是跑在不同的机器上,那么你需要做一些额外的配置:

                      1. 配置你的 lotus daemon config.toml 文件:

                        # e.g
                        [API]
                        ListenAddress = "/ip4/xxx.xxx.xxx.xxx/tcp/1234/http"
                        RemoteListenAddress = "xxx.xxx.xxx.xxx:1234"
                        

                        xxx.xxx.xxx.xxx 替换成你 lotus daemon 的内网 IP 地址。

                      2. 拷贝 lotus dameon 的 api 和 token 文件到 miner 机器的 $LOTUS_PATH 目录下。

                      # 启动 lotus-miner

                      lotus-miner run > miner.log 2>&1 &
                      

                      # 启动 lotus-worker

                      同样的,我们也需要重写 lotus-worker 脚本

                      vim /usr/local/bin/lotus-worker
                      

                      脚本内容如下

                      export FIL_PROOFS_PARAMETER_CACHE=/gamma/filecoin-proof-parameters  # proof 参数路径
                      export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/ 
                      export LOTUS_WORKER_PATH=/data/lotus-worker  # worker 数据存储目录
                      export LOTUS_MINER_PATH=/data/lotus-miner   # 保存 miner api 和 token 的目录
                      export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1  # 启用 GPU加速 COLUMN hash 计算
                      export FIL_PROOFS_USE_GPU_TREE_BUILDER=1  # 启用 GPU 构造 Merkle 树
                      export RUST_LOG=Info
                      export FIL_PROOFS_MAXIMIZE_CACHING=1 
                      /opt/lotus/lotus-worker $*
                      
                      1. 拷贝 miner 的 api 和 token 文件到 $LOTUS_MINER_PATH 目录下。

                      2. 启动 worker 程序,可以根据传入不同的参数来定义 worker 的类型。

                        (1) 启动一个只接 P1 任务的 worker

                        lotus-worker run --listen=11.11.11.11:2345 --precommit1=true --precommit2=false -commit=false
                        

                        注意: 11.11.11.11 需要替换成你 worker 的内网 IP 地址。

                        (2) 启动一个可以同时接 P1 和 P2 任务的 worker

                        lotus-worker run --listen=11.11.11.11:2345 --precommit1=true --precommit2=true -commit=false
                        

                        (2) 启动一个只接 C2 任务的 worker

                        lotus-worker run --listen=11.11.11.11:2345 --precommit1=false --precommit2=false -commit=true
                        

                      worker 启动之后会自动通过我们在 lotus-worker 脚本里配置的 API 信息,连接到 miner 领取任务,你可以通过下面的命令查看已经连接到 miner 的 worker 列表。

                      lotus-miner sealing workers
                      

                      Worker 也启动了,那么接下来我们就可以开始质押扇区,启动挖矿了。

                      lotus-miner sectors pledge # 质押一个随机数据的扇区,开始密封
                      

                      查询当前集群的任务分配情况:

                      lotus-miner sealing jobs
                      

                      # 集群常规运维操作

                      集群操作请参考 Filecoin 运维(2) - 环境变量和常用运维操作,此处不再赘述。

                      本站博文如非注明转载则均属作者原创文章,引用或转载无需申请版权或者注明出处,如需联系作者请加微信: geekmaster01

                      Ceph-09 使用 PHP 操作 Ceph S3 接口 2021 博客更新计划