Umbrelのお手軽Dropbox自動バックアップ

Umbrelのお手軽Dropbox自動バックアップ

Diamond Hands活動をされている方だと実感あるかと思うのですが、ライトニングネットワークのノード運営には恐ろしいところがあります。気がつくとビットコイン資産をどんどんつぎ込んでチャネルを沢山繋ぎたくなっちゃうんです。

でも、ラズベリーパイは結構不安定でいきなりデータが吹っ飛んだなんて人の話もちらほら聞きますよね。

なのでバックアップは大事だと思いつつも、メニューの奥深くにあるバックアップボタンを押しに行くのは辛いです。三日坊主になります。

ということで、チャネルのオープン/クローズをトリガーとして自動でDropboxにバックアップを送りつけるスクリプトを作りました。Jameson Lopp作スクリプトからのフォークとなります。

lnd-channel-remote-backup

Umbrel, myNodeに対応します。

セットアップにて、SSHやファイル編集が伴うのでちょっと気合いが必要ですが、是非ご活用ください。

。。。

この記事書く中で気付いちゃったのですが、bitkotaroさんが全く同じことをやられていました。もう完璧です。最初からこちら参照すればよかったです。

https://spotlight.soy/detail?article_id=ivyqxwema

頑張って差を見いだすとしたら、

  • myNodeにも対応するよ!
  • channel.backup-20210912T081909等とバックアップに日時が付くよ!

といったところになりますね。

そもそもなんでバックアップが必要なのか

ライトニングネットワーク上のビットコインは、チャネル上に自分の資産がデポジットされる形で管理されます。このチャネルに関する情報を保持しておかないと、デポジットされた資産を回収できなくなってしまいます。そのため、オンチェーン上の資産を保護するためのニモニック24単語の他に、チャネルの状態についてのバックアップが必要となります。

UmbrelやmyNodeといったラズベリーパイでノードを運用するソリューションは、LNDをライトニングネットワークのエンジンとして利用しています。LNDには、Static Channel Backups (SCBs)という機構が内蔵されており、ボタン1クリックで簡単にchannel.backupというファイルを作って取り出すことができます。

ちょっとややこしいのは、このchannel.backupはチャネルのオープン/クローズの都度内容が書き換わる点です。最初に一度生成したらずっと固定なニモニックとは性質が異なります。ですので、ノード運用をする限りこのバックアップファイルについては常に最新のものを保管する必要があります。

Umbrelでは、このchannel.backupをUmbrel運営側サーバー(Amazon S3)で預かってくれているようです。なにかトラブルがあってchannel.backupが必要になった場合は運営側にコンタクトをとってファイルを送って貰うことになります。これでいいや、という方は本記事の自動バックアップは必要ないです。

リカバリー方法

SCBsを用いたリカバリーの実態はチャネルのクローズによる自己資産の回収であって、「チャネルをオープンしている」という状態までの復元はされない点に注意です。

LNDオフィシャルの手順解説 によると、下記ステップでリカバリーできます。

1. On-Chain Recovery

オンチェーン上のビットコインの回収ステップになります。

Umbrelですと、新規セットアップする際に24単語を入力して復元できます。

2. Off-Chain Recovery

ライトニングネットワーク上のビットコインの回収ステップになります。

UmbrelもUI上で対応する仕組みは未導入で、手動で頑張らないといけません。

1. ラズパイ上にchannel.backupファイルを持っていく

2. SSHログインし、LNDのコマンドを直接叩く

といったステップになります。誰かがこのへんの解説書いてくれることに期待しつつ、ここでは掘り下げません。

lncli create -multi_file=channel.backu

Dropboxへの自動バックアップ

1.DropboxへアクセスするためのAPI Tokenを発行する

https://www.dropbox.com/developers/apps/create

に行きます。自身のDropboxアカウントでログインします。

こちらの画面にて、"Scoped access"、"App folder"を選択し、アプリ名を入力します。注意点として、世界でユニークな名前にしないとエラーとなります。

Permissionsタブにて、"files.content.write"を選択します。

めっちゃ分かりにくいのですが、下部にあるSubmitボタンを押すことで保存されます。

もしかしたら、Cookieに関する同意ウィンドウが陣取っているかもしれません。その場合は、そちらを同意するなりしてどける必要があります。

続いて、Settingsタブにて、

Access token expiration: No expiration

を選択後、Generated access token欄にあるGenerateボタンを選択します。

赤枠にある値をメモります。後で、DROPBOX_APITOKENの値として利用します。大事な情報ですので、外には漏らないよう気をつけましょう。

Dropbox上での作業は以上となります。

続いて、ノード側での設定です。

ノードでの設定

1. Umbrel / myNodeにSSHログインする

環境に合わせ下記の感じですね。

ssh umbrel@umbrel.local

2.インストールする

スクリプトをダウンロードします。

cd && wget -qN https://raw.githubusercontent.com/andgohq/lnd-channel-remote-backup/main/lnd-channel-remote-backup.sh && chmod +x lnd-channel-remote-backup.sh

動作に必要な関連プログラムをインストールします。sudo apt update
sudo apt install -y inotify-tools jq

3.設定を書き換える

ダウンロードしてきたスクリプトファイルをエディタで開きます。

nano lnd-channel-remote-backup.sh

下記の行を編集し、Ctrl-x Ctrl-sで保存します。

# set the api token obtained from the Dropbox
DROPBOX_APITOKEN="ADD_OAUTH_LONG_LIVED_TOKEN_WITH_WRITE_ACCESS_HERE"
# enable these lines based on your environment
DATADIR=...
WORKINGDIR=...
HOSTNAME=...

ここで、DROP_APITOKENの値は上記ステップ1で取得したものとなります。

DATADIR, WORKINGDIR, HOSTNAMEはumbrel/myNodeの設定値がコメントとして記述されていますので自分の環境にあった方の先頭#を消します。

2022/8/7追記

Umbrel v0.5以降ではフォルダ構造が変わったため、DATADIRの内容が異なります。

DATADIR="/home/umbrel/umbrel/app-data/lightning/data/lnd"

4.自動起動するようにする

自動起動用の設定ファイルを作成します。

sudo nano /etc/systemd/system/lnd-channel-remote-backup.service

とやってエディタにてファイルを開き、下記を記述します。

Umbrelの場合:

[Service]
ExecStart=/home/umbrel/lnd-channel-remote-backup.sh
Restart=always
RestartSec=1
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=lnd-channel-remote-backup
User=umbrel
Group=umbrel

[Install]WantedBy=multi-user.target

myNodeの場合:

[Service]
ExecStart=/home/admin/lnd-channel-remote-backup.sh
Restart=always
RestartSec=1
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=lnd-channel-remote-backup
User=bitcoin
Group=bitcoin

[Install]
WantedBy=multi-user.target

保存したら、

sudo systemctl start lnd-channel-remote-backup

にてお試しでスクリプトを実行できます。

Dropboxのアプリフォルダ内にバックアップファイルが登場していたら成功です。

もし、うまくいっていないようでしたらログを見てみましょう。

cat /var/log/syslog

バックアップが動くことを確認しましたら、

sudo systemctl enable lnd-channel-remote-backup

とやると、ラズベリーパイを再起動させた際に、自動でスクリプトが起動し常駐されるようになります。

以上となります。

チャネルをオープン、クローズしたタイミング以外でもバックアップファイルが作られることがありますね。何故かよくわかってないんですが、気になる方がいましたらオープンソースですので直してみて下さい。

Remaining : 0 characters / 0 images
200

Sign up / Continue after login

Related stories

Writer

ビットコイン研究所にコラム寄稿したり、AndGoという会社にてビットコインなプロダクトと戯れたりしています。

Share

Popular stories

Argon ONE M.2選択は修羅の道

867

LNのリバランス等をCLIで行う方法

717

DH発足から1年のUmbrelアップデートを振り返る

205