go-ipfs - GoでのIPFSの実装

(IPFS implementation in Go)

Created at: 2014-06-26 16:14:34
Language: Go
License: NOASSERTION

go-ipfs

バナー

GoDoc CircleCI

IPFSとは何ですか?

IPFSは、グローバルなバージョン管理されたピアツーピアファイルシステムです。これは、Git、BitTorrent、Kademlia、SFS、Webなどの以前のシステムからの優れたアイデアを組み合わせたものです。これは、gitオブジェクトを交換する単一のBitTorrentスウォームのようなものです。IPFSは、HTTP Webと同じくらい単純なインターフェースを提供しますが、永続性が組み込まれています。/ipfsでワールドをマウントすることもできます。

詳細については、https ://docs.ipfs.io/introduction/overview/を参照してください。

問題を開く前に、次のいずれかの場所を使用して、スレッドを正しい場所で開いていることを確認することを検討してください。

YouTubeチャンネルサブスクライバー Twitterで@IPFSをフォローする

次のマイルストーン

Githubのマイルストーン

目次

セキュリティ上の問題

IPFSプロトコルとその実装は、まだ開発が進んでいます。これは、プロトコルに問題があるか、実装に誤りがある可能性があることを意味します。そして、IPFSはまだ本番環境に対応していませんが、多くの人がすでに自分のマシンでノードを実行しています。そのため、セキュリティの脆弱性を非常に深刻に受け止めています。セキュリティ上の問題を発見した場合は、すぐにお知らせください。

リモート実行エクスプロイトを公開するなど、ライブ展開に影響を与える可能性のある脆弱性を見つけた場合は、レポートを[email protected]に非公開で送信してください。公開の問題を提出しないでください。

問題がプロトコルの弱点であり、すぐに利用できない場合や、まだ展開されていないものである場合は、オープンに話し合ってください。

インストール

IPFSの正規のダウンロード手順は、https ://docs.ipfs.io/guides/guides/install/で終了しています。IPFS開発に関心がない場合は、これらの手順に従うことを強くお勧めします。

システム要求

IPFSは、ほとんどのLinux、macOS、およびWindowsシステムで実行できます。2GB以上のRAMと2つのCPUコアを搭載したマシンで実行することをお勧めします(go-ipfsは高度に並列化されています)。メモリが少ないシステムでは、完全に安定しない場合があります。

システムのリソースに制約がある場合は、次のことをお勧めします。

  1. OpenSSLをインストールし、を使用してgo-ipfsを手動で再構築し
    make build GOTAGS=openssl
    ます。go-ipfsのコンパイルの詳細については、ダウンロードとコンパイルのセクションを参照してください。
  2. でデーモンを初期化する
    ipfs init --profile=lowpower

Docker

Dockerイメージバージョン(最新のsemver)

Docker内でgo-ipfsを実行する方法の詳細については、こちらをご覧ください

ネイティブLinuxパッケージマネージャー

ArchLinux

コミュニティリポジトリ経由のgo-ipfs

# pacman -Syu go-ipfs

AUR経由のgo-ipfs-git

ニックス

純粋に機能的なパッケージマネージャーNixを使用すると、次のようなgo-ipfsをインストールできます。

$ nix-env -i ipfs

また、属性名を使用してパッケージをインストールすることもできます

ipfs

ソルス

solusでは、go-ipfsはメインリポジトリで go-ipfsとして利用できます。

$ sudo eopkg install go-ipfs

Solusソフトウェアセンターからインストールすることもできます。

openSUSE

go-ipfsのコミュニティパッケージ

その他のパッケージマネージャー

Guix

GNUの機能パッケージマネージャーであるGuixは、go-ipfsパッケージも提供しています。

$ guix package -i go-ipfs

スナップ

スナップを使用すると、サポートされているLinuxディストリビューションのいずれかで:

$ sudo snap install ipfs

スナップはに設定

IPFS_PATH
されます。
SNAP_USER_COMMON
これは通常は
~/snap/ipfs/common
です。代わりに使用したい場合は
~/.ipfs
、次のようにバインドマウントできます
~/snap/ipfs/common

sudo mount --bind ~/.ipfs ~/snap/ipfs/common

より洗練されたものでスナップの閉じ込めを回避したい場合は、スナップの閉じ込めの

go-ipfs
影響を受けないように、別の方法でインストールすることをお勧めします。

macOSパッケージマネージャー

MacPorts

パッケージipfsは現在go-ipfsを指しており、保守されています。

$ sudo port install ipfs

ニックス

macOSでは、純粋に機能的なパッケージマネージャーNixを使用できます。

$ nix-env -i ipfs

また、属性名を使用してパッケージをインストールすることもできます

ipfs

自作

自作式ipfsも維持されます。

$ brew install --formula ipfs

Windowsパッケージマネージャー

Chocolatey

Chocolateyバージョン

PS> choco install ipfs

スクープ

Scoopは

go-ipfs
「extras」バケットで提供します。

PS> scoop bucket add extras
PS> scoop install go-ipfs

ビルド済みのバイナリをインストールする

dist.ipfs.ioダウンロード

そこから:

  • ページの右側にある青い「go-ipfsのダウンロード」をクリックします。
  • アーカイブを開く/抽出します。
  • ipfs
    あなたの道に移動します(あなた
    install.sh
    のためにそれを行うことができます)。

dist.ipfs.ioにアクセスできない場合は、このプロジェクトのGitHubリリースページからgo-ipfsをダウンロードすることもできます。

GitHubリリース

ソースからビルド

GitHubgo.modGoバージョン

go-ipfsのビルドシステムには、Goといくつかの標準POSIXビルドツールが必要です。

  • GNUメイク
  • ギット
  • GCC(または他の互換性のあるCコンパイラ)(オプション)

GCCなしでビルドするには、

CGO_ENABLED=0
(eg、など
make build CGO_ENABLED=0
)を使用してビルドします。

Goをインストールします

GitHubgo.modGoバージョン

更新する必要がある場合: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/go-ipfs.git

$ cd go-ipfs
$ make install

または、インストールせずに実行

make build
してgo-ipfsバイナリをビルド(に保存)することもできます。
cmd/ipfs/ipfs

注:「致命的なエラー:stdlib.h:そのようなファイルまたはディレクトリはありません」の行に沿ってエラーが発生した場合は、Cコンパイラがありません。GCCで再実行

make
する
CGO_ENABLED=0
か、GCCをインストールします。

クロスコンパイル

別のプラットフォーム用にコンパイルするのは、実行するのと同じくらい簡単です。

make build GOOS=myTargetOS GOARCH=myTargetArchitecture
OpenSSL

OpenSSLをサポートするgo-ipfsを構築するには、呼び出しに追加

GOTAGS=openssl
します。
make
OpenSSLを使用して構築すると、新しい接続を頻繁に確立または受信するノードのバックグラウンドCPU使用率を大幅に削減できます。

注:OpenSSLにはCGOサポートが必要であり、デフォルトでは、クロスコンパイル時にCGOは無効になっています。OpenSSLサポートとクロスコンパイルするには、次のことを行う必要があります。

  1. ターゲットプラットフォーム用のコンパイラツールチェーンをインストールします。
  2. CGO_ENABLED=1
    環境変数を設定します。

トラブルシューティング

  • Windowsで構築するための個別の手順が利用可能です。
  • git
    go get
    すべての依存関係をフェッチするには、が必要です。
  • パッケージマネージャーには、古い
    golang
    パッケージが含まれていることがよくあります。
    go version
    レポートが少なくとも1.10であることを確認してください。goのインストール方法については、上記を参照してください。
  • 開発に興味がある場合は、開発の依存関係もインストールしてください。
  • 警告:古いバージョンのOSX FUSE(Mac OS Xの場合)は、マウント時にカーネルパニックを引き起こす可能性があります!-最新バージョンのOSXFUSEを使用することを強くお勧めします。(https://github.com/ipfs/go-ipfs/issues/177を参照)
  • Read docs/fuse.md for more details on setting up FUSE (so that you can mount the filesystem).
  • Shell command completions can be generated with one of the
    ipfs commands completion
    subcommands. Read docs/command-completion.md to learn more.
  • See the misc folder for how to connect IPFS to systemd or whatever init system your distro uses.

Updating go-ipfs

Using ipfs-update

IPFS has an updating tool that can be accessed through

ipfs update
. The tool is not installed alongside IPFS in order to keep that logic independent of the main codebase. To install
ipfs update
, download it here.

Downloading IPFS builds using IPFS

List the available versions of go-ipfs:

$ ipfs cat /ipns/dist.ipfs.io/go-ipfs/versions

Then, to view available builds for a version from the previous command ($VERSION):

$ ipfs ls /ipns/dist.ipfs.io/go-ipfs/$VERSION

To download a given build of a 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

Getting Started

Usage

ドキュメント:コマンドラインクイックスタート ドキュメント:コマンドラインリファレンス

To start using IPFS, you must first initialize IPFS's config files on your system, this is done with

ipfs init
. See
ipfs init --help
for information on the optional arguments it takes. After initialization is complete, you can use
ipfs mount
,
ipfs add
and any of the other commands to explore!

Some things to try

Basic proof of 'ipfs working' locally:

echo "hello world" > hello
ipfs add hello
# This should output a hash string that looks something like:
# QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
ipfs cat <that hash>

Troubleshooting

If you have previously installed IPFS before and you are running into problems getting a newer version to work, try deleting (or backing up somewhere else) your IPFS config directory (~/.ipfs by default) and rerunning

ipfs init
. This will reinitialize the config file to its defaults and clear out the local datastore of any bad entries.

Please direct general questions and help requests to our forum or our IRC channel (freenode #ipfs).

If you believe you've found a bug, check the issues list and, if you don't see your problem there, either come talk to us on IRC (freenode #ipfs) or file an issue of your own!

Packages

This table is generated using the module

package-table
with
package-table --data=package-list.json
.

Listing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:

Name CI/Travis Coverage Description
Libp2p
go-libp2p
Travis CI codecov p2p networking library
go-libp2p-pubsub
Travis CI codecov pubsub built on libp2p
go-libp2p-kad-dht
Travis CI codecov dht-backed router
go-libp2p-pubsub-router
Travis CI codecov pubsub-backed router
Multiformats
go-cid
Travis CI codecov CID implementation
go-multiaddr
Travis CI codecov multiaddr implementation
go-multihash
Travis CI codecov multihash implementation
go-multibase
Travis CI codecov mulitbase implementation
Files
go-unixfs
Travis CI codecov the core 'filesystem' logic
go-mfs
Travis CI codecov a mutable filesystem editor for unixfs
go-ipfs-posinfo
Travis CI codecov helper datatypes for the filestore
go-ipfs-chunker
Travis CI codecov file chunkers
Exchange
go-ipfs-exchange-interface
Travis CI codecov exchange service interface
go-ipfs-exchange-offline
Travis CI codecov (dummy) offline implementation of the exchange service
go-bitswap
Travis CI codecov bitswap protocol implementation
go-blockservice
Travis CI codecov service that plugs a blockstore and an exchange together
Datastores
go-datastore
Travis CI codecov datastore interfaces, adapters, and basic implementations
go-ipfs-ds-help
Travis CI codecov datastore utility functions
go-ds-flatfs
Travis CI codecov a filesystem-based datastore
go-ds-measure
Travis CI codecov a metric-collecting database adapter
go-ds-leveldb
Travis CI codecov a leveldb based datastore
go-ds-badger
Travis CI codecov a badgerdb based datastore
Namesys
go-ipns
Travis CI codecov IPNS datastructures and validation logic
Repo
go-fs-lock
Travis CI codecov lockfile management functions
fs-repo-migrations
Travis CI codecov repo migrations
IPLD
go-block-format
Travis CI codecov block interfaces and implementations
go-ipfs-blockstore
Travis CI codecov blockstore interfaces and implementations
go-ipld-format
Travis CI codecov IPLD interfaces
go-ipld-cbor
Travis CI codecov IPLD-CBOR implementation
go-ipld-git
Travis CI codecov IPLD-Git implementation
go-merkledag
Travis CI codecov IPLD-Merkledag implementation (and then some)
Commands
go-ipfs-cmds
Travis CI codecov CLI & HTTP commands library
go-ipfs-files
Travis CI codecov CLI & HTTP commands library
go-ipfs-api
Travis CI codecov an old, stable shell for the IPFS HTTP API
go-ipfs-http-client
Travis CI codecov a new, unstable shell for the IPFS HTTP API
interface-go-ipfs-core
Travis CI codecov core go-ipfs API interface definitions
Metrics & Logging
go-metrics-interface
Travis CI codecov metrics collection interfaces
go-metrics-prometheus
Travis CI codecov prometheus-backed metrics collector
go-log
Travis CI codecov logging framework
Generics/Utils
go-ipfs-routing
Travis CI codecov routing (content, peer, value) helpers
go-ipfs-util
Travis CI codecov the kitchen sink
go-ipfs-addr
Travis CI codecov utility functions for parsing IPFS multiaddrs

For brevity, we've omitted most go-libp2p, go-ipld, and go-multiformats packages. These package tables can be found in their respective project's READMEs:

Development

Some places to get you started on the codebase:

go-ipfsサブシステムのマップ

WIP:これはgo-ipfsのさまざまなサブシステムの高レベルのアーキテクチャ図です。それらがどのように相互作用するかで更新されます。提案があれば、これを改善する方法 についてここにコメントしてください。

CLI、HTTP-API、アーキテクチャ図

説明:点線は「なくなる可能性が高い」という意味です。「レガシー」部分は、新しいシステムと古いシステムの間で変換するためのいくつかのコマンドの薄いラッパーです。「デーモン」図の灰色の部分は、コードがすべて同じであることを示すためにあります。クライアントで実行しているかサーバーで実行しているかに応じて、一部をオンまたはオフにするだけです。

テスト

make test

開発の依存関係

プロトコルバッファに変更を加える場合は、protocコンパイラをインストールする必要があります。

開発者向けメモ

ドキュメントで開発者向けのその他のドキュメントを探す

貢献

我々❤️すべての貢献者; このプロジェクトはあなたなしではありえないでしょう!手伝いたい場合は、CONTRIBUTING.mdを参照してください。

このリポジトリは、IPFS行動規範に該当します。

1つのチャットルームでご連絡ください。

ライセンス

go-ipfsプロジェクトは、Apache2.0とMITの条件でデュアルライセンスされています。