Awesome
go-ipfs
「 ipfs 的 go 语言实现 」
更新 ✅
<!-- doc-templite START generated --> <!-- time = '2018 11.21' --> <!-- repo = 'ipfs/go-ipfs' --> <!-- commit = 'b7a48531b7b64fcaa858e2c28e42fb4eeb6fcc0d' -->翻译的原文 | 与日期 | 最新更新 | 更多 |
---|---|---|---|
commit | ⏰ 2018 11.21 | 中文翻译 |
- README.md
- assets/README.md
- cmd/ipfs/dist/README.md
- cmd/ipfswatch/README.md
- docs/README.md
- docs/command-completion.md
- docs/config.md
- docs/datastores.md
- docs/debug-guide.md
- docs/experimental-features.md
- docs/file-transfer.md
- docs/fuse.md
- docs/gateway.md
- docs/github-issue-guide.md
- docs/implement-api-bindings.md
- docs/openbsd.md
- docs/plugins.md
- docs/releases.md
- docs/transports.md
- docs/windows.md
- misc/launchd/README.md
- test/3nodetest/README.md
- test/3nodetest/bootstrap/README.md
- test/3nodetest/server/README.md
- test/README.md
- test/dependencies/go-sleep/README.md
- test/sharness/README.md
- thirdparty/README.md
贡献
欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看
生活
If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰
go-ipfs
项目状态
什么是 IPFS?
ipfs 是一个世界性的,版本化的对等文件系统. 它结合了 Git,BitTorrent,Kademlia,SFS 和 Web 的好点子. 它就像一个 bittorrent swarm,交换 git 对象. IPFS 提供了一个像 HTTP Web 一样简单的接口,但内置了永久性. 您还可以将世界挂载到 /ipfs
.
-
有关详情,请参阅: ipfs/ipfs 协议库
-
请将有关 IPFS 设计的所有问题放到ipfs repo 问题
-
请将有关 GO IPFS 实现的所有问题在这个 repo.
目录
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->安全问题
ipfs 协议及其实现仍处于重大发展阶段. 这意味着我们的协议可能存在问题,或者我们的实现可能存在错误. 而且 - 虽然 ipfs 还没有生产就绪 - 许多人已经在他们的机器上运行节点. 因此,我们非常重视安全漏洞. 如果您发现安全问题,请立即引起我们的注意!
如果您发现可能影响实时部署的漏洞 (例如,暴露远程执行漏洞) ,请将您的报告私下发送至 security@ipfs.io
. 请不要提交公共问题. security@ipfs.io 的 GPG 密钥 是4B9665FB 92636D17 7C7A86D3 50AAE8A9 59B13AF3.
如果问题是无法立即利用的协议弱点 或 尚未部署的问题,请公开讨论.
安装
ipfs 的下载说明在: http://ipfs.io/docs/install/. 它是 强烈建议的说明,如果您对 ipfs 开发不感兴趣,请遵循这些说明.
系统要求
ipfs 可以在大多数 Linux,macOS 和 Windows 系统上运行. 我们建议在具有至少 2 GB RAM 的机器上运行它 (只有一个 CPU 内核可以正常运行) ,但只需 1 GB 的内存即可正常运行. 在内存较少的系统上,它可能不完全稳定.
安装整理好的构建包
我们在我们的网站上托管预建的二进制文件发行页面.
从那里:
- 单击页面右侧的蓝色"Download go-ipfs".
- 打开/提取 存档.
- 移动
ipfs
到你的Path
上 (运行install.sh
能为你做到这一点) .
你也可以从项目的 Github releases 页面下载 go-ipfs ,如果你 被伟大的 GTW 阻止你访问 ipfs.io。
来自 Linux 包管理器
Arch Linux
在 Arch Linux 安装 go-ipfs包.
$ sudo pacman -S go-ipfs
go-ipfs 的开发版本也在 AUR 下go-ipfs-git. 您可以使用自己喜欢的 AUR Helper 安装它,也可以从 AU R 手动安装.
nix
对于 Linux 和 MacOSX,您可以使用纯功能包管理器nix:
$ nix-env -i ipfs
您也可以使用它的属性名称来安装ipfs
.
snap
随着 snap,在任何一个支持的 Linux 发行版:
$ sudo snap install ipfs
从源代码构建
安装 Go
ipfs 的构建过程需要Go 1.10
或更高版本. 如果你没有它: 下载 Go 1.10+.
您需要将 Go 的 bin 目录 添加到您的$PATH
环境变量,例如,通过将下面这些代码行添加到您的/etc/profile
(用于系统范围的安装) 或$HOME/.profile
:
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH/bin
(如果遇到麻烦,请参阅go 安装说明) .
下载并编译 ipfs
$ go get -u -d github.com/ipfs/go-ipfs
$ cd $GOPATH/src/github.com/ipfs/go-ipfs
$ make install
如果你是在 FreeBSD 使用gmake install
而不是make install
.
建立在不太常见的系统上
如果您的操作系统没有得到官方支持,但您仍然想尝试构建 ipfs (在大多数情况下它应该可以正常工作) ,您可以执行以下操作而不是make install
:
$ make install_unsupported
注意: 如果,此过程可能会中断gx (用于依赖关系管理) 或其任何依赖关系go get
将始终为每个依赖项选择最新的代码,通常会导致 API 不匹配.
故障排除
- 分离说明可用于在 Windows 上构建.
- 也,OpenBSD 的说明.
git
是必需的,为了go get
可以获取所有依赖项.- 包管理器通常包含过时的
golang
包. 确保go version
至少 1.10. 请参阅上文,了解如何安装 go. - 如果您对开发感兴趣,请同时安装开发依赖项.
- 警告: 旧版本的 OSX FUSE (适用于 Mac OS X) 在安装时可能会导致内核崩溃! - 我们强烈建议您使用最新版本的 OSX FUSE. (看到https://github.com/ipfs/go-ipfs/issues/177)
- 有关设置 FUSE 的更多详细信息 (以便可以安装文件系统) ,请参阅 docs 文件夹.
- Shell 命令补充可用于
misc/completion/ipfs-completion.bash
. 读docs/command-completion.zh.md学习如何安装它. - 见init 示例有关如何将 ipfs 连接到 systemd 或 您运行的任何 init 系统.
更新 go-ipfs
使用 ipfs-update 进行更新
ipfs 有一个官方更新工具ipfs update
. 该工具没有与 ipfs 一起安装,以保持该逻辑独立于主代码库. 要安装ipfs update
,在这里下载.
下载 ipfs 的构建,通过 ipfs
列出 go-ipfs 的可用版本:
$ ipfs cat /ipns/dist.ipfs.io/go-ipfs/versions
然后,从上一个命令 ($ VERSION) 查看版本的可用构建:
$ ipfs ls /ipns/dist.ipfs.io/go-ipfs/$VERSION
要下载版本的给定版本:
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_darwin-386.tar.gz # darwin 32-bit build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_darwin-amd64.tar.gz # darwin 64-bit build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_freebsd-amd64.tar.gz # freebsd 64-bit build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_linux-386.tar.gz # linux 32-bit build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_linux-amd64.tar.gz # linux 64-bit build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_linux-arm.tar.gz # linux arm build
$ ipfs get /ipns/dist.ipfs.io/go-ipfs/$VERSION/go-ipfs_$VERSION_windows-amd64.zip # windows 64-bit build
命令行总览
ipfs - 全球(星际)p2p merkle-dag 文件系统.
ipfs [<flags>] <command> [<arg>] ...
子命令
基本 COMMANDS
init 初始化 ipfs 本地配置
add <path> 将文件添加到 ipfs
cat <ref> 显示 ipfs 对象数据
get <ref> 下载 ipfs 对象
ls <ref> 列出对象的链接
refs <ref> 列出来自对象的链接哈希值
数据结构 COMMANDS
block 与数据存储区中的原始块交互
object 与原始dag 节点交互
files 与对象交互,就像它们是 unix文件系统一样
高级 COMMANDS
daemon 启动一个长期运行的守护程序进程
mount 挂载ipfs只读挂载点
resolve 解决任何类型的名称
name 发布或解析IPNS名称
dns 解析DNS链接
pin 将对象固定到本地存储
repo 操作ipfs存储库
网络 COMMANDS
id 显示有关ipfs peers的信息
bootstrap 添加或删除引导程序对等项
swarm 管理与p2p网络的连接
dht 查询DHT的值或对等体
ping 测量连接的延迟
diag 打印诊断
工具 COMMANDS
config 管理配置
version 显示ipfs版本信息
update 下载并应用go-ipfs更新
commands 列出所有可用命令
Use 'ipfs <command> --help' to learn more about each command.
ipfs使用本地文件系统中的存储库。 默认情况下,可
在 ~/.ipfs 找到。 要更改位置,请设置 $ipfs_PATH 环境变量:
export ipfs_PATH=/path/to/ipfsrepo
入门
也可以看看: http://ipfs.io/docs/getting-started/
要开始使用 ipfs ,必须首先在系统上 初始化 ipfs 的配置文件,用ipfs init
. 看到ipfs init --help
有关可选参数的信息. 初始化完成后,即可使用ipfs mount
,ipfs add
以及任何其他你想试试的命令!
有些事情要确定一下
本地'ipfs 正在工作'的基本证明:
echo "hello world" > hello
ipfs add hello
# This should output a hash string that looks something like:
# QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
ipfs cat <that hash>
Docker 用法
ipfs 的 docker 镜像托管在hub.docker.com/r/ipfs/go-ipfs. 要使文件在容器内可见,您需要使用 docker 的选项-v
安装主机目录. 选择要用于 从 ipfs 导入/导出文件 的目录. 您还应该选择一个目录来存储 在重新启动容器时 将保留的 ipfs 文件.
export ipfs_staging=</absolute/path/to/somewhere/>
export ipfs_data=</absolute/path/to/somewhere_else/>
启动运行 ipfs 的容器并公开端口 4001,5001 和 8080:
docker run -d --name ipfs_host -v $ipfs_staging:/export -v $ipfs_data:/data/ipfs -p 4001:4001 -p 127.0.0.1:8080:8080 -p 127.0.0.1:5001:5001 ipfs/go-ipfs:latest
观看 ipfs 日志:
docker logs -f ipfs_host
等待 ipfs 启动. 当你看到 ipfs 正在运行:
Gateway (readonly) server
listening on /ip4/0.0.0.0/tcp/8080
你现在可以停止观看日志了.
运行 ipfs 命令:
docker exec ipfs_host ipfs <args...>
例如: 连接到同行
docker exec ipfs_host ipfs swarm peers
添加文件:
cp -r <something> $ipfs_staging
docker exec ipfs_host ipfs add -r /export/<something>
停止正在运行的容器:
docker stop ipfs_host
故障排除
如果之前已经安装过 ipfs,并且遇到了使新版本工作的问题,请尝试删除 (或在其他地方备份) ipfs 配置目录 (默认为〜/.ipfs
) 并重新运行ipfs init
. 这会将配置文件重新初始化为其默认值,并清除任何错误的本地数据存储区.
请将一般问题和帮助请求发送给我们论坛或我们的 IRC 频道 (freenode #ipfs) .
如果您认为自己发现了错误,请查看问题清单,如果您没有在那里看到您的问题,请在 IRC (freenode #ipfs) 上与我们联系 或 提交您自己的问题!
Package 们
由
package-table
生成此表格 ,运行package-table --data=package-list.json
.
IPFS 生态使用的主包的列表。 这里还有三个值得链接的规范:
名 | CI/Travis | CI/Jenkins | Coverage | 曰 |
---|---|---|---|---|
Files(文件) | ||||
go-unixfs | N/A | 核心'文件系统(filesystem)'逻辑 | ||
go-mfs | unixfs 的可变文件系统编辑器 | |||
go-ipfs-posinfo | N/A | filestore 的辅助数据类型 | ||
go-ipfs-chunker | N/A | 文件分块器 | ||
Exchange(信息交换) | ||||
go-ipfs-exchange-interface | N/A | 交换服务接口 | ||
go-ipfs-exchange-offline | N/A | (虚拟)交换服务的离线实现 | ||
go-bitswap | bitswap 协议实现 | |||
go-blockservice | N/A | 将一个块存储和一个交换一起插入的服务 | ||
Datastores(数据存储)n | ||||
go-datastore | N/A | 数据存储区接口,适配器和基本实现 | ||
go-ipfs-ds-help | N/A | 数据存储区实用程序功能 | ||
go-ds-flatfs | N/A | 一个基于文件系统的数据存储区 | ||
go-ds-measure | N/A | 一个度量收集数据库适配器 | ||
go-ds-leveldb | N/A | 一个基于 leveldb 的数据存储区 | ||
go-ds-badger | N/A | 一个基于 badgerdb 的数据存储区 | ||
Namesys(另命为) | ||||
go-ipns | N/A | IPNS 数据结构和验证逻辑 | ||
Repo | ||||
go-ipfs-config | N/A | go-ipfs 配置文件 定义 | ||
go-fs-lock | lockfile 管理 函数 | |||
fs-repo-migrations | N/A | repo 迁移 | ||
Blocks(块化) | ||||
go-block-format | N/A | block(块) 接口 和 实现 | ||
go-ipfs-blockstore | N/A | blockstore 接口 和 实现 | ||
go-ipfs-blockstore | N/A | blockstore 接口 和 实现 | ||
Commands(命令) | ||||
go-ipfs-cmds | N/A | CLI & HTTP 命令 库 | ||
go-ipfs-cmdkit | 命令库的类型帮手 | |||
go-ipfs-blockstore | N/A | blockstore 接口 和 实现 | ||
go-ipfs-api | N/A | 一个 IPFS HTTP API 的 shell | ||
Metrics & Logging(度量与记录) | ||||
go-metrics-interface | N/A | 指标集合 接口 | ||
go-metrics-prometheus | N/A | prometheus-backed 指标集合 | ||
go-log | N/A | logging 框架 | ||
Generics/Utils(通用/工具) | ||||
go-ipfs-routing | N/A | routing-路由(content(内容), peer(节点), value) 帮手 | ||
go-ipfs-util | N/A | the kitchen sink (厨房水槽) | ||
go-ipfs-addr | N/A | 工具函数,用于解析 IPFS multiaddrs(多地址) |
为简洁起见,我们省略了 go-libp2p 和 go-ipld 包。 这些包的表格可以在各自项目的 readme 文件中找到:
开发
有些地方可以帮助你入门
- Main 文件: cmd/ipfs/main.go
- CLI 命令行: core/commands/ <br>
- Bitswap ( 数据 往来 引擎) 改造的 bit 协议: go-bitswap
- libp2p
CLI, HTTP-API, 建筑图
- 虚线(Dotted)意味着“可能会消失”。
- “Legacy”部分是围绕某些命令的薄包装器,用于在新系统和旧系统之间进行转换。
- “守护进程(daemon)”图中的灰色部分用于显示代码是完全相同的,只是我们根据我们是在客户端还是服务器上运行来打开一些部分,和关闭一些部分。
测试
make test
开发依赖
如果更改 协议缓冲区,则需要安装protoc 编译器.
开发者 笔记
请在 docs目录,查看更多开发信息.
贡献-帮助
我们 ❤️ 所有我们的贡献者;没有你,这个项目不可能成功! 如果您想提供帮助,请参阅Contribute.zh.md.
该存储库遵守 ipfscode-行为守则.