IPFS安装与概览
由于我使用的IPFS实现为go-ipfs,所以首先要安装配置Golang环境。
我使用的系统为Ubuntu18.04,后面所有操作均在此系统下完成,下面的教程改自学长给的文档。
本文允许转载,转载前请私信我,并且转载发布要附带源地址以及我的ID。
如你发现本文有错误,可评论私信告知。
一、安装Go
- 下载最新的Go语言版本,目前我用的版本为1.11.1,从官网下载时可能需要挂梯子,官网下载地址为golang下载。
-
下好linux版本的二进制文件后,将其解压至/usr/local目录下(你也可以解压到其他地方,只要把path设置好)
sudo tar xf go1.11.1.linux-amd64.tar.gz -C /usr/local
-
在/home目录,创建一个go目录,用做gopath
mkdir ~/go
-
配置好路径和环境,对/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
-
看go语言是否安装成功
$go version go version go1.11.1 linux/amd64
二、安装IPFS
-
下载IPFS的go实现源码
go get -u github.com/ipfs/go-ipfs
-
进入源码目录编译安装
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/下⾯
-
-
查看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还不是正式版
三、编程环境
-
编辑器 or IDE
- 可以使用微软的VScode或者jetbrain的Goland来编辑源码,我使用的是VScode。
- 在VScode里安装Go插件,打开一个.go文件VScode会提示你安装一些Go的插件,这些插件有助于源码阅读编辑,建议安装,但是其中有几个会安装失败,此时需要架梯子进行,如果依然失败,在架梯子的前提下,将VScode里的安装命令复制到终端执行,即可成功安装,失败可多次尝试。
- 安装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回滚回去。
-
go/src/gx/ipfs⽬目录下,将Qmxxx目录中的内容移动出来
cd go/src/gx/ipfs cp -r */* . mkdir -p ../bak mv Qm../bak
-
使用通配符,用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,此次替换设计几千次正则查找,速度非常慢,请耐心等待。
-
修改go/src/github.com/ipfs/go-ipfs⽬目录下的Rules.mk,注释掉下⾯面三⾏
#include mk/gx.mk ... #deps: gx-deps #.PHONY: deps
- 在go/src/github.com/ipfs/go-ipfs目录下make install编译通过
- 此时新建一个工作区,讲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可以查看一些内容,如下图所示
可以开一个终端执行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的安装配置到此结束,后续会更新更多内容。
有疑问加站长微信联系(非本文作者)