IPFS安装及基础操作

《IPFS安装及基础操作》IPFS(星际文件系统 InterPlanetary File System,缩写IPFS 是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs在开源社区的帮助下发展。

IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接同一个文件系统。在某些方面,IPFS类似于万维网,但它也可以被视作一个独立的BitTorrent群、在同一个Git仓库中交换对象。换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约带宽,和防止HTTP方案可能遇到的DDoS攻击。

该文件系统可以通过多种方式访问,包括FUSEHTTP。将本地文件添加到IPFS文件系统可使其面向全世界可用。文件表示基于其哈希,因此有利于缓存。文件的分发采用一个基于BitTorrent的协议。其他查看内容的用户也有助于将内容提供给网络上的其他人。IPFS有一个称为IPNS的名称服务,它是一个基于PKI的全局命名空间,用于构筑信任链,这与其他NS兼容,并可以映射DNS、.onion、.bit等到IPNS。

首先需要到IPFS官网下载相关包(https://dist.ipfs.io/go-ipfs/),IPFS目前最新版本为0.4.13,所以在linux环境下使用wget命令下载安装包,下载完成后使用tar解压压缩包并执行安装脚本安装IPFS(IPFS官网被伟大的GFW拦在墙外无法访问,所以此处wget下载的地址是我自己的VPS):

wget http://download.superc.xyz/go-ipfs_v0.4.13_linux-amd64.tar.gz
tar zxvf go-ipfs_v0.4.13_linux-amd64.tar.gz           #解压完生成go-ipfs目录
cd go-ipfs
bash install.sh                                       #执行IPFS安装脚本,其实就是将ipfs二进制文件放入到/usr/local/bin目录
[root@server ~]# ipfs version                         #查看IPFS版本看是否完成安装
ipfs version 0.4.13

IPFS默认目录在/root/.ipfs下,如果依旧想将目录存放在默认目录下则不需要如下步骤:

使用命令export IPFS_PATH=/ipfs修改IPFS默认目录,此时我们将目录放在/ipfs下(可以根据自己需求修改),设置完成后编辑profile文件使设置永久生效,使用命令echo export IPFS_PATH=/ipfs >> /etc/profile即可,至此修改IPFS默认目录完成。

此时IPFS安装完成,为了IPFS更加方便启动和停止接下来将IPFS加入到systemctl里即可使用systemctl启动和停止IPFS。首先需要使用命令vim /lib/systemd/system/ipfs.service创建文件,创建完成后在文件内添加如下配置:

[Unit]
Description=ipfs daemon

[Service]
Restart=always
Environment=export IPFS_PATH=/ipfs
#上一行作用是指定IPFS目录,如果上文红字部分未操作删除上杭即可
ExecStart=/usr/local/bin/ipfs daemon
ExecReload=pgrep ipfs | xargs kill -9 && /usr/local/bin/ipfs daemon
ExecStop=pgrep ipfs | xargs kill -9
PrivateTmp=true

[Install]
WantedBy=multi-user.target

配置添加完成并保存退出后使用命令systemctl daemon-reload重新加载,重新加载完成后使用命令systemctl enable ipfs设置IPFS开机自启,至此将IPFS添加到systemctl完成。

接下来是初始化IPFS,使用命令ipfs init完成IPFS初始化设置,设置过程中会有如下信息显示:

[root@test ~]# ipfs init
initializing IPFS node at /ipfs
generating 2048-bit RSA keypair...done
peer identity: QmUu7pHAm6QVnSU8uTTwgyGqiQRMFQE5ZPt2EpsxBpWkBf
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme


[root@test ~]# ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║ 
╚═╝╚═╝     ╚═╝     ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

-------------------------------------------------------
| Warning: |
| This is alpha software. Use at your own discretion! |
| Much is missing or lacking polish. There are bugs. |
| Not yet secure. Read the security notes for more. |
 -------------------------------------------------------

Check out some of the other files in this directory:

 ./about
 ./help
 ./quick-start <-- usage examples
 ./readme <-- this file
 ./security-notes

如有上述所示说明初始化完成,未更改IPFS默认文件夹会在/root/.ipfs目录下发现新生成文件和文件夹,如修改默认文件夹会在/ipfs文件夹下发现新生成文件和文件夹,文件和文件夹具体结构如下所示,如果blocks和datastore文件夹显示略有不同属于正常:

[root@test ~]# tree /ipfs/
/ipfs/
├── blocks
│   ├── 2H
│   │   └── CIQN5PVU4ECEKNEVXWRYKCPTVMIPHP5AWWKOCGCPXVNMF7ZWU6UG2HI.data
│   ├── 7J
│   │   └── CIQKKLBWAIBQZOIS5X7E32LQAL6236OUKZTMHPQSFIXPWXNZHQOV7JQ.data
│   ├── 7R
│   │   └── CIQIVZGLOUFY5L4TEYD5WLSCRDDEAW2TNVZSH3OBM5UKNOREHYSY7RA.data
│   ├── B5
│   │   └── CIQDOZU3EAGXWK3PLVFOFOZOAE5USX3XM6I5CSHSQGTML2BAGN7MB5I.data
│   ├── IL
│   │   └── CIQJFGRQHQ45VCQLM7AJNF2GF5UHUAGGHC6LLAH6VYDEKLQMD4QLILY.data
│   ├── JN
│   │   └── CIQPHMHGQLLZXC32FQQW2YVM4KGFORVFJAQYY55VK3WJGLZ2MS4RJNQ.data
│   ├── L5
│   │   └── CIQBIQXZ4NWWDXUSIYSCX7RE6EBXHMGENZNMUDEMGNKMGT2K6LLUL5Y.data
│   ├── LG
│   │   └── CIQJBQD2O6K4CGJVCCTJNUP57QHR4SKHZ74OIITBBGLOMCO3ZOLWLGA.data
│   ├── N2
│   │   └── CIQDWKPBHXLJ3XVELRJZA2SYY7OGCSX6FRSIZS2VQQPVKOA2Z4VXN2I.data
│   ├── OO
│   │   └── CIQBT4N7PS5IZ5IG2ZOUGKFK27IE33WKGJNDW2TY3LSBNQ34R6OVOOQ.data
│   ├── PM
│   │   └── CIQKNNRB2NFYXUZDJ2UWNMSKYLGTKUYDRQTJCDI7JTUDFH6YOYNUPMA.data
│   ├── QV
│   │   └── CIQOHMGEIKMPYHAUTL57JSEZN64SIJ5OIHSGJG4TJSSJLGI3PBJLQVI.data
│   ├── R3
│   │   └── CIQBED3K6YA5I3QQWLJOCHWXDRK5EXZQILBCKAPEDUJENZ5B5HJ5R3A.data
│   ├── _README
│   ├── SH
│   │   └── CIQL3XIOKVDAW5KQF6NNWGFFYAHEQP63TJOVZHAEO7XZBD7KQOCSSHY.data
│   ├── SHARDING
│   └── X3
│   └── CIQFTFEEHEDF6KLBT32BFAGLXEZL4UWFNWM4LFTLMXQBCERZ6CMLX3Y.data
├── config
├── datastore
│   ├── 000002.ldb
│   ├── 000005.ldb
│   ├── 000006.log
│   ├── CURRENT
│   ├── LOCK
│   ├── LOG
│   └── MANIFEST-000007
├── datastore_spec
├── keystore
└── version

18 directories, 27 files

此时可以将文件上传到本机IPFS节点,使用命令ipfs add files即可,完成后会出现一串字符串,如果需要下载该文件使用命令ipfs cat xxxxxxx > files(xxxxxxx代指上传时得到的哈希值,files代指想保存的文件名),具体细节如下所示:

[root@test ~]# ipfs add logo-3.3.5.jpg 
added Qmcqokb5ZWeSL627z1i6LhUCCsLWFLYAFcE44xDR9zCNuA logo-3.3.5.jpg
[root@test ~]# ipfs cat Qmcqokb5ZWeSL627z1i6LhUCCsLWFLYAFcE44xDR9zCNuA > aaa.jpg

此时完成IPFS的文件上传和下载功能,并在该目录下出现名为aaa.jpg的新文件,改文件与logo-3.3.5.jpg 文件一致。

IPFS安装完成目前只能在本机上传和下载,并不能从网络上其他节点获取数据,此时需要启动IPFS,IPFS默认启动命令为ipfs ademon,启动一切正常会出现如下信息:

[root@test ~]# ipfs daemon
Initializing daemon...
Adjusting current ulimit to 2048...
Successfully raised file descriptor limit to 2048.
Swarm listening on /ip4/10.0.0.200/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmUu7pHAm6QVnSU8uTTwgyGqiQRMFQE5ZPt2EpsxBpWkBf
Swarm announcing /ip4/10.0.0.200/tcp/4001
Swarm announcing /ip4/100.100.3.56/tcp/19038
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

IPFS已经启动,现在可以从网络其他节点获取数据。由于上文中将ipfs添加到systemctl中,所以可以不用ipfs ademon启动IPFS,具体启动方式如下所示;

[root@test ~]# systemctl start ipfs                     #启动IPFS
[root@test ~]# systemctl status ipfs                    #查看IPFS状态
● ipfs.service - ipfs daemon
   Loaded: loaded (/usr/lib/systemd/system/ipfs.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-03-04 19:35:01 CST; 9s ago
 Main PID: 20356 (ipfs)
   CGroup: /system.slice/ipfs.service
   └─20356 /usr/local/bin/ipfs daemon

Mar 04 19:35:07 test ipfs[20356]: Swarm listening on /ip4/127.0.0.1/tcp/4001
Mar 04 19:35:07 test ipfs[20356]: Swarm listening on /ip6/::1/tcp/4001
Mar 04 19:35:07 test ipfs[20356]: Swarm listening on /p2p-circuit/ipfs/QmUu7pHAm6QVnSU8uTTwgyGqiQRMFQE5ZPt2EpsxBpWkBf
Mar 04 19:35:07 test ipfs[20356]: Swarm announcing /ip4/10.0.0.200/tcp/4001
Mar 04 19:35:07 test ipfs[20356]: Swarm announcing /ip4/100.100.3.56/tcp/17001
Mar 04 19:35:07 test ipfs[20356]: Swarm announcing /ip4/127.0.0.1/tcp/4001
Mar 04 19:35:07 test ipfs[20356]: Swarm announcing /ip6/::1/tcp/4001
Mar 04 19:35:07 test ipfs[20356]: API server listening on /ip4/127.0.0.1/tcp/5001
Mar 04 19:35:07 test ipfs[20356]: Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Mar 04 19:35:07 test ipfs[20356]: Daemon is ready
[root@test ~]# systemctl stop ipfs                      #停止IPFS
[root@test ~]# systemctl restart ipfs                   #重启IPFS

如果显示如上图所示说明systemctl启动IPFS一切正常,同时使用命令ipfs swarm peers连接到IPFS集群并成为其中一个几点,执行完会出现很多节点信息:

[root@server ~]# ipfs swarm peers
/ip4/1.80.251.204/tcp/13625/ipfs/QmPQ71bHTjZZAKgb51hcRCCFDk2hRz7s7qVqnVMunMwyz4
/ip4/100.6.72.99/tcp/4001/ipfs/QmYPmS2ytnfgofMY8VdrbULwdVqKmhJAutkgmD41rW3R84
/ip4/101.108.16.24/tcp/53210/ipfs/QmVm6jdDfMg1AXnatmdPnvhKWzv5iBEqKgdhK3PXHTfoUW
/ip4/101.80.67.9/tcp/41830/ipfs/QmWaBZMCKnQnrqiG1K9gxkARgu97M3HZb4UDgBivUC7Zqb
/ip4/101.80.67.9/tcp/56841/ipfs/QmXibDf1TMr5obHigdALwy7iq3bTr2JY2RskW6C3aFcZHu
/ip4/101.81.236.126/tcp/58663/ipfs/QmSvU6xVqqbSeZxdqVfJoK4xs56muLhFCvt4QLHPfnwSYq
/ip4/103.220.36.174/tcp/61228/ipfs/QmNypyvofr457QS28dqYCGrJm5ZcTy2bRFK6BwkkDgJuni
/ip4/103.234.143.151/tcp/4001/ipfs/QmPa5t3WTtrvZnqCebymNWKW2Mz3kzoyHY6nQifxq25839
/ip4/103.26.1.204/tcp/4001/ipfs/QmVESX6WBUaNBBVDYSRapNe42ghvRaeQdYuwJqMP3nms3D
/ip4/104.131.10.96/tcp/4001/ipfs/QmQQVXUUTrNxWv2bbCvV7R34H3qwKuj6Hyv8U8TDzq3ZZb
/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.153.108.98/tcp/4001/ipfs/QmWPkUoiPBPDCCvmCsUZDLzw9nLyCUUp51YV6x4MjU7hNP
/ip4/104.155.40.139/tcp/4001/ipfs/QmXHdKgabDcdciZvbyTT7t7h4fbTmdHM3F3Z7he7jhHbb1
/ip4/104.155.77.104/tcp/4001/ipfs/QmaLcVjoAi9QnHytpe3ehoWNBNqARRmJR4P18Qfyadpyki
/ip4/104.196.237.149/tcp/4001/ipfs/QmS9Ct4JvNkL6TB6uWE2DegHEN8j1M6qmHPyRN7b9sLJJ2
/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z
/ip4/104.236.176.59/tcp/4001/ipfs/QmQ8MYL1ANybPTM5uamhzTnPwDwCFgfrdpYo9cwiEmVsge
/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM
/ip4/104.236.32.22/tcp/4001/ipfs/QmepsDPxWtLDuKvEoafkpJxGij4kMax11uTH7WnKqD25Dq
/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
/ip4/104.239.197.205/tcp/4001/ipfs/Qme6KHAWNU9sJsa76TrYM5MQrCBw5mXQZfgwXMZy7dkFtf
/ip4/104.36.16.108/tcp/4001/ipfs/QmNfJK2UWRAbsqL2ozgz2ZNkLrd3Uo7VREhW6W4X6U6YiQ
/ip4/104.45.137.43/tcp/4001/ipfs/QmarXBVQBH35nVj4RwNQQdU29RD5oQ4yJsvmY4v53vYgTE
/ip4/106.14.174.4/tcp/4001/ipfs/QmVZZ4z1N7VEXKVMqetmr5qZ8Nfyw1Z63vUxFqm3A5FbEY
/ip4/106.14.187.240/tcp/4001/ipfs/QmdG7nqJedam7wmaFNPNQi9bVKRiJ6byHcbFDWijw3dSe7
/ip4/106.8.208.54/tcp/54637/ipfs/QmQDooZrF8HdkHnek8kzvhruytHp4LdXdF2Ysz139A83No
/ip4/107.15.37.145/tcp/23557/ipfs/QmS8T4xyDu3AV1YjoG8KSbY9SGciLM6ERnWHDmJbjfbiht
........................................

就这样我们可以从网络其他节点下载文件:

[root@test ~]# ipfs cat /ipfs/QmNXr6N7oCnpuwF9Dzx3z5yprwqRXXVoKCA3nnr7AH2hGQ
-----------------------
Hello IPFS, hello world

https://www.superc.xyz
-----------------------

至此IPFS搭建完成并说明了一点最基础操作,未来几天还会继续更新IPFS其他文章。

点赞

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注