IPFS(星际文件系统 InterPlanetary File System,缩写IPFS) 是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs在开源社区的帮助下发展。
IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接同一个文件系统。在某些方面,IPFS类似于万维网,但它也可以被视作一个独立的BitTorrent群、在同一个Git仓库中交换对象。换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约带宽,和防止HTTP方案可能遇到的DDoS攻击。
该文件系统可以通过多种方式访问,包括FUSE与HTTP。将本地文件添加到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其他文章。
文章评论