跳转至内容

星际文件系统

来自 ArchWiki

星际文件系统 (IPFS) 是一个分布式的超媒体协议,通过内容和身份进行寻址。IPFS 使完全分布式的应用程序、数据存储以及网站的创建成为可能,并旨在使网络更快、更安全、更开放。

它致力于连接所有进行文件传输点对点交换的计算机。在某些方面,这与 Web 的最初目标相似,但它不使用客户端/服务器角色模型和基于位置的寻址,而是网络中的所有计算机以分布式方式共享有关文件存储位置的信息。这样,用户就不需要知道哪个服务器包含哪个文件,而只需要知道内容的 ID 即可接收它。网络会定位相应的节点,并以防篡改的方式请求数据。文件以类似于 Git 工作方式的对象形式存储,元数据存储和文件传输与 BitTorrent 类似。

添加到 IPFS 节点的文件会被分块和哈希。单个块被添加到 MerkleDAG(一个树形对象)中,该对象与块一起存储。树形对象哈希是防篡改的内容 ID (CID)。然后,节点将其节点 ID 发布到网络分布式哈希表中的所有哈希。这样,内容就可以通过 CID 定位到可以根据请求提供数据的特定节点。

安装

安装 kubo 包。

要开始使用 IPFS,您必须首先发出

$ ipfs init

作为用户。这会在 ~/.ipfs 目录中创建所有必需的文件。

现在您可以启动 IPFS 守护进程

$ ipfs daemon

这将启动您的节点,可以通过 ipfs 命令行界面或 https://:5001/webui 上的 Web 界面访问。此外,本地网关将在 localhost:8080 上启动(默认端口可在 ~/.ipfs/config 中更改)。

使用服务启动守护进程

为了方便起见,您可以使用 kubo 包中包含的 Systemd/User 服务来自动启动 IPFS 守护进程。这可以确保在您登录时启动守护进程,并在守护进程崩溃时重新启动它。

您可以将 ipfs.service 启动/启用用户单元

如果您希望服务始终运行,而不管用户会话状态如何,请通过 启动/启用 ipfs@username.service 来启用系统范围的服务。

使用不同的命令行启动服务

您可能还想通过使用 trickleAUR (参见 ipfs/go-ipfs#3429) 来限制 IPFS 使用的带宽。您可以 编辑Systemd/User 服务文件到 $HOME/.config/systemd/user/go-ipfs.service

[Unit]
Description=InterPlanetary File System (IPFS) daemon (rate-limited via Trickle)
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/trickle -s -u 56 /usr/bin/ipfs daemon --routing=dhtclient
Restart=on-failure

[Install]
WantedBy=default.target

这将使用 trickle 启动 IPFS 并传递参数 --routing=dhtclient。当然,您可以根据需要修改它,或基于软件包的 /usr/lib/systemd/user/ipfs.service 来创建您的版本。将 go-ipfs.service 启动/启用用户单元

防火墙

IPFS 需要端口 4001 TCP 和 UDP。它尝试使用 UPnP/IGD 在路由器上配置端口转发。不支持 UPnP/IGD 的路由器需要手动端口转发。

文件共享

要使用 IPFS 共享文件,需要运行守护进程。

$ ipfs add file

返回一个哈希。如果有人之前通过 IPFS 共享过此文件,则哈希将与之前的上传匹配,使您成为该文件的第二个来源。

要通过 IPFS 哈希检索文件,请使用 ipfs cat

$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

您可以将此内容通过管道传递给任何其他应用程序,例如,使用 mpv 观看视频

$ ipfs cat QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi | mpv -

或者您可以下载文件

$ ipfs get QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi

还有一个 ipgetAUR 工具,它就像 IPFS 的 wget。此外,它包含一个引导节点,因此您无需运行 ipfs 守护进程或安装它即可使用它。下载文件

$ ipget QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi

您可以共享文件和文件夹。文件夹应递归共享

$ ipfs add -r folder

要查看文件夹中的所有文件和缓存(如果哈希是一个文件夹)

$ ipfs ls QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

通过网络共享的每个文件都可以通过 IPFS 网关在 localhost:8080 上访问,如下所示

https://:8080/ipfs/QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi

有公共网关,允许没有运行 IPFS 节点的用户访问网络上的文件。例如,官方 网站

https://ipfs.io/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

带名称解析的简单托管

在 IPFS 中,共享的文件永不删除,并且对文件的任何更改都会改变其哈希。这使得像网站托管这样的任务变得困难,因为对网页的任何更改,例如对 index.html 的更改,都会导致其具有不同的哈希,而旧网页仍然可以通过旧哈希访问。存储所有内容及其完整历史记录是该网络的目标之一。IPFS 提供了一个名称服务,您可以使用它来生成持久缓存 - IPNS。IPNS 允许您将任何哈希绑定到节点在初始化时生成的唯一 ID。您可以通过以下方式查看您的 ID

$ ipfs id

并将任何哈希绑定到它

$ ipfs name publish HASH

这会将文件更改后 ipfs add 生成的新哈希分配给您的节点 ID,从而使文件夹/文件的更新版本可以通过同一地址访问。

请注意,在使用 IPNS 时,地址会有一个 ipns 前缀而不是 ipfs

https://:8080/ipns/QmPtMQErTfQMbZTMMpQh65cpk5y7D94WdYJurCeRqvXKmD/

作为 makepkg DLAGENT 使用

包含指向 IPFS 资源的 URI 的 PKGBUILDs 需要安装并配置 ipfs-dlagentAUR 下载代理才能正确构建。

参见