IPFSは、グローバルなバージョン管理されたピアツーピアファイルシステムです。これは、Git、BitTorrent、Kademlia、SFS、Webなどの以前のシステムからの優れたアイデアを組み合わせたものです。これは、gitオブジェクトを交換する単一のBitTorrentスウォームのようなものです。IPFSは、HTTP Webと同じくらい単純なインターフェースを提供しますが、永続性が組み込まれています。/ipfsでワールドをマウントすることもできます。
詳細については、https ://docs.ipfs.io/introduction/overview/を参照してください。
問題を開く前に、次のいずれかの場所を使用して、スレッドを正しい場所で開いていることを確認することを検討してください。
IPFSプロトコルとその実装は、まだ開発が進んでいます。これは、プロトコルに問題があるか、実装に誤りがある可能性があることを意味します。そして、IPFSはまだ本番環境に対応していませんが、多くの人がすでに自分のマシンでノードを実行しています。そのため、セキュリティの脆弱性を非常に深刻に受け止めています。セキュリティ上の問題を発見した場合は、すぐにお知らせください。
リモート実行エクスプロイトを公開するなど、ライブ展開に影響を与える可能性のある脆弱性を見つけた場合は、レポートを[email protected]に非公開で送信してください。公開の問題を提出しないでください。
問題がプロトコルの弱点であり、すぐに利用できない場合や、まだ展開されていないものである場合は、オープンに話し合ってください。
IPFSの正規のダウンロード手順は、https ://docs.ipfs.io/guides/guides/install/で終了しています。IPFS開発に関心がない場合は、これらの手順に従うことを強くお勧めします。
IPFSは、ほとんどのLinux、macOS、およびWindowsシステムで実行できます。2GB以上のRAMと2つのCPUコアを搭載したマシンで実行することをお勧めします(go-ipfsは高度に並列化されています)。メモリが少ないシステムでは、完全に安定しない場合があります。
システムのリソースに制約がある場合は、次のことをお勧めします。
make build GOTAGS=opensslます。go-ipfsのコンパイルの詳細については、ダウンロードとコンパイルのセクションを参照してください。
ipfs init --profile=lowpower
Docker内でgo-ipfsを実行する方法の詳細については、こちらをご覧ください。
# pacman -Syu go-ipfs
純粋に機能的なパッケージマネージャーNixを使用すると、次のようなgo-ipfsをインストールできます。
$ nix-env -i ipfs
また、属性名を使用してパッケージをインストールすることもできます
ipfs。
solusでは、go-ipfsはメインリポジトリで go-ipfsとして利用できます。
$ sudo eopkg install go-ipfs
Solusソフトウェアセンターからインストールすることもできます。
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影響を受けないように、別の方法でインストールすることをお勧めします。
パッケージipfsは現在go-ipfsを指しており、保守されています。
$ sudo port install ipfs
macOSでは、純粋に機能的なパッケージマネージャーNixを使用できます。
$ nix-env -i ipfs
また、属性名を使用してパッケージをインストールすることもできます
ipfs。
自作式ipfsも維持されます。
$ brew install --formula ipfs
PS> choco install ipfs
Scoopは
go-ipfs「extras」バケットで提供します。
PS> scoop bucket add extras
PS> scoop install go-ipfs
そこから:
ipfsあなたの道に移動します(あなた
install.shのためにそれを行うことができます)。
dist.ipfs.ioにアクセスできない場合は、このプロジェクトのGitHubリリースページからgo-ipfsをダウンロードすることもできます。
go-ipfsのビルドシステムには、Goといくつかの標準POSIXビルドツールが必要です。
GCCなしでビルドするには、
CGO_ENABLED=0(eg、など
make build CGO_ENABLED=0)を使用してビルドします。
更新する必要がある場合:Goの最新バージョンをダウンロードします。
Goのbinディレクトリを
$PATH環境変数に追加する必要があります。たとえば、これらの行を
/etc/profile(システム全体のインストールの場合)または
$HOME/.profile:に追加します。
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:$GOPATH/bin
(問題が発生した場合は、Goのインストール手順を参照してください)。
$ 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をサポートするgo-ipfsを構築するには、呼び出しに追加
GOTAGS=opensslします。
makeOpenSSLを使用して構築すると、新しい接続を頻繁に確立または受信するノードのバックグラウンドCPU使用率を大幅に削減できます。
注:OpenSSLにはCGOサポートが必要であり、デフォルトでは、クロスコンパイル時にCGOは無効になっています。OpenSSLサポートとクロスコンパイルするには、次のことを行う必要があります。
CGO_ENABLED=1環境変数を設定します。
git
go getすべての依存関係をフェッチするには、が必要です。
golangパッケージが含まれていることがよくあります。
go versionレポートが少なくとも1.10であることを確認してください。goのインストール方法については、上記を参照してください。
ipfs commands completionsubcommands. Read docs/command-completion.md to learn more.
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.
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
To start using IPFS, you must first initialize IPFS's config files on your system, this is done with
ipfs init. See
ipfs init --helpfor information on the optional arguments it takes. After initialization is complete, you can use
ipfs mount,
ipfs addand any of the other commands to explore!
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>
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!
This table is generated using the module
package-tablewithpackage-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 |
p2p networking library | ||
go-libp2p-pubsub |
pubsub built on libp2p | ||
go-libp2p-kad-dht |
dht-backed router | ||
go-libp2p-pubsub-router |
pubsub-backed router | ||
Multiformats | |||
go-cid |
CID implementation | ||
go-multiaddr |
multiaddr implementation | ||
go-multihash |
multihash implementation | ||
go-multibase |
mulitbase implementation | ||
Files | |||
go-unixfs |
the core 'filesystem' logic | ||
go-mfs |
a mutable filesystem editor for unixfs | ||
go-ipfs-posinfo |
helper datatypes for the filestore | ||
go-ipfs-chunker |
file chunkers | ||
Exchange | |||
go-ipfs-exchange-interface |
exchange service interface | ||
go-ipfs-exchange-offline |
(dummy) offline implementation of the exchange service | ||
go-bitswap |
bitswap protocol implementation | ||
go-blockservice |
service that plugs a blockstore and an exchange together | ||
Datastores | |||
go-datastore |
datastore interfaces, adapters, and basic implementations | ||
go-ipfs-ds-help |
datastore utility functions | ||
go-ds-flatfs |
a filesystem-based datastore | ||
go-ds-measure |
a metric-collecting database adapter | ||
go-ds-leveldb |
a leveldb based datastore | ||
go-ds-badger |
a badgerdb based datastore | ||
Namesys | |||
go-ipns |
IPNS datastructures and validation logic | ||
Repo | |||
go-fs-lock |
lockfile management functions | ||
fs-repo-migrations |
repo migrations | ||
IPLD | |||
go-block-format |
block interfaces and implementations | ||
go-ipfs-blockstore |
blockstore interfaces and implementations | ||
go-ipld-format |
IPLD interfaces | ||
go-ipld-cbor |
IPLD-CBOR implementation | ||
go-ipld-git |
IPLD-Git implementation | ||
go-merkledag |
IPLD-Merkledag implementation (and then some) | ||
Commands | |||
go-ipfs-cmds |
CLI & HTTP commands library | ||
go-ipfs-files |
CLI & HTTP commands library | ||
go-ipfs-api |
an old, stable shell for the IPFS HTTP API | ||
go-ipfs-http-client |
a new, unstable shell for the IPFS HTTP API | ||
interface-go-ipfs-core |
core go-ipfs API interface definitions | ||
Metrics & Logging | |||
go-metrics-interface |
metrics collection interfaces | ||
go-metrics-prometheus |
prometheus-backed metrics collector | ||
go-log |
logging framework | ||
Generics/Utils | |||
go-ipfs-routing |
routing (content, peer, value) helpers | ||
go-ipfs-util |
the kitchen sink | ||
go-ipfs-addr |
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:
Some places to get you started on the codebase:
Addコマンドの謎を解き明かす
WIP:これはgo-ipfsのさまざまなサブシステムの高レベルのアーキテクチャ図です。それらがどのように相互作用するかで更新されます。提案があれば、これを改善する方法
についてここにコメントしてください。
説明:点線は「なくなる可能性が高い」という意味です。「レガシー」部分は、新しいシステムと古いシステムの間で変換するためのいくつかのコマンドの薄いラッパーです。「デーモン」図の灰色の部分は、コードがすべて同じであることを示すためにあります。クライアントで実行しているかサーバーで実行しているかに応じて、一部をオンまたはオフにするだけです。
make test
プロトコルバッファに変更を加える場合は、protocコンパイラをインストールする必要があります。
我々
このリポジトリは、IPFS行動規範に該当します。
1つのチャットルームでご連絡ください。
go-ipfsプロジェクトは、Apache2.0とMITの条件でデュアルライセンスされています。