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から入手可能↓