IPFS安装与概览

xcshuan · · 1186 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

IPFS安装与概览

由于我使用的IPFS实现为go-ipfs,所以首先要安装配置Golang环境。

我使用的系统为Ubuntu18.04,后面所有操作均在此系统下完成,下面的教程改自学长给的文档。

本文允许转载,转载前请私信我,并且转载发布要附带源地址以及我的ID。

如你发现本文有错误,可评论私信告知。

一、安装Go

  1. 下载最新的Go语言版本,目前我用的版本为1.11.1,从官网下载时可能需要挂梯子,官网下载地址为golang下载。
  2. 下好linux版本的二进制文件后,将其解压至/usr/local目录下(你也可以解压到其他地方,只要把path设置好)

    sudo tar xf go1.11.1.linux-amd64.tar.gz -C /usr/local
  3. 在/home目录,创建一个go目录,用做gopath

    mkdir ~/go
  4. 配置好路径和环境,对/etc/profile和~/.zshrc(如果你用bash就是~/.bashrc)进行操作

    $sudo vim /etc/profile
    export    GOROOT=/usr/local/go
    export    GOPATH=/HOMEPATH/go    
    export    PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    $source /etc/profile
    $vim ~/.zshrc
    export  GOROOT=/usr/local/go                                                
    export  GOPATH=/home/xcshuan/go                                             
    export  PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    $source ~/.zshrc
  5. 看go语言是否安装成功

    $go version
    go version go1.11.1 linux/amd64

二、安装IPFS

  1. 下载IPFS的go实现源码

    go get -u github.com/ipfs/go-ipfs
  2. 进入源码目录编译安装

    cd ~/go/src/github.com/ipfs/go-ipfs
    make install
    • Note1:若是⼀直处于下载gx,连接ipfs.io,可以架梯子,或者在/etc/hosts中添加

      209.94.78.78 ipfs.io
    • Note2: 编译的过程会在~/go/src/gx/ipfs⽬录下,下载很多包,所以第⼀次编译过程⽐较⻓
    • Note3: 遇到golang.org/x/yyyy包下载超时,可以在github.com/golang下载相应的包后放在~/go/src/golang.org/x/下⾯
  3. 查看IPFS是否安装成功,在终端输入即可看到帮助信息

    $ipfs
    USAGE
      ipfs - Global p2p merkle-dag filesystem.
    
      ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...
    
    SUBCOMMANDS
      BASIC COMMANDS
        init          Initialize ipfs local configuration
        add <path>    Add a file to IPFS
        cat <ref>     Show IPFS object data
        get <ref>     Download IPFS objects
        ls <ref>      List links from an object
        refs <ref>    List hashes of links from an object
      
      DATA STRUCTURE COMMANDS
        block         Interact with raw blocks in the datastore
        object        Interact with raw dag nodes
        files         Interact with objects as if they were a unix filesystem
        dag           Interact with IPLD documents (experimental)
      
      ADVANCED COMMANDS
        daemon        Start a long-running daemon process
        mount         Mount an IPFS read-only mountpoint
        resolve       Resolve any type of name
        name          Publish and resolve IPNS names
        key           Create and list IPNS name keypairs
        dns           Resolve DNS links
        pin           Pin objects to local storage
        repo          Manipulate the IPFS repository
        stats         Various operational stats
        p2p           Libp2p stream mounting
        filestore     Manage the filestore (experimental)
      
      NETWORK COMMANDS
        id            Show info about IPFS peers
        bootstrap     Add or remove bootstrap peers
        swarm         Manage connections to the p2p network
        dht           Query the DHT for values or peers
        ping          Measure the latency of a connection
        diag          Print diagnostics
      
      TOOL COMMANDS
        config        Manage configuration
        version       Show ipfs version information
        update        Download and apply go-ipfs updates
        commands      List all available commands
        cid           Convert and discover properties of CIDs
      
      Use 'ipfs <command> --help' to learn more about each command.
      
      ipfs uses a repository in the local file system. By default, the repo is
      located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
      environment variable:
      
        export IPFS_PATH=/path/to/ipfsrepo
      
      EXIT STATUS
      
      The CLI will exit with one of the following values:
      
      0     Successful execution.
      1     Failed executions.
    $ipfs version
    ipfs version 0.4.18-dev

    可见目前ipfs还不是正式版

三、编程环境

  1. 编辑器 or IDE

    • 可以使用微软的VScode或者jetbrain的Goland来编辑源码,我使用的是VScode
    • 在VScode里安装Go插件,打开一个.go文件VScode会提示你安装一些Go的插件,这些插件有助于源码阅读编辑,建议安装,但是其中有几个会安装失败,此时需要架梯子进行,如果依然失败,在架梯子的前提下,将VScode里的安装命令复制到终端执行,即可成功安装,失败可多次尝试。
  2. 安装zsh,zsh比自带的bash要好用好看很多,有很多插件,建议用OhMyZsh安装,教程自查,Github上有一个zsh的ipfs补全插件,可以选择安装,如果用bash的话,可以在~/go/src/github.com/ipfs/go-ipfs/misc/completion目录下找到ipfs-completion.bash,把这个文件复制到~/.ipfs,然后在home目录新建.bash_completion文件,在文件里加上source ~/.ipfs/ipfs-completion.bash这句,即可在终端补全IPFS指令。

四、简化代码

安装完IPFS后,我们可以看到在$GOPATH/src下面有两个文件夹和ipfs有关,分别是~/go/src/github.com/ipfs和~/go/src/gx/ipfs,第一个为主ipfs文件夹,后一个是由许多包组成的文件夹,后一个为前一个提供底层支持,诸如文件仓库的管理,网络协议之类的都在后一个文件夹,而命令行界面在第一个文件夹。

进入~/go/src/gx/ipfs文件夹,我们发现里面都是Qm开头编码命名的文件夹,再点进去才能看到如go-libp2p-nat的正常文件夹名,Qm编码文件夹很影响代码阅读,我们可以删去它。

在前面make install成功以后,首先终端进入go/src/gx/ipfs和go/src/github.com/ipfs/go-ipfs两个文件夹中运⾏

git init 
git add. 
git commit -m "begin" --allow-empty

这样能保证出问题还可以git reset --hard回滚回去。

  1. go/src/gx/ipfs⽬目录下,将Qmxxx目录中的内容移动出来

    cd go/src/gx/ipfs
    cp -r */* . 
    mkdir -p ../bak
    mv Qm../bak 
  2. 使用通配符,用VScode全局替换所有代码中的“gx/ipfs/Qmxxx/yy”为“gx/ipfs/yy”(否则go-ipfs找不到修改后的package了),包括go/src/gx/ipfs和go/src/github.com/ipfs/go-ipfs在vscode中使用replace功能,这两个文件夹下的所有文件都得替换。

    "gx/ipfs/Qm.*?/
    替换为
    "gx/ipfs/ 
    • 注意1,VScode默认未开启全局搜索功能,请百度开启方法。
    • 注意2,请使用正则模式查找替换
    • 注意3,此次替换设计几千次正则查找,速度非常慢,请耐心等待。
  3. 修改go/src/github.com/ipfs/go-ipfs⽬目录下的Rules.mk,注释掉下⾯面三⾏

    #include mk/gx.mk
    ...
    #deps: gx-deps
    #.PHONY: deps
  4. 在go/src/github.com/ipfs/go-ipfs目录下make install编译通过
  5. 此时新建一个工作区,讲gx/ipfs和go-ipfs两个文件夹都放入工作区中,方便代码阅读编辑。

五、安装辅助工具

ipfs-desktop和IPFS-companion,前者是一个桌面客户端,后者是一个浏览器插件,可以在firefox、Chrome及Safari等浏览器上安装。

六、使用测试

首先终端运行ipfs init

$ipfs init

ipfs就会默认新建一个~/.ipfs文件夹,里面会存一些信息,代表你这个节点已初始化成功

$cd ~/.ipfs
$tree
├── api
├── blocks(文件夹)
├── config
├── datastore(文件夹)
├── datastore_spec
├── ipfs-completion.bash
├── keystore(文件夹)
└── version

然后运行ipfs daemon即可启动ipfs的驻留程序

在浏览器打开http://localhost:5001/webui或者使用ipfs companion可以查看一些内容,如下图所示

webui

可以开一个终端执行ipfs id查看自己节点的信息。

$ipfs id
{
    "ID": "Qme**Fp",
    "PublicKey": "CAASpgI**AAE=",
    "Addresses": [
        "/ip4/127.0.0.1/tcp/4001/ipfs/Qme**5hKrFp",
        "/ip4/192.168.1.125/tcp/4001/ipfs/Qme**T5hKrFp",
        "/ip6/::1/tcp/4001/ipfs/Qme**T5hKrFp",
        "/ip4/222.20.72.127/tcp/4001/ipfs/Qme**qKT5hKrFp"
    ],
    "AgentVersion": "go-ipfs/0.4.18-dev/29**961",
    "ProtocolVersion": "ipfs/0.1.0"
}

你可以新开一个终端使用下ipfs add、ipfs get、ipfs cat、ipfs block put、ipfs block get等功能

好了,本次对ipfs的安装配置到此结束,后续会更新更多内容。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xcshuan

查看原文:IPFS安装与概览

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1186 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传