note ブロックチェーン

Docker知らんけど!な人に贈る、Mac+DockerでLightning Networkのノードをたてる - 準備編

※この記事に書かれていることを試す方は、自己責任でやってくださいましで候。

久々に猛勉した。

Dockerってなんぞや?っと気にはなってはいたのですが、先日この本

を読んだ時に「目的のない勉強はするんじゃない。必要になったらやれば良い」なんて書いてあったで、いつかやろう的に考えていたのですが、さっそく試す機会が訪れました。ちなみに著者はWindows95を世に送り出し、右クリックやDrag&Dropを普及させた人だそうです。著者の原点とも言える小学3年生の時のエピソードがなかなか印象的でした。著者のママが当たり前のことをちゃんと実践できる人なんだろうな、という印象。自分だったら宿題終わらなくても最終的に遊びにいかせてしまってるんだな(←ほんと、良くないよね。気づけてよかったけど、時すでに遅し。その後のことはお察しくださいまし〜)

脱線した・・

先週、ビットコインのセカンドレイヤーであるライトニングネットワークのノードをたてようハンズオンに参加する機会がありました。講習に参加するにはUbuntuがイイヨ!とのこと。Macの人は仮想環境とかDocker使ってね、とのこと。おぉ、これはぜひDockerで参加しなくては!

けっこうハマりどころがあったので、整理しました。

ちなみに参加してから知ったのですが、講師は

こちらを翻訳した有名人じゃったよ😳

Docker をインストール

以下のサイトからDocker for Mac をダウンロードしてきて、Macにインストールするよ。

Docker for Mac

クジラかわゆい。

 

 

Docker 起動

ターミナルを開いて以下のコマンドを打つのよ〜

$ docker run -it ubuntu bash

 

いきなり Ubuntu が起動してビビった。

以下のオプションは/bin/bashでコンテナーを操作する時に指定するんだって。

  • -i:コンテナーの標準入力を開く
  • -t:tty(端末デバイス)を確保

このUbuntu、vi や netstat などの基本的なコマンドが入っていない!

apt-get でサクサクインストールできるのですが、コンテナ停止していったん削除、イメージから再度起動すると全部消えてる!!

せっせと色々インストールしたのに・・

Dockerfileというシェルスクリプトやバッチファイルのようなものに、処理を記述してイメージを作成するといいらしい。

用語の解釈はざっくりいって

Docker C# とか Java
Dockerfile ソースコード
イメージ クラス
コンテナ インスタンス

な感じ?AWSのイメージとインスタンスに当てはめても良いかも。

Dockerfileは

  • Dockerfile作成→ビルドしてイメージ作成→コンテナ作成

だとデバックが大変らしいので

  • コンテナ内で作業→作業内容をメモっとく→メモの内容をDockefileに落とす

というのが効率良いようです。

とりあえず先ほど起動した Ubuntuはいったん exit で抜けましょう。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
0144f052dfe7        ubuntu              "bash"                   3 days ago          Up 3 days                                   naughty_bohr
$ docker rm 0144f052dfe7
0144f052dfe7
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        2 weeks ago         81.2MB
$ docker rmi 113a43faa138
113a43faa138
  • docker ps -a :コンテナの一覧を表示(docker psだと起動中のものを表示)
  • docker rm <CONTAINER ID>:コンテナ削除
  • docker images:イメージ一覧を表示
  • docker rmi <IMAGE ID>:イメージ削除

 

 再び docker run -it ubuntu /bin/bash

ユーザ設定からやってみるし・・

$ docker run -it ubuntu /bin/bash
root@78b3f440be59:/# adduser hoge    
Adding user `hope' ...
(省略)
root@78b3f440be59:/# gpasswd -a mikke sudo
Adding user home to group sudo
# ls /home
hoge
  • ユーザを追加「adduser」と「useradd(ホームディレクトリが作成されない)」があるから注意
  • sudo 権限をつけておく

いったんコミット

保存しませう。

root@78b3f440be59:/home# exit
exit
$ docker commit
"docker commit" requires at least 1 and at most 2 arguments.
See 'docker commit --help'.

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] [flags]

Create a new image from a container's changes
$ docker start 30b4623f9b64
$ docker exec -it 30b4623f9b64 /bin/bash
root@30b4623f9b64:/# ls /home
hoge
  • exit: Ubuntuからでる
  • docker commit:作業を保存

ちゃんとできてるかな・・?

  • docker start <CONTAINER ID>:コンテナ起動
  • docker exec -it <CONTAINER ID> /bin/bash:起動しているコンテナに入る

execじゃなくてattachというのでも入れるらしい。

こんな感んじで試しながら作業。

 

 lnd起動まで

adduserのユーザーでうまくいかなかったので、一からやりなおした・・

$ docker run -it ubuntu bash
# apt-get update
# apt-get install vim
  • apt-get update:apt-get そのままじゃ使えないので更新
  • apt-get install vim;viインスコ

 

Goをインストール

# apt-get install golang-1.10-go
# ln -s /usr/lib/go-1.10/bin/go /usr/local/bin/go
# export GOPATH=~/gocode
# export PATH=$PATH:$GOPATH/bin
# go version
go version go1.10.1 linux/amd64

go version go1.10.1 linux/amd64 と表示されればOK

 

 

git と lnd インストール

# apt-get install git
# go get -u github.com/golang/dep/cmd/dep ←少し時間かかります(反応なくて心配になる)
# go get -d github.com/lightningnetwork/lnd ←時間かかります
# cd $GOPATH/src/github.com/lightningnetwork/lnd
# git pull
# make && make install
  • go get -u github.com/golang/dep/cmd/dep
  • go get -d github.com/lightningnetwork/lnd

このふたつ、時間かかった。反応なくて固まってるのかと思った。

 

 

.lnd ディレクトリと lnd.conf の作成

# mkdir ~/.lnd && cd ~/.lnd
# cp $GOPATH/src/github.com/lightningnetwork/lnd/sample-lnd.conf ./lnd.conf
# vi lnd.conf

以下のように編集します。

bitcoin.simnet=1

;bitcoin.simnet=1;

externalip=

externalip=xxx.xx.xx.xx.:9735(自分のIP)

; noencryptwallet=1

noencryptwallet=1

;alias=My Lightning ?~X~G

alias=hoge

;bitcoin.testnet=1

bitcoin.testnet=1

bitcoin.node=btcd

bitcoin.node=neutrino

; bitcoin.defaultchanconfs=3

bitcoin.defaultchanconfs=1

; autopilot.active=1

autopilot.active=1

; noencryptwallet=1

noencryptwallet=1
保存してvi 閉じます。

 

 

lnd起動

# lnd &
[1] 10668
root@31f4879b5812:~/.lnd# 2018-06-24 00:21:19.544 [INF] LTND: Version 0.4.2-beta commit=18f17ad49b4cc58635a285e53441d82a0c54fd99
2018-06-24 00:21:19.547 [INF] LTND: Active chain: Bitcoin (network=testnet)
2018-06-24 00:21:19.576 [INF] CHDB: Checking for schema update: latest_version=1, db_version=1
2018-06-24 00:21:19.578 [INF] RPCS: Generating TLS certificates...
2018-06-24 00:21:19.613 [INF] RPCS: Done generating TLS certificates
:

動いてるっぽいです。
とめかたが分からなかったので、killしました。

 

あとがき

うまくできなくて、ひさびさに二日間徹夜した。。

これらの手順は、Dockerfileに記述しておくと良いかと思います。

任意の場所に任意のファイル名のDoclerfileを作成(拡張子も特に不要?)

以下のコマンドでビルドできます。

$ docker build -f ./df-ubuntu -t ubuntu:hoge --no-cache .
:
 ---> Running in a8d0cd222d24
Removing intermediate container a8d0cd222d24
 ---> f4cd7c78f157
Successfully built f4cd7c78f157
Successfully tagged ubuntu:hoge
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              hope               f4cd7c78f157        8 minutes ago       124MB
  • docker build -f <Dockerfileのパスとファイル名> -t ubuntu:<任意のtag名> --no-cache <ディレクトリ>

途中

debconf: delaying package configuration, since apt-utils is not installed

こんな警告みたいなのでてましたが、とりあえず放置。

$ docker run -it --name hoge ubuntu:hoge /bin/bash
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

hoge@fb120256f789:/$ pwd
/
hoge@fb120256f789:/$ ls /home
hoge
hoge@fb120256f789:/
  • docker run -it --name <任意のコンテナ名> ubuntu:<tag名> /bin/bash

Dockerfileの書き方は、あちこちのサイトに記載があるので検索してしてみてください。

 

ではでは


じぶんメモ

apt-get install net-tools

 

 

-note, ブロックチェーン