前書き#
前回の記事「IPFS 分散ファイルストレージの原理」では、IPFS システムの設計思想、機能、動作原理、および IPNS について詳しく説明しました。では、どのようにしてローカルに IPFS ノードを構築するのでしょうか?
本記事では、macOS 11.2.3
システム上に IPFS ノード(コマンドラインバージョン)を構築し、ファイルのアップロード、ダウンロード、ネットワーク同期、pin
、GC
、IPNS
などの実際の操作を行い、IPFS の動作原理をより深く理解することを目指します。
コード実践#
インストール#
wget https://dist.ipfs.io/go-ipfs/v0.8.0/go-ipfs_v0.8.0_darwin-amd64.tar.gz
tar -xvzf go-ipfs_v0.8.0_darwin-amd64.tar.gz
cd go-ipfs
./install.sh
ipfs --version
起動#
# ノードの起動
ipfs init
# ファイルのアップロード
ipfs add ipfs_init_readme.png
# ファイルのアップロードとハッシュ値のみ出力
ipfs add -q ipfs_init_readme.png
# ディレクトリのアップロード
ipfs add -r [Dir]
# ファイルの表示
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/quick-start
# 自分がアップロードしたファイルの表示
ipfs cat QmaP3QS6ZfBoEaUJZ3ZfRKoBm3GGuhQSnUWtkVCNc8ZLTj
# 画像の表示とファイルへの出力
ipfs cat QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH > ipfsTest.png
# ファイルのダウンロード
ipfs get QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH -o ipfsTest.png
# ファイルの圧縮とダウンロード
ipfs get QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH -Cao ipfsTest.png
サービスの開始 / 参加#
# 現在のノード情報の表示
ipfs id
# IPFSの設定情報の表示
ipfs config show
# ノードサーバーの起動
ipfs daemon
API サービスはデフォルトでポート 5001 で動作し、http://localhost:5001/webui からアクセスできます。
ゲートウェイサービスはデフォルトでポート 8080 で動作し、ブラウザでファイルにアクセスするには IPFS が提供するゲートウェイサービスを利用する必要があります。ブラウザはまずゲートウェイにアクセスし、ゲートウェイが IPFS ネットワークからファイルを取得します。http://localhost:8080/ipfs/[File Hash] で IPFS にアップロードされたファイルにアクセスできます。
ファイル操作#
# ファイルの一覧表示
ipfs files ls
# ディレクトリの作成
ipfs files mkdir
# ファイルの削除
ipfs files rm
# ファイルのコピー
ipfs files cp [File Hash] /[Dest Dir]
# ファイルの移動
ipfs files mv [File Hash] /[Dest Dir]
# ステータスの表示
ipfs files stat
# 読み取り
ipfs files read
ファイルの更新問題を解決するために IPNS を使用する#
# IPNSを使用してコンテンツを公開し、自動的に更新する
ipfs name publish [File Hash]
# ノードIDが指すハッシュをクエリする
ipfs name resolve
# 更新が必要な複数のサイトがある場合、新しいキーペアを生成し、新しいキーを使用して公開することができます
ipfs key gen --type=rsa --size=2048 mykey
ipfs name publish --key=mykey [File Hash]
Pinning#
IPFS ネットワークからファイルをリクエストする際、IPFS はまずコンテンツをローカルに同期し、キャッシュメカニズムを使用してファイルを処理してストレージスペースの無駄を防ぎます。一定期間使用されないファイルは「回収」されますが、Pinning の役割はローカルでファイルが「回収」されないようにすることです。
# ファイルをPinningする
ipfs pin add [File Hash]
# 特定のハッシュがPinningされているかを確認する
ipfs pin ls [File Hash]
# Pinningの状態を削除する
ipfs pin rm -r [File Hash]
# GC操作
ipfs repo gc
結論#
本記事では、IPFS ファイルシステムをローカルにデプロイし、基本的な操作を試してみました。macOS 11.2.3
およびgo-ipfs_v0.8.0_darwin-amd64
バージョンをベースにしています。異なるシステムでは、バージョンや依存関係の問題によって操作が異なる場合があります。誤りや抜けがある場合は、ご連絡いただければ幸いです。