Diamond Handsに参加するのにUmbrel on Raspberry Pi 4を使ってフルノードのBitcoin CoreとLightningノードのLNDを家庭内LAN環境で稼働し始めたんだけど、1台Raspberry Pi 3が余っていたので、それを使って追加でc-lightningのノードを立ててみた。
Umbrelの設定変更
Umbrelには、1TBの外部SSDをつないで、フルノードを動かしているけど、c-lightningのノード側でもフルノードを稼働するのは冗長的でスペック的にもしんどそうなので、c-lightningが連携するフルノードはUmbrel上で稼働しているものにしたい。
Umbrelでは、Bitcoin CoreやLNDを含め各ソフトウェアはDockerコンテナで起動するようになっていて、これらのアプリケーションの構成は、/home/umbrel/umbrel/docker-compose.yml
に定義されてる。
まず、同一LAN内にあるRaspberry Piからumbrel上のBitcoin CoreへのRPCを叩けるようにするため、docker-compose.yml
のbitcoin
の設定で、RPCのポートを公開するよう編集する↓
bitcoin: container_name: bitcoin image: lncm/bitcoind:v22.0@sha256:37a1adb29b3abc9f972f0d981f45e41e5fca2e22816a023faa9fdc0084aa4507 depends_on: [ tor, manager, nginx ] volumes: - ${PWD}/bitcoin:/data/.bitcoin restart: on-failure stop_grace_period: 15m30s ports: - "$BITCOIN_P2P_PORT:$BITCOIN_P2P_PORT" - "$BITCOIN_RPC_PORT:$BITCOIN_RPC_PORT" # ←この行を追加 networks: default: ipv4_address: $BITCOIN_IP
続いて、Bitcoin Coreの設定ファイル/home/umbrel/umbrel/bitcoin/bitcoin.conf
を編集し、LAN内のマシンからRPCアクセスを許可するためのIPの設定を追加する↓
rpcallowip=192.168.50.1/24 # 自分の環境に合わせてIPの範囲を指定
↑の設定を変更して、Umbrelを再起動すれば、LAN内のマシンからRPCアクセスができるようになる。
※ bitcoin.conf
やdocker-compose.yml
に加えた変更は、Umbrelのバージョンを上げると上書きされて消えてしまうと思うので要注意。
Raspberry Piのセットアップ
ここから64 bitのRaspi osをダウンロードする(まだ公式には64 bit版は公式にリストされてないのね)。ダウンロードしたらRaspberry Pi Imagerを使ってSDカードにOSイメージを書き込む。
デフォだとSSHは無効化されているので、書き込みが終わったディスクのルートディレクトリ(/boot直下)にssh
という名前の空ファイルを作っておく。これでSSH接続できるようになる(モニターやキーボード繋げてセットアップするのが面倒なので)。
LANケーブルを繋いで電源を入れると、あとはSSHでつないで作業できる。Raspberry Piに割り当てられたIPは、arp-scan
とかで調べる。
$ sudo arp-scan -l ... 192.168.50.227 b8:27:eb:24:67:e0 Raspberry Pi Foundation
初期ユーザーとパスワードはpi/raspberry
。
Dockerのセットアップ
Umbrelと同様、Raspberry Pi上にDockerでノードを起動するようにするため、Docker環境をインストールしておく。
まずリポジトリの設定↓
$ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
続いてDockerのインストール↓
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
sudoしなくても実行できるようにpi
ユーザーをdocker
グループに入れておく↓
$ sudo usermod -aG docker $USER
続いて、Docker Composeのインストール。1.x系はリポジトリにARM用のバイナリが公開されてないので、pipでインストールする。
$ sudo apt-get install libffi-dev $ sudo pip3 install docker-compose
c-lightningのセットアップ
c-lightningとTorをRapberry Pi上で動かすためのdocker-compose.ymlを用意したので↓を使ってLNノードをセットアップする。
https://github.com/azuchi/c-lightning-on-raspberry-pi
Rapberry Pi上で↑のリポジトリをクローンする。
$ git clone https://github.com/azuchi/c-lightning-on-raspberry-pi.git
続いて、初期セットアップ。
$ cd c-lightning-on-raspberry-pi.git $ cp cp .env.sample .env
.env
の設定値を自分の環境に合わせて設定する↓
# Bitcoin BITCOIN_NETWORK=bitcoin BITCOIN_RPC_HOST=<ロカールネットワークでumbrelが動作しているマシンのIP> BITCOIN_RPC_PORT=8332 BITCOIN_RPC_USER=<umbre上のbitcoindのRPCユーザー> BITCOIN_RPC_PASSWORD=<umbre上のbitcoindのRPCパスワード> # c-lightning LIGHTNING_ALIAS=<LNノードのエイリアス> LIGHTNING_RGB=<LNノードのカラー(Hex値)>
続いて初期化処理のシェルを実行↓
$ ./setup.sh
一通り設定が終わったら、c-lightningとtorのサービスを起動する↓
$ docker-compose up -d
と、これでumbrel上のBitcoin Coreを連携するRaspberry Pi上にc-lightningが稼働し始める。
lighting-cliの実行
コンテナ上で実行されているc-lightiningに対してlightning-cli
の実行がでるよう、bin
ディレクトリ以下にlightning-cli
を用意している。
$ cd bin $ ./lightning-cli help
のように実行できる。このファイル自体は、内部でコンテナで動作するc-lightningに対してdocker-compose exec
しているだけ。
補足
セットアップは↑で終わりだけど、今回↑のdocker-composeを構成するにあたり、c-lightningのDockerイメージを新たに作成した↓
※ 作成したイメージは、DockerHubで公開しているので、基本的に↑のdokcer-composeを使うのであれば、以下の作業をする必要はない。
c-lightningのDockerイメージの作成
lndについては、Lightning LabsがDocker Hub上にイメージを公開している。c-lightningもElements Projectでコンテナイメージが公開されているんだけど、残念ながらamd64アーキテクチャのイメージしかなく、arm64のイメージは公開されていない。
Raspberry Piで使用する場合、armアーキテクチャに対応したイメージが必要なので、まずはc-lightningのarm64用のDockerイメージを作成する。c-lightningのリポジトリにもarm64用のイメージのビルドファイルがある↓
https://github.com/ElementsProject/lightning/blob/v0.10.1/contrib/linuxarm64v8.Dockerfile
ので、これを使ってビルドする。今回はリポジトリをcloneして、タグv0.10.1
のコードを使ってビルドする。
ちなみにamd64環境でビルドする際は、事前に以下を実行しておく必要がある。
$ docker run --rm --privileged multiarch/qemu-user-static:register --reset
続いて、イメージのビルド
$ docker build -t azuchi/lightningd:v0.10.1 -f contrib/linuxarm64v8.Dockerfile .
DockerHubにプッシュしておく↓
$ docker push azuchi/lightningd:v0.10.1
以降は、Docker Hubから入手可能↓