【Umbrel】core-lightningの運用ノウハウ(随時更新)
Umbrel Core-lightning(以下CLNと略す)を運用するにあたり役に立ちそうなノウハウやメモを随時投稿します。
・configファイルを用意する
Umbrelのアプリとして必要な設定はdocker-compose.ymlで指定されている。
それ以外の設定をしたい場合configファイルに入れると便利。
configファイルの置き場所は
/home/umbrel/umbrel/app-data/core-lightning/data/lightningd
ここにtouch configとでもやってファイルをつくる。
cd /home/umbrel/umbrel/app-data/core-lightning/data/lightningd
touch config
以下内容をひな型として使ってみてください。
行頭に#があるとコメント行になります。つまり.iniフォーマット。
/home/umbrel/umbrel/app-data/core-lightning/data/lightningd/config
# [General options]
# [Bitcoin control options]
# [Lightning daemon options]
# [Lightning node customization options]
# [Lightning channel and HTLC options]
# [Payment control options]
# [Networking options]
# [Lightning Plugins]
# [Experimental Options]
configに設定できる内容は以下を参照
セクションを意味する[]があるけれどもこれは私(tanakei)が意図的に見やすく区別しやすくするために付けただけ。これら行の#は外さない。
・configの設定をCLNに反映させる
appスクリプトでCLNを再起動すると反映することができる。
configを書き換えただけでは反映されない。
cd /home/umbrel/umbrel/scripts
./app restart core-lightning
・ログをファイルに出力させる
以下の場所でtouch log.txtとしてlog.txtファイルを作る。
/home/umbrel/umbrel/app-data/core-lightning/data/lightningd
cd /home/umbrel/umbrel/app-data/core-lightning/data/lightningd
touch log.txt
次にconfigの[Lightning daemon options]セクションにlog-fileを追加する。
# [Lightning daemon options]
log-file=/data/.lightning/log.txt
※Dockerによって/home/umbrel/umbrel/app-data/core-lightning/data/lightningd は /data/.lightning として使われている。
・ノードエイリアス(alias)を設定する
configの[Lightning node customization options]セクションに以下を追加する。
分かると思うが、ここにお好みのaliasを指定する の文字列を消して自分の設定したいaliasを指定する。
# [Lightning node customization options]
alias=ここにお好みのエイリアスを指定する
・実験的機能のLN Offerを有効にする
configの[Experimental Options]セクションに以下を追加する。
# [Experimental Options]
experimental-onion-messages
experimental-offers
・完全にTorでの発信オンリーにする
UmbrelはなぜかCLNの発信をClearnetとTorのハイブリッドを許している。
それは always-use-proxy=true の設定がないから。
(LNDは発着信Torのみなのに)
なのでこの設定をconfigに追加してCLNも発着進Torのみにする。
# [Networking options]
always-use-proxy=true
・任意のニーモニックからhsm_secretを作る
※CLNのhsm_secretはLNDのwallet.dbのようなものだと思ってください。
Umbrel CLNはこのhsm_secretファイルを自動生成したものを使い、これをバックアップするためのニーモニックを表示するとかそういう機能はない。
自分で作って控えてあるニーモニックでhsm_secretを作ってしまえばこのファイルが壊れてもオンチェーン資金は復旧はできる。
【補記】
hsm_secret作成につかうニーモニックはBIP39で、LNDのAezeedと違って自分が作成されたブロック高さというものを含んでいない。新規でなくて復元して使う場合は作成されたブロック高さからブロックチェーンをrescanする必要がある。
configの1行目にrescanオプションを付けてCLNをリスタートする。
// 特定のブロック高さを指定する場合はマイナス記号をつける
rescan=-756000
// 現在のブロック高さから指定ブロック分さかのぼった高さからrescanする
rescan=10000
※現在の高さが760,000なら10000指定だと750,000からrescan
1.CLNインストール後、dockerコンテナに入る
docker exec -it core-lightning_lightningd_1 bash
2.lightning-hsmtoolコマンドを使って独自hsm_secretを作る
cd data/.lightning/bitcoin
lightning-hsmtool generatehsm my-hsm_secret
・上記コマンドを実行するとニーモニックの言語、ニーモニック、パスフレーズの入力を催促される。
Select your language:
0) English (en)
1) Spanish (es)
2) French (fr)
3) Italian (it)
4) Japanese (jp)
5) Chinese Simplified (zhs)
6) Chinese Traditional (zht)
Select [0-7]: 0 ※定番の英単語なら0を入力
Introduce your BIP39 word list separated by space (at least 12 words):
<ニーモニックを入力する>
Warning: remember that different passphrases yield different bitcoin wallets.
If left empty, no password is used (echo is disabled).
Enter your passphrase:
<パスフレーズを入力する> ※パスフレーズ不要ならそのままエンターキーを押す。
New hsm_secret file created at my-hsm_secret
Use the `encrypt` command to encrypt the BIP32 seed if needed
コンテナから抜ける
exit
3.appスクリプトでCLNを止めて、独自hsm_secret以外を削除
※【重要】いままで使っていたhsm_secretを削除する。もしチャネル残高、ウォレット残高があるならチャネルを閉じて資金を退避すること。自己責任!
cd ~/umbrel/scripts/
./app stop core-lightning
cd ~/umbrel/app-data/core-lightning/data/lightningd/bitcoin
rm gossip_store hsm_secret lightningd.sqlite3 lightning-rpc
mv my-hsm_secret hsm_secret
4.appスクリプトでCLNを再開する
cd ~/umbrel/scripts/
./app start core-lightning
※もしrescanするならstartする前にconfigファイルにrescanを追加する。rescanする高さ次第で完了まで時間がかかる。どこまでrescanが進んだか確認するには以下のコマンドを実行してblockheightを見る。現在の高さまで到達していなければrescan中となる。
docker exec core-lightning_lightningd_1 lightning-cli getinfo
rescanが終わったらconfigからrescanを削除する。残しておくとUmbrel再起動後にまたrescanするハメになる!
【メモ書き】
・Emergency recoverについて
LNDのSCBのようなもの。ファイル名はemergency.recover
チャネルを開くと更新される。
hsm_secretとこのファイルだけを置いてCLNを開始すると自動でこのファイルから強制クローズするための情報が読み出されてDLPで相手から強制クローズするような仕組み。
この機能はv0.12から使える。
動作確認してみた所、LNDのSCBに比べるとかなり使いづらい。
1. CLNがTor発信だとチャネルパートナーと接続できない。
Clearnet発信できても相手がTorのみノードならTor発信せざるを得ない。
相手と通信できなければ資金回収できない。
2. 相手がLNDだとなぜか強制クローズされない。相手がCLNならできる。
つまり、自分と相手がClearnetノードでかつ相手もCLNならば Emergency recoverで強制クローズして資金回収できる。
こんな条件の厳しい復旧方法がマジで役に立つのか?
v0.11以降ならばLNDのchannel.dbに相当するlightningd.sqlite3をプライマリ・セカンダリDBと冗長化できるので、セカンダリDBをNFSで保存すればUmbrelのストレージが壊れてもセカンダリDBで復旧できる。そのためemergerncy.recoverを使う必要がないと思われる。