====== ipfs 使用測試 ====== ===== Alpine 3 安裝 ===== * 安裝環境 Alpine Linux 3.16 * ipfs 0.12.2 su - apk add go-ipfs ~# ipfs version ipfs version 0.12.2 ===== CentOS 6 安裝 ===== * 安裝環境 CentOS 6.8 x86_64 * ipfs v0.4.2 wget https://dist.ipfs.io/go-ipfs/v0.4.2/go-ipfs_v0.4.2_linux-amd64.tar.gz tar xvfz go-ipfs_*.tar.gz mv go-ipfs/ipfs /usr/local/bin/ipfs * 測試是否可正常運作 ipfs help [root@localhost ipfs]# ipfs help USAGE ipfs - Global p2p merkle-dag filesystem. ipfs [] [] ... SUBCOMMANDS BASIC COMMANDS init Initialize ipfs local configuration add Add a file to ipfs cat Show ipfs object data get Download ipfs objects ls List links from an object refs List hashes of links from an object DATA STRUCTURE COMMANDS block Interact with raw blocks in the datastore : diag Print diagnostics TOOL COMMANDS config Manage configuration version Show ipfs version information update Download and apply go-ipfs updates commands List all available commands Use 'ipfs --help' to learn more about each command. ipfs uses a repository in the local file system. By default, the repo is located at ~/.ipfs. To change the repo location, set the $IPFS_PATH environment variable: export IPFS_PATH=/path/to/ipfsrepo ===== Windows 10 安裝 ===== * 安裝環境 Windows 10 64 bit * ipfs v0.4.2 * 下載 https://dist.ipfs.io/go-ipfs/v0.4.2/go-ipfs_v0.4.2_windows-amd64.zip * 解開至 c:\ipfs\ 2016/05/17 13:45 0 build-log 2016/05/17 13:45 377 install.sh 2016/05/17 13:45 28,201,984 ipfs.exe 2016/05/17 13:45 1,083 LICENSE 2016/05/17 13:45 455 README.md cd c:\ipfs ipfs.exe help C:\ipfs>ipfs.exe help USAGE ipfs - Global p2p merkle-dag filesystem. ipfs [] [] ... SUBCOMMANDS BASIC COMMANDS init Initialize ipfs local configuration add Add a file to ipfs : : update Download and apply go-ipfs updates commands List all available commands Use 'ipfs --help' to learn more about each command. ipfs uses a repository in the local file system. By default, the repo is located at ~/.ipfs. To change the repo location, set the $IPFS_PATH environment variable: export IPFS_PATH=/path/to/ipfsrepo ===== Rapsberry Pi 安裝 ===== sudo su - wget https://dist.ipfs.io/go-ipfs/v0.4.2/go-ipfs_v0.4.2_linux-arm.tar.gz ===== 啟用設定 ===== * 初始化 ipfs 目錄 ipfs init [root@localhost ~]# ipfs init initializing ipfs node at /root/.ipfs generating 2048-bit RSA keypair...done peer identity: QmaU6Qwnu75JjiKr23VMEfT191sEJVcYcTLPnVSMmbua7n to get started, enter: ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme * 查看初始化建立的目錄 ipfs ls /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG [root@localhost ~]# ipfs ls /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V 1688 about QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y 200 contact QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7 322 help QmdncfsVm2h5Kqq9hPmU7oAVX2zTSVP3L869tgTbPYnsha 1728 quick-start QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB 1102 readme QmTumTjvcYCAvRRwQ8sDRxh8ezmrcr88YFU7iYNroGGTBZ 1027 security-notes * 啟動 ipfs daemon 加入 ipfs 的服務群集 ipfs daemon [root@localhost ~]# ipfs daemon Initializing daemon... Swarm listening on /ip4/127.0.0.1/tcp/4001 : : Swarm listening on /ip6/::1/tcp/4001 API server listening on /ip4/127.0.0.1/tcp/5001 Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080 Daemon is ready * 查看目前可以看到的連結點 ipfs swarm peers [root@localhost ~]# ipfs swarm peers /ip4/104.223.59.174/tcp/4001/ipfs/QmeWdgoZezpdHz1PX8Ly8AeDQahFkBNtHn6qKeNtWP1jB6 /ip4/104.232.114.65/tcp/35609/ipfs/QmWnpsGugiw4YNFXvXr3iN86LDnJx6UsebzeqnpBiybebR /ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z : : /ip4/81.236.22.69/tcp/61588/ipfs/QmXKd1pJxTqTWNgGENcX2daiGLgWRPDDsXJe8eecQCr6Vh /ip4/91.126.205.225/tcp/39174/ipfs/QmdP9LNSHeBYH5TvRgVsCs8XyuFuKbPhpijsCxjA7PGyBH {{:tech:image_17.png}} * 要建立自己封閉的 ipfs Cluster 可透過修改 config 內的 "Bootstrap" 定義為內部的 ipfs 節點 Exp. cd .ipfs vi config : : "Bootstrap": [ "/ip4/140.92.143.147/tcp/4001/ipfs/QmaU6Qwnu75JjiKr23VMEfT191sEJVcTcTLPnVSMmbua7n", "/ip4/140.92.143.147/tcp/4001/ipfs/QmWnk36dXLzbMAJijkYgH4JTs6Y2UKG1THeAA9Vx9VmemK" ], : : ===== 基本操作 ===== * 將 /tmp/test 目錄與底下檔案上傳至 ipfs 內 ipfs add -r /tmp/test [root@xpc-ideas tmp]# ipfs add -r /tmp/test added QmR3Y6ZHkvVyEvjVAjbqMQfrAyC5mCfH5CcDg9ZcYhu3f6 test/IMAG5471.jpg added QmUPGSG2BR9zSJYRtXRVhDK5thJEE7kXgfjV7RgXXqtM5e test/IMAG5472.jpg added QmaVZADgMeibd7xX2MJuoBk9yJe6DWdAWuiN3hYpkbdJoX test/IMAG5473.jpg added QmWSQKyVbtWz3B4GjPSj68gtWQKVwQnZjiyFLRTe2jrXbq test/IMAG5474.jpg added QmaP366L4P2zRzGHRW7qa4VThckk2KjiqtNM6QmSMw6PNu test/IMAG5475.jpg added QmdujYFtXRpqdjoxc2rvbp5LEYTi1J2Qxe7x74eJsCHdQx test/IMAG5476.jpg added QmWR7tngmYs17rcKfBe19xuzfTf3DSbR5CsRymtpAfCCin test/IMAG5477.jpg added QmQbnDQXboZv9TDgTQJf1T2kniEjQof3ue9eUWhEPnvbuW test/IMAG5478.jpg added QmbzTnPVzPgRvVJQMWXNsGiA48WRnV7JMGuSmyDCvBaMbA test/IMAG5479.jpg added QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu test * 將檔案 /tmp/test1.txt 上傳至 ipfs 內 ipfs add /tmp/test1.txt [root@xpc-ideas tmp]# ipfs add /tmp/test1.txt added QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf test1.txt * 查詢 QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu 目錄內容 ipfs ls QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu [root@kvm-ipfs3 ~]# ipfs ls QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu QmR3Y6ZHkvVyEvjVAjbqMQfrAyC5mCfH5CcDg9ZcYhu3f6 1712841 IMAG5471.jpg QmUPGSG2BR9zSJYRtXRVhDK5thJEE7kXgfjV7RgXXqtM5e 2046221 IMAG5472.jpg QmaVZADgMeibd7xX2MJuoBk9yJe6DWdAWuiN3hYpkbdJoX 1322887 IMAG5473.jpg QmWSQKyVbtWz3B4GjPSj68gtWQKVwQnZjiyFLRTe2jrXbq 1489588 IMAG5474.jpg QmaP366L4P2zRzGHRW7qa4VThckk2KjiqtNM6QmSMw6PNu 1637953 IMAG5475.jpg QmdujYFtXRpqdjoxc2rvbp5LEYTi1J2Qxe7x74eJsCHdQx 1486240 IMAG5476.jpg QmWR7tngmYs17rcKfBe19xuzfTf3DSbR5CsRymtpAfCCin 1369639 IMAG5477.jpg QmQbnDQXboZv9TDgTQJf1T2kniEjQof3ue9eUWhEPnvbuW 2208829 IMAG5478.jpg QmbzTnPVzPgRvVJQMWXNsGiA48WRnV7JMGuSmyDCvBaMbA 1800607 IMAG5479.jpg * 直接顯示 QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf 檔案內容 ipfs cat QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf [root@kvm-ipfs3 ~]# ipfs cat QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf # chkweblog.pl Ver 1.00 (2014/10/16) Hostname:[xpc-ideas] Procdate:[2014-10-16 20:40] Taketime:[2]Sec. Keyword#3 : [/main/images/info.php] ----- : : * 下載 QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf 檔案至 /tmp/t1.txt ipfs get QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf -o /tmp/t1.txt [root@kvm-ipfs3 ~]# ipfs get QmZRLdzkexfEiFkwwdyJ5g46BFtrCQwa47TL1e4gHok8rf -o /tmp/t1.txt Saving file(s) to /tmp/t1.txt 6.50 KB 0 * 下載 QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu 目錄至 /tmp/t2/ ipfs get QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu -o /tmp/t2 [root@kvm-ipfs3 ~]# ipfs get QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu -o /tmp/t2 Saving file(s) to /tmp/t2 14.38 MB 0 [root@kvm-ipfs3 ~]# cd /tmp/t2/ [root@kvm-ipfs3 t2]# ls IMAG5471.jpg IMAG5472.jpg IMAG5473.jpg IMAG5474.jpg IMAG5475.jpg IMAG5476.jpg IMAG5477.jpg IMAG5478.jpg IMAG5479.jpg ===== 進階操作 ===== * 當上傳至 ipfs 後,一開始只會存在本機的 ipfs repos 內, 當其他節點有 get / cat 時,才會將檔案區塊同步過去, 但也可以透過 pin add 的語法對特定目錄或檔案進行該節點立即同步, Exp. ipfs pin add -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu [root@kvm-ipfs1 ~]# ipfs pin add -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu pinned QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu recursively * 上傳至 ipfs 的檔案原則上應該很難完全刪除掉, 除非對每個節點都可以進入維護. 在這樣條件下要刪除一個目錄或檔案, 可以透過 pin rm 以及 repo gc 的語法對每個節點的特定目錄或檔案進行標注刪除, Exp. ipfs pin rm -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu ipfs repo gc [root@xpc-ideas tmp]# ipfs pin rm -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu unpinned QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu [root@xpc-ideas tmp]# ipfs repo gc removed QmeHRZmBmeGLuszjAZczMA1f9uYrrxTggjNaLnKhMG1iw2 removed QmeUeLi59BU7szstx95vWSdKBXqojraGTACPXHxGqJMXz2 removed QmfBiCoFsu5jyETpywAUBWDWyj6Lru9PHYxcqgeTZQqnE8 removed QmfNHKknAV5qEdg8nktPj4qUAH6Hi9r7JEKexDPw7ZxJrp [root@kvm-ipfs1 ~]# ipfs pin rm -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu unpinned QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu [root@kvm-ipfs1 ~]# ipfs repo gc removed QmeHRZmBmeGLuszjAZczMA1f9uYrrxTggjNaLnKhMG1iw2 removed QmeUeLi59BU7szstx95vWSdKBXqojraGTACPXHxGqJMXz2 removed QmfBiCoFsu5jyETpywAUBWDWyj6Lru9PHYxcqgeTZQqnE8 removed QmfNHKknAV5qEdg8nktPj4qUAH6Hi9r7JEKexDPw7ZxJrp [root@kvm-ipfs2 ~]# ipfs pin rm -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu Error: not pinned [root@kvm-ipfs2 ~]# ipfs repo gc [root@kvm-ipfs3 t2]# ipfs pin rm -r QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu Error: not pinned [root@kvm-ipfs3 t2]# ipfs repo gc **如果該節點有同步過就會回應 unpinned , 沒同步過則回應 Error: not pinned** ipfs ls QmVavKj5mD7z37Z32YHGhAgML4PadDbE3j1JzEgNoBo5Qu **如果將所有節點都清除就會查不到上傳的資料** ===== 參考網址 ===== * https://ipfs.io/docs/install/ * https://github.com/ipfs/ipfs * https://github.com/ipfs/examples/tree/master/examples/pinning {{tag>dfs filesystem ipfs}}