Raspberry Pi + IPFS + Monacard PIN でモナカードを応援

Raspberry Pi + IPFS + Monacard PIN でモナカードを応援

モナカード、もらってばかりだし、何かしら応援したいと思ってた。

このtweetに触発されて、Raspberry Pi に IPFS を入れて、モナカードをPINするようにした。環境構築のメモを残しておきます。

1. 用意したもの

  • Raspberry Pi 4 Model B 8GB

umbrelに使用しているラズパイが故障したとき用のストック。なので、何かあったらこっちを止めてumbrelの復旧に使用する予定。でも遊ばせておくのはもったいないので何かに使いたいよね。なるべく寿命を縮めないよう負荷の軽い用途で。

  • microSD 64GB

容量はこんなに要らないけど、あるに越したことないかな、SDカードの寿命的に。

2. microSD に OSを焼く

純正のRaspberry Pi Imager を使用。

OS:Raspberry Pi OS LITE (64-BIT)

歯車マークを押して、

SSHを有効化するにチェック

ユーザ名とパスワードも設定。

保存を押して設定を変更し、microSDにOSを書き込み

3. Raspberry Pi の環境設定

microSDカードをRaspberry Piに挿し、起動。Raspberry PiのIPアドレスはルータなどのDHCPのログなどから特定してください。

Windows PowerShellなどのターミナルソフトからSSHでRaspberry Pi にログイン

ssh -t pi@192.168.2.2

(IPアドレス 192.168.2.2 ユーザpiでのログインの例)

以下の設定をしていきます。

  • とりあえずapt
 sudo apt update
 sudo apt full-upgrade
 sudo apt clean
  • dockerをインストール
 sudo apt install docker.io
  • IPアドレスを固定にしておく。(必須ではない)
sudo vi /etc/dhcpcd.conf
# static IP configuration:
interface eth0
static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.1.1

それぞれの値は自分の環境に応じて設定してください。

4. Docker で IPFSをインストール

以下のYouTubeが分かりやすい

やってることは

cd ~
mkdir Containers
cd Containers/
mkdir ipfs
cd ipfs/
mkdir data
mkdir export

sudo docker run -d --name ipfs -v /home/pi/Containers/ipfs/export:/export -v /home/pi/Containers/ipfs/data:/data/ipfs -p 4001:4001 -p 4001:4001/udp -p 8080:8080 -p 5001:5001 ipfs/kubo:latest

sudo docker ps
sudo docker logs 35b9dfe84e03

(35b9dfe84e03 はdocker ps で得られるIPFSのCONTAINER IDの例)

192.168.2.2:5001/webui/ を開く(IPアドレスはラズパイのIPアドレス)

sudo docker exec 35b9dfe84e03 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://192.168.1.102:5001", "http://localhost:3000", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'

sudo docker exec 35b9dfe84e03 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'

sudo docker restart 35b9dfe84e03
  • ipfsコンテナの自動起動を設定
sudo docker update --restart=always ipfs

5. 全モナカードのIPFS PIN付け

ここから拾ってきた monacard.py をローカルに保存して

python monacard.py

を実行するとPINできる。どこまでPINが進んでいるのかわからないので、以下の通り番号を振った。

import re
import requests

endpoint = "http://127.0.0.1:5001/api/v0/pin/add"
url= "https://card.mona.jp/api/cid_list"
response = requests.get(url)

parse_data = re.finditer(r'"cid":"([a-z0-9]+)"', response.text)

count = 1
for m in parse_data:
    r = requests.post(endpoint + "?arg=" + m[1],)
    print(count,end=' , ')
    print(r.url)
    count+=1

これを書いている時点で6701点ありました。

6. crontab -e で自動実行を設定

$ crontab -e
no crontab for pi - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 2
crontab: installing new crontab

vi を選んだけど、初心者向けは1番のnanoです。

15 20 * * * /usr/bin/python ~/monacard.py

毎日20:15に全モナカードをPINするように設定。

7. microSDの寿命を考慮(この辺りはお好みで)

  • swap を無効にする
sudo systemctl status dphys-swapfile
sudo systemctl disable dphys-swapfile
  • ログを揮発性に
sudo vi /etc/systemd/journald.conf
Storage=volatile

8. その他

・無線LANを使うと無線LANが不安定になったのでやむなく有線LANで構築。このあたりは環境によると思います。ケーブル1本減るし無線LANにしたかったけど。

・当初持て余しているRaspberry Pi Zero2を有効利用できたら最高と思って始めたのだけど、重すぎてモナカードのPINは途中で止まるし、sshのログインにも支障が出るのであきらめて、Raspberry Pi 4Bを使うことになった。

・monacard.py のページでcryptcoin-junkey氏が書いてるAnother method for Unix one-liners.を今回のdockerの環境で書くと以下かな。

curl https://card.mona.jp/api/cid_list | jq -r .list[].cid | xargs sudo docker exec 35b9dfe84e03 ipfs pin add  --progress

・他のNFTもPIN出来たらよいのだけど、どこかにリストがまとまっていないでしょうか?Rare Japanese Nfts などのbitcoin系のNFTもPIN出来れば嬉しいのだけど。

Remaining : 0 characters / 0 images
100

Sign up / Continue after login

Related stories

Writer

katana🗡 Lightning Node 運用中。03328dba4e263835416d35b14a2f0298f567c6bb5dad7e3d33d671de30d542b4c1

Share

Popular stories

charge-lnd で fee や max_htlc を自動設定[umbrel 0.5.0以降対応]

861

Lightning node の運用まとめ

449

Raspberry Pi 用の UPS(無停電電源装置) で umbrel の瞬停対策

444