Kubo: 使用GO实现的IPFS
IPFS的首个实现。
Kubo是什么?
Kubo是IPFS的首个实现,也是目前最广泛使用的实现。它实现了星际文件系统——一个与HTTP兼容的Web3内容寻址标准。因此,它由IPLD的数据模型和libp2p网络通信驱动。Kubo使用Go语言编写。
功能集
- 作为网络服务运行IPFS节点,成为局域网和广域网DHT的一部分
- 提供HTTP网关(
/ipfs
和/ipns
)功能,用于可信和无需信任的内容检索 - 实现HTTP路由V1(
/routing/v1
)客户端和服务器,用于委托路由查找 - 提供HTTP Kubo RPC API(
/api/v0
)以访问和控制守护进程 - 基于(
/api/v0
)RPC API的命令行界面 - WebUI用于管理Kubo节点
- 为公共节点运营者提供内容屏蔽支持
其他实现
参见列表
IPFS是什么?
IPFS是一个全球性的、版本化的、点对点的文件系统。它结合了之前系统的优秀理念,如Git、BitTorrent、Kademlia、SFS和Web。它就像一个单一的BitTorrent群,交换git对象。IPFS提供了一个像HTTP网络一样简单的接口,但内置了永久性。你还可以在/ipfs挂载整个世界。
更多信息请参见:https://docs.ipfs.tech/concepts/what-is-ipfs/
在提出问题之前,请考虑使用以下位置之一,以确保您在正确的地方开启讨论:
- kubo(之前称为go-ipfs)_实现_的bug请在此仓库中提出。
- 文档问题请在ipfs/docs issues中提出。
- IPFS _设计_相关问题请在ipfs/specs issues中提出。
- 新想法的探索请在ipfs/notes issues中进行。
- 提问并在IPFS论坛上与社区其他成员交流。
- 或者与我们聊天。
下一个里程碑
目录
安全问题
请遵循SECURITY.md
。
最低系统要求
IPFS可以在大多数Linux、macOS和Windows系统上运行。我们建议在至少有4 GB RAM和2个CPU核心的机器上运行(kubo具有高度并行性)。在内存较少的系统上,它可能不完全稳定,您需要自行承担风险。
安装
IPFS的标准下载说明位于:https://docs.ipfs.tech/install/。如果您不打算进行IPFS开发工作,**强烈建议**您遵循这些说明。
Docker
官方镜像发布在https://hub.docker.com/r/ipfs/kubo/:
- 🟢 发布版
- 🟠 我们还提供实验性的开发者构建
master-latest
始终指向master
分支的HEAD
master-YYYY-DD-MM-GITSHA
指向master
分支的特定提交- 这些标签由开发者用于内部测试,不适合最终用户或生产使用。
$ docker pull ipfs/kubo:latest
$ docker run --rm -it --net=host ipfs/kubo:latest
要自定义您的节点,
通过-e
传递必要的配置或通过挂载脚本到/container-init.d
。
了解更多信息,请访问https://docs.ipfs.tech/install/run-ipfs-inside-docker/
官方预编译二进制文件
官方二进制文件发布在https://dist.ipfs.tech#kubo:
从那里:
- 点击页面右侧的蓝色"下载Kubo"按钮。
- 打开/解压缩归档文件。
- 将kubo(
ipfs
)移动到您的路径中(install.sh
可以为您完成此操作)。
如果您无法访问dist.ipfs.tech,您也可以从以下位置下载kubo(go-ipfs):
更新
使用ipfs-update
IPFS有一个可以通过ipfs update
访问的更新工具。该工具不与IPFS一起安装,以保持该逻辑独立于主代码库。要安装ipfs-update
工具,在此处下载。
使用IPFS下载构建
列出可用的Kubo(go-ipfs)实现版本:
$ ipfs cat /ipns/dist.ipfs.tech/kubo/versions
然后,要查看上一个命令中某个版本($VERSION
)的可用构建:
$ ipfs ls /ipns/dist.ipfs.tech/kubo/$VERSION
要下载特定版本的构建:
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_darwin-386.tar.gz # darwin 32位构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_darwin-amd64.tar.gz # darwin 64位构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_freebsd-amd64.tar.gz # freebsd 64位构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_linux-386.tar.gz # linux 32位构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_linux-amd64.tar.gz # linux 64位构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_linux-arm.tar.gz # linux arm构建
$ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_windows-amd64.zip # windows 64位构建
非官方Linux包
Arch Linux
# pacman -S kubo
Gentoo Linux
https://wiki.gentoo.org/wiki/Kubo
# emerge -a net-p2p/kubo
https://packages.gentoo.org/packages/net-p2p/kubo
Nix
使用纯函数式包管理器Nix,你可以这样安装kubo (go-ipfs):
$ nix-env -i kubo
你也可以通过它的属性名来安装包,属性名同样是kubo
。
Solus
$ sudo eopkg install kubo
你也可以通过Solus软件中心安装它。
openSUSE
Guix
go-ipfs的社区包已过时。
Snap
不再支持,原因见kubo#8688。
Ubuntu PPA
Launchpad上的PPA主页。
最新Ubuntu (>= 20.04 LTS)
sudo add-apt-repository ppa:twdragon/ipfs
sudo apt update
sudo apt install ipfs-kubo
任何Ubuntu版本
sudo su
echo 'deb https://ppa.launchpadcontent.net/twdragon/ipfs/ubuntu <<DISTRO>> main' >> /etc/apt/sources.list.d/ipfs
echo 'deb-src https://ppa.launchpadcontent.net/twdragon/ipfs/ubuntu <<DISTRO>> main' >> /etc/apt/sources.list.d/ipfs
exit
sudo apt update
sudo apt install ipfs-kubo
其中<<DISTRO>>
是你的Ubuntu发行版代号(例如,22.04 LTS的代号是jammy
)。在首次安装时,包维护脚本可能会自动询问你想使用的网络配置文件、CPU计数模型和/或现有节点配置文件。
注意:此方法也可能适用于任何兼容的基于Debian的发行版,只要它们内部有libc6
,并使用APT作为包管理器。
非官方Windows包
Chocolatey
不再支持,原因见kubo#9341。
Scoop
Scoop在其'extras'仓库中提供了名为kubo
的包。
PS> scoop bucket add extras
PS> scoop install kubo
非官方macOS包
MacPorts
包ipfs目前指向kubo (go-ipfs)并正在维护。
$ sudo port install ipfs
Nix
在macOS中你可以使用纯函数式包管理器Nix:
$ nix-env -i kubo
你也可以通过它的属性名来安装包,属性名同样是kubo
。
Homebrew
也维护着一个Homebrew配方ipfs。
$ brew install --formula ipfs
从源码构建
kubo的构建系统需要Go和一些标准POSIX构建工具:
- GNU make
- Git
- GCC (或其他与go兼容的C编译器) (可选)
要在没有GCC的情况下构建,请使用CGO_ENABLED=0
构建(例如,make build CGO_ENABLED=0
)。
安装Go
如果需要更新:下载最新版本的Go。
你需要将Go的bin目录添加到$PATH
环境变量中,例如,通过在/etc/profile
(用于系统范围安装)或$HOME/.profile
中添加以下行:
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH/bin
(如果遇到问题,请参阅Go安装说明)。
下载并编译IPFS
$ git clone https://github.com/ipfs/kubo.git
$ cd kubo
$ make install
或者,你可以运行make build
来构建go-ipfs二进制文件(存储在cmd/ipfs/ipfs
中)而不安装它。
注意: 如果你遇到类似"fatal error: stdlib.h: No such file or directory"的错误,说明你缺少C编译器。要么使用CGO_ENABLED=0
重新运行make
,要么安装GCC。
交叉编译
为不同平台编译就像运行以下命令一样简单:
make build GOOS=myTargetOS GOARCH=myTargetArchitecture
故障排除
- 单独的Windows构建说明可用。
- 需要
git
才能让go get
获取所有依赖项。 - 包管理器中的
golang
包通常是过时的。 确保go version
报告的版本至少是1.10。有关如何安装go,请参见上文。 - 如果你对开发感兴趣,请同时安装开发依赖项。
- Shell命令补全可以通过
ipfs commands completion
子命令之一生成。阅读docs/command-completion.md了解更多信息。 - 查看misc文件夹了解如何将IPFS连接到systemd或你的发行版使用的任何init系统。
入门
使用
要开始使用IPFS,你必须首先在系统上初始化IPFS的配置文件,这是通过ipfs init
完成的。有关它接受的可选参数信息,请参阅ipfs init --help
。初始化完成后,你可以使用ipfs mount
、ipfs add
和任何其他命令来探索!
一些尝试
本地验证'ipfs工作'的基本证明:
echo "hello world" > hello
ipfs add hello
# 这应该输出一个看起来像这样的哈希字符串:
# QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
ipfs cat <那个哈希>
HTTP/RPC客户端
有关与Kubo进行编程交互,请参阅我们的HTTP/RPC客户端列表。
故障排除
如果你之前安装过IPFS并且在尝试使用较新版本时遇到问题,请尝试删除(或备份到其他地方)你的IPFS配置目录(默认为~/.ipfs)并重新运行ipfs init
。这将重新初始化配置文件为默认值,并清除本地数据存储中的任何错误条目。
请将一般问题和帮助请求发送到我们的论坛。
如果你认为发现了bug,请检查问题列表,如果你没有在那里看到你的问题,要么来Matrix聊天与我们交谈,要么提交你自己的问题!
包
请参阅GO中的IPFS文档。
开发
一些帮助你开始了解代码库的地方:
- 主文件:./cmd/ipfs/main.go
- CLI 命令:./core/commands/
- Bitswap(数据交易引擎):go-bitswap
- libp2p
- IPFS:
Add
命令解密
已实现子系统图
进行中:这是该特定实现的各个子系统的高级架构图。将更新它们之间的交互方式。欢迎任何有建议的人在这里评论如何改进!
CLI、HTTP-API、架构图
描述:虚线表示"可能会去掉"。"Legacy"部分是一些命令的薄包装,用于在新系统和旧系统之间进行转换。"daemon"图中灰色部分表示代码是完全相同的,只是根据我们是在客户端还是服务器上运行而开启或关闭某些部分。
测试
make test
开发依赖
如果您对协议缓冲区进行更改,需要安装protoc 编译器。
开发者注意事项
在docs中查找更多开发者文档。
维护者信息
贡献
我们❤️所有贡献者;没有你们,这个项目就不会是现在的样子!如果您想帮忙,请查看 CONTRIBUTING.md。
本仓库遵循 IPFS 行为准则。
IPFS 社区成员在讨论论坛分类中提供 Kubo 支持。
需要 IPFS 本身的帮助?了解在哪里获取帮助和支持,请访问 https://ipfs.tech/help。
许可证
本项目采用 Apache 2.0 和 MIT 双重许可:
- Apache License, Version 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)