2020/10,江端さんの技術メモ

昨夜、らくがきのように綴った

Let’s encrypt を試してみた件(整理は明日)

を、まとめておきます。

昨日の実験で、Amazon lightsail でも、自前の公開暗号鍵(Let’s encrypt)を使えることが分かって、昨夜から気分の良い私です ―― これで、3.5ドル/月の、個人AWS練習用サーバの目処が立った。

どうも、私、"Let’s encrypt"を含めて、どうも私は公開暗号鍵の取扱いを、色々勘違いしていたようです。

たとえば、こちら、とか、こちら、で、AWSのロードバランサー(ELB: Amazon Elastic Load Balancing)に、"Let’s encrypt"で作った公開暗号鍵を関連付ける作業について記載しています。

しかし、AWSの供与をして頂いた部署が、IAMの設定を理解しておらず(もちろん、私も理解していませんでしたが)、 公開暗号鍵がロードバランサに紐付かずに、この時は、地獄を見ました

"Let’s encrypt"を使った認証鍵と暗号鍵を生成する時に、引数に、httpサーバの起動状態やら、鍵の置き場所などを指定するものだから、私は上位の認証局が、下々(私)の認証鍵と暗号鍵を見張っていると思っていました。

しかし、昨夜のGolandのコーディングで、認証鍵と暗号鍵は、有効期限付きのただのファイルである、ということを理解しました。

公開鍵証明書の認証局(CA: Certificate Authority)は、「下々のもの(私)に頼まれて、上位認証局(お上)が、鍵(ファイル)を作っているだけ」 ―― とりあえずは、この理解で十分であることが分かりました。

# というか ―― 巷(ちまた)の説明、難しすぎる。

まあ、それはさておき。

今回試みた、Let’s encryptでの鍵作りについて説明します(前提は、こちらを読んでおいて下さい)。

Let’s encryptでの鍵作りのパラメータは、省略することができるようです

$sudo certbot certonly --webroot -w /var/www/html -d sea-anemone.tech -d www.sea-anemone.tech

$sudo certbot certonly  -w /home/ubuntu/go_template/server_test -d sea-anemone.tech

  • "--webroot"は、webサーバの稼動している状況で扱う(しかもhttp://(×https://)が通らないとダメだめらしい)
  • "-w"以下は、golangのサーバを動かしている(サーバプログラムのある)ディレクトリを記載するらしい
  • "-d"以下は、SSLで使うドメイン名を入力("www.sea-anemone.tech"は、なんか知らんけど拒否された。理由は不明だけど、まあ、今は使っていないので無視する)

てな感じで、「とにかく鍵作ってくれ!」と頼むと、

How would you like to authenticate with the ACME CA? 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1: Spin up a temporary webserver(standalone)  (一時的なWebサーバを単独で起動する) 
2: Place files in webroot directory (webroot)ファイルを webroot ディレクトリに配置 する(webroot) 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

となっていて、少なくとも、nginxなどのwebサーバ上げていない状態だから、少くとも"2"ではなく、"1"でを押下したら、

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/sea-anemone.tech/privkey.pem

という場所に鍵を作ってくれた様子。

ところが、この鍵、普通のmoreやlessでは見えずに、sudo more などとしないと見えないし、privkey.pemについては、それすらも見えない、という慎重さです。

とにかく、golangのサーバを動かしている(サーバプログラムのある)ディレクトリにコピーしました。

ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem . 
ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/privkey.pem .

そんでもって、privkey.pemの権限が厳しいので、危ないけど >chmod +777 privkey.pem をやって、golangからアクセスして貰えるようにしておきました(権限のモードを忘れた)。こうしないと、go run serverXX.goをやると「privkey.pemが読めん」と文句を言われます。

で、serverXX.goの中を書き換え

/*
                log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
        */

        /*
        var httpErr error
        if _, err := os.Stat("./algo.crt"); err == nil {
                fmt.Println("file ", "algo.crt found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./algo.crt", "./algo.key", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }
        */

        var httpErr error
        if _, err := os.Stat("./fullchain.pem"); err == nil {
                fmt.Println("file ", "fullchain.pem found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./fullchain.pem", "./privkey.pem", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }

としたら、iPadで

https://sea-anemone.tech:8080
https://sea-anemone.tech:8080/smartphone

も、問題なく出力されるようになりました。

とりあえず、PruneMobileを雲の上に上げるメドが付き、ようやく一安心です。

 

2020/10,江端さんの技術メモ

ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo certbot certonly  -w /home/ubuntu/go_template/server_test -d sea-anemone.tech
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/sea-anemone.tech/privkey.pem
   Your cert will expire on 2021-01-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

--webroot などをガン無視。www.sea-anemone.tech が作れなかったけど、こっちも無視。

でもって、

ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem .
ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/privkey.pem .

を強行。

privkey.pemの権限が厳しいので、危ないけど >chmod +777 privkey.pem をやって、golangからアクセスして貰えるようにしておいた(権限のモードを忘れた)

で、serverXX.goの中を書き換え

/*
                log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
        */

        /*
        var httpErr error
        if _, err := os.Stat("./algo.crt"); err == nil {
                fmt.Println("file ", "algo.crt found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./algo.crt", "./algo.key", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }
        */

        var httpErr error
        if _, err := os.Stat("./fullchain.pem"); err == nil {
                fmt.Println("file ", "fullchain.pem found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./fullchain.pem", "./privkey.pem", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }

としたら、とりあえず

https://sea-anemone.tech:8080

で、iPadに地図が表示されるのは確認できた。

今日はここまで。

 

 

2020/10,江端さんの技術メモ

PruneMobile  を Amazon Lightsail に乗せています。

https://が上手く起動しなかったので、色々考えていました。

まず、serverXX.goを、

//var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // ローカルテスト
var addr = flag.String("addr", ":8080", "http service address") // AWS上で動かす時

と変更して、さらに、これまで使ってきた「オレオレ証明書」の内容に問題があると気がついて、mkcert を使って、AWS Lighsail対応に作り直してみました。

C:\Users\ebata\Downloads>mkcert-v1.4.1-windows-amd64.exe sea-anemone.tech 43.53.5.81 137.172.25.12 localhost 127.0.0.1
Using the local CA at "C:\Users\ebata\AppData\Local\mkcert" ✨

Created a new certificate valid for the following names 📜
 - "sea-anemone.tech"
 - "43.53.5.81"
 - "137.172.25.12"
 - "localhost"
 - "127.0.0.1"

The certificate is at "./sea-anemone.tech+4.pem" and the key at "./sea-anemone.tech+4-key.pem" ✅

で、"sea-anemone.tech+4.pem"を"algo.crt"と、"./sea-anemone.tech+4-key.pem" を"algo.key"とリネームして、serverXX.goの入っているディレクトリに放り込みました。

WindowsPCの方は、上手く表示できるのですが、iPhoneやiPadの方は、

ERROR:undefined
onclise:CLOSE

が表示されて、JavaScriptが走りません。

分からないのですが『さすがに、iPhoneは「オレオレ証明書」では騙せないのかな』などと考えています。

Amazonの証明書は無料なのですが、なぜかAmazonの証明書はロードバランサがないと使えず、そんでもってロードバランサは$18/monthも金を取られるんです。本体が$3.5/monthなのに、なんか理不尽です。

とすると、アレかなぁ・・・できるだけ手を出したくないんだけどなぁ。

ともあれ、今日は疲れましたので、終了です。

2020/10,江端さんの技術メモ

Amazon Web Service(AWS)の無料期間が経過していて、3~4回くらい、5000円/月の課金を喰らっていたことを知って、先日あわててアカウントを抹消しました。

# 練習用に使っていただけなに、バカみたいです。

ところで、私が今、個人のWebサイトで利用させて頂いているのは、さくらインターネットの月額500円の仮想サーバです。WordPressと併用できて、とても便利です。

ただ、以前、このサーバを使って実家監視システムを作ろうと思ったのですが、色々問題があって使えませんでした(ホームページ用の仮想サーバなんだから当り前)。

といって、AWSは、高額の上に設定が面倒。このクラウドに、どれだけの時間を持っていかれたことか

という訳で調べたら、Amazonにも3.5ドル/月のサーバがあることが分かりました。 Amazon Lightsail です。

うん、これ、いい。私は、サーバを攻撃から守る気もないし、システム破られて持ち出された情報なんぞ入れる気もない。EC2なんぞ1つあれば十分だし、DBはUbuntuの中に作りこんでしまえばいい。

そもそも、ファイアウォールとして使っているロードバランサの設定も、Route53の設定もやりたくありません。

という訳で忘れない内にAmazon Lightsail の作成手順をメモしておきます。

(1)AWSのアカウントを作成(省略)

(2)Amazon Lightsail を選んで、「インスタンスの作成」ボタンを押下

私は、Ubuntu20.04を選択

一番安い$3.5を選択

あとは、ほったらかしにして(入力値はデフォルト、タグは無視)「インスタンスの作成」ボタンを押下

で、「データベース」タブは無視して、「ネットワーキングタブ」を選択

「静的IPの作成」ボタンを押して、そのままIPアドレスを作る。ちなみに、pingでは応答しないようです。

次に「DNSゾーン」の作成ですが、私は、お名前.comに1つドメイン名を確保しているので、それを使うことにしました。

そのやり方については、これを参考にして下さい。

基本的には、この情報を、お名前.comの方に書き込むだけです。

DNSレコードは、Aレコードだけを設定すれば良いです(サブドメインを作りたい場合は別)。

結果として、こんな表示が出せれば正解

DNSの反映されるに、10分~20分ってところだったと思います。

それと、どこでやったか忘れてしまったけど、SSHアクセス用の秘密鍵をダウンロードするプロセスがでてくるので、それをダウンロードしておく。LightsailDefaultKey-ap-northeast-1.pem てな名前でした(ダウンロード後、リネームしておくと良いでしょう)。

それを使ってTeraTermで、カーネルにアクセスできるようになります。FTPもteratermから "ファイル" → "SSH SCP"を選ぶと、ファイル転送できます(FFFTPは使えません)

あとは、TeraTermでSSHログインして、こんなコマンド投入しておきました。

>sudo apt-get update
>sudo apt install net-tools
>sudo apt install emacs
>sudo apt install golang-go

ロードバランサを使うと$18/月も取られるようなので、OS剥き出しで運用することにしました。

ポートのオープンはこちらからできます。ローカルのテストで http://localhost:8080 とかを使っていましたので、以下のように8080をオープンしておきます。これで、http://sea-anemone:8080 とかが使えるようになります。

(因みに、IPアドレスはデタラメな値に差し替えています)

なお、go言語で作っているサーバの方ですが、以下のような書き換えだけで対応できるようです。

//var addr = flag.String("addr", "localhost:8080", "http service address") // これは動かない
//var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // ローカルでの環境
var addr = flag.String("addr", ":8080", "http service address") // AWS lightsailでの環境

お金がかかるので不満なのですが、システムが丸ごと壊れるのが怖いので、やっぱりスナップショットは1つ作っておくことにしました。

 

2020/10,江端さんの技術メモ

document.getElementById("open").onclick = function(evt) と、ws.onopen = function(evt) が、混乱して、上手く動かなかったけど、ようやく分かりました(ような気ががしています)。

■document.getElementById("open").onclick = function(evt) { 処理内容}は、
"open"ボタンを押した時に行う処理を行い、
■ws.onopen = function(evt){処理内容}は、
websocketのopenのイベントが飛んできた時に行う

つまり、"ボタン"と"websocket"という、全く別物を取り扱っている、ということに、やっと気がつきました ―― 同じ"open"という言葉を使うので、混同していました。

なので、

ws.close()処理は、当然に、document.getElementById("open").onclick = function(evt) { 処理内容} の中で実施しなけばなりません。

ws.onopen = function(evt){処理内容}は、すでにwebsocketのclose処理が行われた後の処理を記載するので、ここでws.close()を記載したら、変なことになります(二重にwebsocketのclose処理をすることになる)


 

それと、位置情報をコールバックで取得する関数を、
const successCallback = (position) => { 処理内容 }

エラーイベントを検知する関数を、
const errorCallback = (err) => { 処理内容 }
と記載した場合、

このコールバックを登録する関数は、
watchPositionID = navigator.geolocation.watchPosition(successCallback, errorCallback, options);
であり、

このコールバックを停止する関数は、navigator.geolocation.clearWatch(watchPositionID);

となります。

という訳で、server26.goの"smartphoneTemplate"で登録している、htmlファイル(javascriptを含む)の部分だけ切り出したものを記載しておきます。

var smartphoneTemplate = template.Must(template.New("").Parse(`
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script> 

let watchPositionID;  // グローバル変数として出しておく
let ws; // グローバル変数として出しておく

window.onload = () => {
	// これは、Web起動時に最初に読まれる部分であるが、今回、これらの関数は、全部
	// 	document.getElementById("open").onclick = function(evt) {  // openボタンを押した時 
	// 中に放り込んだ。 openボタンを押した後に起動するようにする為である

	// navigator.geolocation.watchPositionについては次のURLにかかれています。
	// https://developer.mozilla.org/ja/docs/Web/API/Geolocation/watchPosition

	// これが位置情報コールバックの起動コマンド
	//watchPositionID = navigator.geolocation.watchPosition(successCallback, errorCallback, options);

	// ここで(もう)webソケットを開く
	//ws = new WebSocket("{{.}}");

};

// ブラウザーを閉じる前に位置の監視を止めます
window.onbeforeunload = () => {
	// こちらの内容も
	// document.getElementById("close").onclick = function(evt) { // closeボタンを押した時
	// の中に放り込んだ  closeボタンを押した時に起動するようにする為である	

	// これが位置情報コールバック停止のコマンド	
	//navigator.geolocation.clearWatch(watchPositionID);
	
	//ws.close();
}


// 引数にはミリ秒を指定。(例:5秒の場合は5000)
function sleep(a){
	  var dt1 = new Date().getTime();
	  var dt2 = new Date().getTime();
	  while (dt2 < dt1 + a){
		dt2 = new Date().getTime();
	}
	  return;
}

// 以下の3つはグローバル変数として取り扱う
var personal_id =0;  
var lat;
var lng;  

//var ws;

// 位置情報を構造体として格納する為のファンクション(jsでは、こういう風に使うらしい)
function obj(id, lat, lng){
	this.id = id;
	this.lat = lat;
	this.lng = lng;
}

// 乱数生成装置 (minとmaxの間の乱数を作る)
function random(min, max){
	return  Math.random()*(max-min) + min;
}


window.addEventListener("load", function(evt) {
	// メッセージ表示部
    var output = document.getElementById("output");
    var input = document.getElementById("input");

    var print = function(message) {
        var d = document.createElement("div");
        d.textContent = message;
        output.appendChild(d);
	};

	///// 起動時のボタン設定(アクティブにしたり非アクティブにしたりする)
	// disabled属性を削除
	document.getElementById("open").removeAttribute("disabled");
	document.getElementById("open").style.color = "black";

	// disabled属性を設定 (closeボタンを非活性化)
	document.getElementById("close").setAttribute("disabled", true);
	document.getElementById("close").style.color = "White";			

	document.getElementById("open").onclick = function(evt) {  // openボタンを押した時
		console.log("document.getElementById open");

		// disabled属性を設定 (openボタンを非活性化)
		document.getElementById("open").setAttribute("disabled", true);
		document.getElementById("open").style.color = "White";		

		// disabled属性を削除(closeボタンを非活性化)
		document.getElementById("close").removeAttribute("disabled");
		document.getElementById("close").style.color = "black";	

        //if (ws) {
        //    return false;
        //}
	

		// ここでコールバック関数を起動
		watchPositionID = navigator.geolocation.watchPosition(successCallback, errorCallback, options);
		// websocket オープン
		ws = new WebSocket("{{.}}");
		// 最初はidを0にする
		personal_id = 0;   
			
		ws.onopen = function(evt) {  // 通信openイベントを検知した時(通信がopen状態になった後)
			print("OPEN");
		
			var send_obj = new obj(0, lat, lng);  // 最初はpersonal_idを"0"としてエントリ
	
			console.log("open:send_obj");	
			console.log(send_obj.id);	
			console.log(send_obj.lat);
			console.log(send_obj.lng);		
	
			var json_obj = JSON.stringify(send_obj);
			ws.send(json_obj);

		}

		ws.onclose = function(evt) {  // 通信closeイベント(×ボタン)を検知した時 (通信がclose状態になった後)
			print("onclose:CLOSE");
            ws = null;
        }

		ws.onmessage = function(evt) {  // 通信メッセージを受信した時(受信した後)
			print("RESPONSE: " + evt.data);  // jsonメッセージの内容を表示
			// データをJSON形式に変更
			var obj = JSON.parse(evt.data);

			personal_id = obj.id; // IDの取得(何回も取る必要はないが)
			console.log("personal_id");			
			console.log(personal_id);
			
			if ((Math.abs(obj.lat) > 90.0) || (Math.abs(obj.lng) > 180.0)){ // 異常な座標が入った場合は、マーカーを消去する
				console.log("before ws.close()");
				ws.close();
				console.log("after ws.close()");
			}
		}
		
        ws.onerror = function(evt) { //  エラーイベントを検知した時(検知した後)
            print("ERROR: " + evt.data);
        }
        return false;
    };
	
	document.getElementById("close").onclick = function(evt) { // closeボタンを押した時
		console.log(" document.getElementById close");

		// disabled属性を削除
		document.getElementById("open").removeAttribute("disabled");
		document.getElementById("open").style.color = "black";

		// disabled属性を設定 (closeボタンを非活性化)
		document.getElementById("close").setAttribute("disabled", true);
		document.getElementById("close").style.color = "White";	

        if (!ws) {
            return false;
		}
		
		var send_obj = new obj(personal_id, 999.9, 999.9); //  意図的に異常な位置情報を入れて正常終了させる処理

		console.log("close:send_obj");
		console.log(send_obj.id);		
		console.log(send_obj.lat);
		console.log(send_obj.lng);		

		var json_obj = JSON.stringify(send_obj);
		ws.send(json_obj);

		ws.close();  // これはws.closeの方で実施すると変なことになる  closeが実施された後で、close()することになる

		navigator.geolocation.clearWatch(watchPositionID); //コールバック関数の停止?

		personal_id = 0;   // 最後もidを0にする		
	
        return false;
    };
});

// 位置情報の取得に成功した際のコールバック

const successCallback = (position) => {
	console.log("successCallback:position");

	lat = position.coords.latitude;
	lng = position.coords.longitude;

	console.log(personal_id);
	console.log(lat);
	console.log(lng);

	//コールバックが発生するタイミングでサーバに位置情報を送付する

	if (personal_id != 0){
		var send_obj = new obj(personal_id, lat, lng);  // 最初は"0"でエントリ

		console.log("open:send_obj");	
		console.log(send_obj.id);	
		console.log(send_obj.lat);
		console.log(send_obj.lng);		

		var json_obj = JSON.stringify(send_obj);
		ws.send(json_obj);
	}

	// sleep(1000); // 1秒待つ	

}

// 位置情報の取得に失敗した際のコールバック
const errorCallback = (err) => {
	console.log(err);
};

// 位置を監視する構成オプション
// オプションの内容は次のリンクに書かれています。
// https://developer.mozilla.org/ja/docs/Web/API/PositionOptions
const options = {
	enableHighAccuracy: true,
	//timeout: 5000,
	timeout: 500000,
	maximumAge: 0
};

</script>
</head>
<body>
<table>
<tr><td valign="top" width="50%">
<p>Click "Open" to create a connection to the server, 
"Send" to send a message to the server and "Close" to close the connection. 
You can change the message and send multiple times.
<p>
<form>
<button id="open">Open</button>
<!-- <p><input id="input" type="text" value="Hello world!"> -->
<!-- <button id="send">Send</button> -->
<button id="close">Close</button>
</form>
</td><td valign="top" width="50%">
<div id="output"></div>
</td></tr></table>
</body>
</html>
`))

 


 

2020/10,江端さんの技術メモ

人間は、他人を他人として認識するのではなく、その他人の属する所属や地位、環境を含めて認識します。

Humans don't perceive others as others but others including their affiliations, status, and environments.

「部長の山田さん」「新人の田中さん」「技術者の佐藤さん」「ドイツ在住の高橋さん」等々です、

Mr. Yamada, the department head, Ms. Tanaka, the new guy, Mr. Sato, the technician, Ms. Takahashi, who lives in Germany, and so on.

特に初対面の場合は、そうなるのは仕方がありません。

Especially in the case of the first meeting, it can not be helped.

その時の私たちは、他人を評価する情報を全く持っていないからです。

At that time, we have no information to evaluate others.

-----

ただ、「名物研究員の江端さん」というフレーズには、所属、地位、環境を含んでいません。

However, the phrase "Mr. Ebata, a famous researcher" does not include affiliation, position, or environment.

そこには、敬意とも蔑視とも解釈可能な「形容句」が入っているだけです。

It only contains "adjectives" that can be interpreted as both respect and contempt.

先日も、メールの中にこのフレーズを見つけて、『なるほど、私は"名物研究員"なんだ』と認識しました。

The other day, I found this phrase in an email and realized that "I see, I'm a famous researcher".

-----

「こちらが、同じ部署の江端です」という同僚の紹介で、先方の方と名刺交換をしている時に、

When I was exchanging business cards with the other person, I was introduced by a colleague who said, "This is Ebata from the same department."

『ああ、こちらが、あの江端さん・・・、お噂はかねがね伺っております』

"Oh, You are Mr. Ebata... I've heard a lot of great things about you."

というコメントを頂きました。

I got the comment.

-----

―― "ソースは誰?"

"Who is the source ?"

―― "どんな噂?"

"What kind of great things ?"

と、突っ込みたくなっても、苦笑いしながら、それを、グっと我慢するのが、

Even if I want to dig in, I have to put up with it with a bitter smile.

「大人の社会人」というものです。

This is an "adult business people"

2020/10,江端さんの技術メモ

木材から円形(円盤)を切り出すことが必要となり、色々試しています。

このような、電動ドライバーに装着できる、木材用の円切りサークルカッターを使っていました。

しかし、これで作業すると、直径20cmの円を切り出すのに、(慣れてきても)10分以上はかかるので、非常に効率が悪く、恐しく疲労します。

そこで、今回、BOSCH(ボッシュ)の電動ノコギリを使って木板を円形に切ることのできる、BOSCHのジグソー円曲平行ガイドを購入しました(別の会社の電動ノコギリの場合、その会社が提供しているものを購入する方が安全です)

先程、自宅に届いたので、さっそく、自分のメモとしてジグソー円曲平行ガイドを、袋から取り出すところから、切り出すまでの全行程を撮影しました。

 

映像の中では、キレイな円形の切出しに失敗していますが、これは中心線をズラさないようにすれば、必ず成功しますので御安心下さい。

サークルカッターと比較して、もの凄くラクチンに円盤を切り出せました。

電動ノコギリとジグソー円曲平行ガイドを接合した状態の写真↓

接合部分の拡大写真↓

以上

2020/10,江端さんの技術メモ

スマホから位置情報を取得するところまできたが、https(wss)対応にしないと位置情報が取り出せないようです(かなりしつこく聞いていましたが、すっかり忘れていました)。

で、今のGolangのサーバプログラムをhttps対応にすべく、色々試したのですが、なんかこれで動いているようなので、要点だけ記載します。

Step.1 

まず、

C:\Users\ebata\WssSample\goClient>go run goClient.go conn.go hub.go tls: first record does not look like a TLS handshake がなんともならない件

の、mkcertを使って生成した鍵(“algo.key"と"algo.crt")をディレクトリに放り込む

Step.2

serverXX.goの、サーバ作成部を以下のように変更する

/*
		log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
	*/

	var httpErr error
	if _, err := os.Stat("./algo.crt"); err == nil {
		fmt.Println("file ", "algo.crt found switching to https")
		if httpErr = http.ListenAndServeTLS(*addr, "algo.crt", "algo.key", nil); httpErr != nil {
			log.Fatal("The process exited with https error: ", httpErr.Error())
		}
	} else {
		httpErr = http.ListenAndServe(*addr, nil)
		if httpErr != nil {
			log.Fatal("The process exited with http error: ", httpErr.Error())
		}
	}

Step.3

htmlファイルの、"http://"を、片っ端から"https://"に書き換える。

さくっと動いて気持ち悪いのですけど、まあ動くのであれば、なんでも良いです。

 

2020/10,江端さんの技術メモ

スマホから使えるようにした(今は、ランダムウォークだけ)。

/*
// server22.go ペアはclient9.go

// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build ignore

// 使い方
// go run server13.go      (適当なシェルから)
// http://localhost:8080  (ブラウザ起動)
// http://localhost:8080/smartphone (スマホ起動)
*/

package main

import (
	"flag"
	"fmt"
	"html/template"
	"log"
	"net/http"
	"sync"

	"github.com/gorilla/websocket"
)

// GetLoc GetLoc
type GetLoc struct {
	ID  int     `json:"id"`
	Lat float64 `json:"lat"`
	Lng float64 `json:"lng"`
	//Address string  `json:"address"`
}

//var addr = flag.String("addr", "localhost:8080", "http service address")
var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // テスト

var upgrader = websocket.Upgrader{} // use default options

var chan2_1 = make(chan GetLoc)

var maxid = 0

var mutex sync.Mutex

func echo2(w http.ResponseWriter, r *http.Request) {
	c, err := upgrader.Upgrade(w, r, nil) // cはサーバのコネクション
	if err != nil {
		log.Print("upgrade:", err)
		return
	}
	defer c.Close()

	//mutex := new(sync.Mutex)

	for {
		//mt, message, err := c.ReadMessage() // クライアントからのメッセージの受信(mtはクライアント識別子)
		//_, _, err := c.ReadMessage() // クライアントからのメッセージの受信(mtはクライアント識別子)

		//mutex.Lock()  // ここに置くとデッドロックしてしまう

		gl := new(GetLoc)

		err := c.ReadJSON(&gl) // クライアントからのメッセージの受信

		mutex.Lock()

		// 原因不明の対処処理
		if gl.ID == 0 && gl.Lat < 0.01 && gl.Lng < 0.01 {
			mutex.Unlock()
			break
		} else if gl.ID < -1 { // 受理できないメッセージとして返信する
			//条件分岐 (変なIDが付与されているメッセージは潰す)
			//if (gl.ID > maxid) || (gl.ID < -1) { // 受理できないメッセージとして返信する

			gl.ID = -1
			gl.Lat = -999
			gl.Lng = -999
			err2 := c.WriteJSON(gl)
			if err2 != nil {
				log.Println("write1:", err2)
				mutex.Unlock()
				break
			}
		} else { // それ以外は転送する
			log.Printf("echo2 after c.WriteJSON(gl) ID:%d", gl.ID)
			log.Printf("echo2 after c.WriteJSON(gl) Lat:%f", gl.Lat)
			log.Printf("echo2 after c.WriteJSON(gl) Lng:%f", gl.Lng)

			if err != nil {
				log.Println("read:", err)
				mutex.Unlock()
				break
			}
			fmt.Printf("echo2 before chan2_1 <- *gl\n")
			chan2_1 <- *gl
			fmt.Printf("echo2 after chan2_1 <- *gl\n")

			//で、ここで受けとる
			//gl2 := new(GetLoc)
			fmt.Printf("echo2 before gl2 := <-chan2_1\n")
			gl2 := <-chan2_1
			maxid = gl2.ID // ID最大値の更新
			log.Printf("echo2 after gl2 := <-chan2_1 ID:%d", gl2.ID)
			log.Printf("echo2 after gl2 := <-chan2_1 Lat:%f", gl2.Lat)
			log.Printf("echo2 after gl2 := <-chan2_1 Lng:%f", gl2.Lng)

			fmt.Printf("echo2 before err2 := c.WriteJSON(gl2)\n")
			err2 := c.WriteJSON(gl2)
			fmt.Printf("echo2 after err2 := c.WriteJSON(gl2)\n")
			if err2 != nil {
				log.Println("write2:", err2)
				mutex.Unlock()
				break
			}
			fmt.Printf("end of echo2\n")

		}

		mutex.Unlock()
	}
}

func echo(w http.ResponseWriter, r *http.Request) {

	c, err := upgrader.Upgrade(w, r, nil) // cはサーバのコネクション
	if err != nil {
		log.Print("upgrade:", err)
		return
	}
	defer c.Close()

	/*	ここでロックして待つ */

	for {

		fmt.Printf("echo before gl := <-chan2_1\n")
		gl := <-chan2_1
		fmt.Printf("echo after gl := <-chan2_1\n")

		fmt.Printf("echo before err = c.WriteJSON(gl) gl2.id = %d\n", gl.ID)
		fmt.Printf("echo before err = c.WriteJSON(gl) gl2.lat = %f\n", gl.Lat)
		fmt.Printf("echo before err = c.WriteJSON(gl) gl2.lng= %f\n", gl.Lng)
		err = c.WriteJSON(gl)
		if err != nil {
			log.Println("WriteJSON1:", err)
		}
		fmt.Printf("echo after err = c.WriteJSON(gl)\n")

		fmt.Printf("echo before err = c.RreadJSON(gl)\n")
		gl2 := new(GetLoc)
		err2 := c.ReadJSON(&gl2)
		fmt.Printf("echo after err = c.ReadJSON(&gl2) gl2.id = %d\n", gl2.ID)
		fmt.Printf("echo after err = c.ReadJSON(&gl2) gl2.lat = %f\n", gl2.Lat)
		fmt.Printf("echo after err = c.ReadJSON(&gl2) gl2.lng= %f\n", gl2.Lng)
		if err2 != nil {
			log.Println("ReadJSON:", err2)
		}
		// ここからチャネルで返す
		fmt.Printf("echo before chan2_1 <- *gl2 gl2.id = %d\n", gl2.ID)
		fmt.Printf("echo before chan2_1 <- *gl2 gl2.lat = %f\n", gl2.Lat)
		fmt.Printf("echo before chan2_1 <- *gl2 gl2.lng = %f\n", gl2.Lng)
		chan2_1 <- *gl2
		fmt.Printf("echo after chan2_1 <- *gl2\n")
		fmt.Printf("end of echo\n")
	}

}

func home(w http.ResponseWriter, r *http.Request) {
	homeTemplate.Execute(w, "ws://"+r.Host+"/echo")
}

func smartphone(w http.ResponseWriter, r *http.Request) {
	smartphoneTemplate.Execute(w, "ws://"+r.Host+"/echo2")
}

func main() {
	flag.Parse()
	log.SetFlags(0)

	http.HandleFunc("/echo2", echo2)           // echo関数を登録 (サーバとして必要)
	http.HandleFunc("/echo", echo)             // echo関数を登録 (サーバとして必要)
	http.HandleFunc("/", home)                 // home関数を登録
	http.HandleFunc("/smartphone", smartphone) // smartphone関数を登録
	log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
}

var smartphoneTemplate = template.Must(template.New("").Parse(`
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script> 

function obj(id, lat, lng){
	this.id = id;
	this.lat = lat;
	this.lng = lng;
}

function random(min, max){
	return  Math.random()*(max-min) + min;
}

// var personal_id;

var lat = 35.654543;
var lng = 139.795534;  

window.addEventListener("load", function(evt) {
    var output = document.getElementById("output");
    var input = document.getElementById("input");
    var ws;
    var print = function(message) {
        var d = document.createElement("div");
        d.textContent = message;
        output.appendChild(d);
	};

	var personal_id = 0;

	
	///// 起動時のボタン
	// disabled属性を削除
	document.getElementById("open").removeAttribute("disabled");
	document.getElementById("open").style.color = "black";

	// disabled属性を設定 (closeボタンを非活性化)
	document.getElementById("close").setAttribute("disabled", true);
	document.getElementById("close").style.color = "White";	

	// disabled属性を設定 (sendボタンを非活性化)
	document.getElementById("send").setAttribute("disabled", true);
	document.getElementById("send").style.color = "White";	


		
	document.getElementById("open").onclick = function(evt) {
		console.log("document.getElementById open");

		// disabled属性を設定 (openボタンを非活性化)
		document.getElementById("open").setAttribute("disabled", true);
		document.getElementById("open").style.color = "White";		

		// disabled属性を削除
		document.getElementById("send").removeAttribute("disabled");
		document.getElementById("send").style.color = "black";	

		// disabled属性を削除
		document.getElementById("close").removeAttribute("disabled");
		document.getElementById("close").style.color = "black";	

		////////// 削除2
		// ws = new WebSocket("{{.}}");
		////////// 削除2終り


		////////// 削除1
		//var send_obj = new obj(0, 35.654543,139.795534);  // 最初は"0"でエントリ

		//console.log("open:send_obj");	
		//console.log(send_obj.id);	
		//console.log(send_obj.lat);
		//console.log(send_obj.lng);		

		//var json_obj = JSON.stringify(send_obj);
		//ws.send(json_obj);
		/////////// 削除1終り


        if (ws) {
            return false;
        }
		
		
		////////// 追加2
		ws = new WebSocket("{{.}}");
		////////// 追加2終り

		
        ws.onopen = function(evt) {
			print("OPEN");
		
			//ws = new WebSocket("{{.}}");
			
			////////// 追加1			
			var send_obj = new obj(0, 35.654543,139.795534);  // 最初は"0"でエントリ

			console.log("open:send_obj");	
			console.log(send_obj.id);	
			console.log(send_obj.lat);
			console.log(send_obj.lng);		

			var json_obj = JSON.stringify(send_obj);
			ws.send(json_obj);
			/////////// 追加1終り

		}
		
        ws.onclose = function(evt) {

			print("CLOSE");
            ws = null;
        }

		ws.onmessage = function(evt) {  // 受信したメッセージはここに飛んでくる
			print("RESPONSE: " + evt.data);  // jsonメッセージの内容を表示
			// データをJSON形式に変更
			var obj = JSON.parse(evt.data);

			personal_id = obj.id; // IDの取得(何回も取る必要はないが)
			console.log("personal_id");			
			console.log(personal_id);

			
			if ((Math.abs(obj.lat) > 90.0) || (Math.abs(obj.lng) > 180.0)){ // 異常な座標が入った場合は、マーカーを消去する
				console.log("before ws.close()");
				ws.close();
				console.log("after ws.close()");
			}
		}
		
        ws.onerror = function(evt) {
            print("ERROR: " + evt.data);
        }
        return false;
    };
	
	document.getElementById("send").onclick = function(evt) {

		console.log("document.getElementById send");

		// disabled属性を設定 (openボタンを非活性化)
		document.getElementById("open").setAttribute("disabled", true);
		document.getElementById("open").style.color = "White";	
	
		// disabled属性を削除
		document.getElementById("send").removeAttribute("disabled");
		document.getElementById("send").style.color = "black";	

		// disabled属性を削除
		document.getElementById("close").removeAttribute("disabled");
		document.getElementById("close").style.color = "black";	
	
		if (!ws) {
			console.log("return false send");
			return false;			
		}

		lat += random(0.5, -0.5) * 0.00001 * 10 * 5;
		lng += random(0.5, -0.5) * 0.00002 * 10 * 5

		
		//var send_obj = new obj(personal_id, 35.654543,139.795534);  // idでエントリ
		var send_obj = new obj(personal_id, lat, lng);  // idでエントリ

		console.log("send:send_obj");	
		console.log(send_obj.id);	
		console.log(send_obj.lat);
		console.log(send_obj.lng);		

		var json_obj = JSON.stringify(send_obj);
		ws.send(json_obj);		

		/*
        print("SEND: " + input.value);
        ws.send(input.value);
		return false;
		*/

		return false;	
    };

	document.getElementById("close").onclick = function(evt) {
		console.log(" document.getElementById close");

		// disabled属性を削除
		document.getElementById("open").removeAttribute("disabled");
		document.getElementById("open").style.color = "black";

		// disabled属性を設定 (closeボタンを非活性化)
		document.getElementById("close").setAttribute("disabled", true);
		document.getElementById("close").style.color = "White";	

		// disabled属性を設定 (sendボタンを非活性化)
		document.getElementById("send").setAttribute("disabled", true);
		document.getElementById("send").style.color = "White";			


        if (!ws) {
            return false;
		}
	
		var send_obj = new obj(personal_id, 999.9, 999.9);  // 最初は"0"でエントリ

		console.log("close:send_obj");
		console.log(send_obj.id);		
		console.log(send_obj.lat);
		console.log(send_obj.lng);		

		var json_obj = JSON.stringify(send_obj);
		ws.send(json_obj);

        //ws.close();  // これはws.onmessageの方で実施
        return false;
    };
});
</script>
</head>
<body>
<table>
<tr><td valign="top" width="50%">
<p>Click "Open" to create a connection to the server, 
"Send" to send a message to the server and "Close" to close the connection. 
You can change the message and send multiple times.
<p>
<form>
<button id="open">Open</button>
<!-- <p><input id="input" type="text" value="Hello world!"> -->
<button id="send">Send</button>
<button id="close">Close</button>
</form>
</td><td valign="top" width="50%">
<div id="output"></div>
</td></tr></table>
</body>
</html>
`))

var homeTemplate = template.Must(template.New("").Parse(`
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>PruneMobile</title>

	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2.rc.2/leaflet.css"/>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2.rc.2/leaflet.js"></script>

	<script src="http://kobore.net/PruneCluster.js"></script>           <!-- これ、いずれローカルホストから取れるように換える -->
	<link rel="stylesheet" href="http://kobore.net/examples.css"/>      <!-- これも、いずれローカルホストから取れるように換える -->

	<!-- goのテンプレートのローカルって、どこになるんだろう? -->

</head>
<body>
<div id="map"></div>

<script>

	ws = new WebSocket("{{.}}"); // websocketの確立

	/*
	var print = function(message) {
		var d = document.createElement("div");
		d.textContent = message;
		output.appendChild(d);
	};
	*/

	// 引数にはミリ秒を指定。(例:5秒の場合は5000)
	function sleep(a){
  		var dt1 = new Date().getTime();
  		var dt2 = new Date().getTime();
  		while (dt2 < dt1 + a){
			dt2 = new Date().getTime();
		}
  		return;
	}

    var map = L.map("map", {
        attributionControl: false,
        zoomControl: false
    }).setView(new L.LatLng(35.654543, 139.795534), 18);
    // }).setView(new L.LatLng(35.598563, 139.475528), 18); 広袴

    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        detectRetina: true,
        maxNativeZoom: 18
    }).addTo(map);

    var leafletView = new PruneClusterForLeaflet(1,1);  // (120,20)がデフォルト

	ws.onopen = function (event) {
	}

	var markers = [];

	//var helicopterIcon = L.icon({ iconUrl: 'http://sintef-9012.github.io/PruneCluster/examples/helicopter.png', iconSize: [48, 48] });
    //var airplaneIcon = L.icon({ iconUrl: 'http://sintef-9012.github.io/PruneCluster/examples/airplane.png', iconSize: [48, 48] });

	// 受信すると、勝手にここに飛んでくる
	ws.onmessage = function (event) {
		// データをJSON形式に変更
		var obj = JSON.parse(event.data);

		console.log("233");	
		console.log(obj.id);
		console.log(obj.lat);						
		console.log(obj.lng);	

		if (obj.id == 0){  // idが未登録の場合
			console.log("obj.id == 0")
			// データをマーカーとして登録
			var marker = new PruneCluster.Marker(obj.lat, obj.lng);

			// 参考資料  http://embed.plnkr.co/WmtpkEqSDJFuFeuiYP54/
			//var marker = new PruneCluster.Marker(obj.lat, obj.lng, {
			//	//popup: "Bell 206 " + i,
			//	icon: helicopterIcon
			//});


			console.log(marker.hashCode);		
			markers.push(marker);
	
			leafletView.RegisterMarker(marker);
	
			console.log(markers);
			console.log(markers.length)

			obj.id = marker.hashCode;
			//ws.send(marker.hashCode); // テキスト送信
			var json_obj = JSON.stringify(obj);
			ws.send(json_obj);			
		} else if ((Math.abs(obj.lat) > 90.0) || (Math.abs(obj.lng) > 180.0)){ // 異常な座標が入った場合は、マーカーを消去する
			console.log("Math.abs(obj.lat) > 180.0)")
			for (let i = 0; i < markers.length; ++i) {
				if (obj.id == markers[i].hashCode){
					console.log(i)
					console.log(obj.id)										
					console.log("obj.id == markers[i].hashCode")

					//leafletView.RemoveMarkers(markers[obj.id]);  // これでは消えてくれません
					// 1つのマーカーを消すのに、面倒でも以下の2行が必要
					var deleteList = markers.splice(i, 1);					
					leafletView.RemoveMarkers(deleteList);

					// 以下失敗例リスト
					//leafletView.RemoveMarkers(markers[i].hashCode);  //これはダメ
					//leafletView.RemoveMarkers(markers[obj.id],'item');
					//leafletView.ProcessView(); // 試しに入れてみる
					//leafletView.RemoveMarkers(markers[i-1]);
					//leafletView.RemoveMarkers(markers);					
					break;
				}
			}
			obj.lat = 91.0;
			obj.lng = 181.0;
			var json_obj = JSON.stringify(obj);
			ws.send(json_obj);				
		} else {
			// 位置情報更新
			console.log("else")
			for (let i = 0; i < markers.length; ++i) {
				if (obj.id == markers[i].hashCode){
					var ll = markers[i].position;
					ll.lat = obj.lat;
					ll.lng = obj.lng;
					break;
				}
			}
			var json_obj = JSON.stringify(obj);
			ws.send(json_obj);	
		}
	}

	// 位置情報の更新
    window.setInterval(function () {
        leafletView.ProcessView();  // 変更が行われたときに呼び出されれなければならない
	}, 1000);

	// サーバを止めると、ここに飛んでくる
	ws.onclose = function(event) {
		//print("CLOSE");
		ws = null;
	}


    map.addLayer(leafletView);
</script>



</body>
</html>
`))

2020/10,江端さんの技術メモ

のページをそのまま(ではない)実行

その他の参考メモ

「ブロックチェーン・プログラミング」を読む (bitcoinツールの導入)

Bitcoin Coreを触りながらBitcoinについて理解する - その1(構築~アドレス生成まで)

Bitcoin Bitcoin Core RPC command practice

Dockerをはじめからていねいに?インストールとcentos起動・停止?

C:\Users\ebata\bitcoin>docker-compose build
daemon_two uses an image, skipping
daemon_three uses an image, skipping
Building daemon_one

Traceback (most recent call last):
  File "compose\cli\main.py", line 67, in main
  File "compose\cli\main.py", line 126, in perform_command
  File "compose\cli\main.py", line 302, in build
  File "compose\project.py", line 468, in build
  File "compose\project.py", line 450, in build_service
  File "compose\service.py", line 1147, in build
compose.service.BuildError: (<Service: daemon_one>, {'message': 'Cannot locate specified Dockerfile: Dockerfile'})

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "docker-compose", line 3, in <module>
  File "compose\cli\main.py", line 78, in main
TypeError: can only concatenate str (not "dict") to str
[2852] Failed to execute script docker-compose

C:\Users\ebata\bitcoin>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は C8D7-CF4A です

 C:\Users\ebata\bitcoin のディレクトリ

2020/10/17  15:28    <DIR>          .
2020/10/17  15:28    <DIR>          ..
2020/10/17  15:28               581 docker-compose.yml
2020/10/17  15:26               436 Dockerfile.txt
               2 個のファイル               1,017 バイト
               2 個のディレクトリ  359,417,462,784 バイトの空き領域

version: "2"
services:
  daemon_one:
    build: "./"
    image: "bitcoind:regtest"
    container_name: 'bitcoin_1'
    hostname: 'bitcoin_1'
    environment:
      - LINE=50
      - COLUMNS=120
    tty: true
    stdin_open: true
    links:
      - daemon_two
      - daemon_three
  daemon_two:
    image: "bitcoind:regtest"
    container_name: 'bitcoin_2'
    hostname: 'bitcoin_2'
    tty: true
    stdin_open: true
  daemon_three:
    image: "bitcoind:regtest"
    container_name: 'bitcoin_3'
    hostname: 'bitcoin_3'
    tty: true
    stdin_open: true
FROM ubuntu:16.04
RUN apt-get update -y && apt-get upgrade -y
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:luke-jr/bitcoincore
RUN apt-get update -y
RUN apt-get install -y bitcoind
RUN mkdir ~/.bitcoin
RUN echo "rpcuser=test\nrpcpassword=test\nregtest=1" > ~/.bitcoin/bitcoin.conf
RUN apt-get install iputils-ping net-tools vim -y
CMD ["/bin/bash"]


C:\Users\ebata\bitcoin>mv Dockerfile.txt Dockerfile 
C:\Users\ebata\bitcoin>ls Dockerfile docker-compose.yml 
C:\Users\ebata\bitcoin>docker-compose build daemon_two uses an image, skipping daemon_three uses an image, skipping Building daemon_one 
Step 1/11 : FROM ubuntu:16.04 16.04: Pulling from library/ubuntu 4f53fa4d2cf0: Pull complete 6af7c939e38e: Pull complete 903d0ffd64f6: Pull complete 04feeed388b7: Pull complete Digest: sha256:185fec2d6dbe9165f35e4a1136b4cf09363b328d4f850695393ca191aa1475fd Status: Downloaded newer image for ubuntu:16.04 ---> 096efd74bb89 
Step 2/11 : RUN apt-get update -y && apt-get upgrade -y ---> Running in 3d458b9249b5 
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] 
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] 
Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [1835 kB] 
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] 
Get:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB] 
Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] 
Get:7 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [15.9 kB] 
Get:8 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] 
Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [951 kB] 
Get:10 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] 
Get:11 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [9249 B] 
Get:12 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB] 
Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [2350 kB] 
Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [16.4 kB] 
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [1496 kB] 
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [26.7 kB] 
Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [10.9 kB] 
Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [12.6 kB] 
Fetched 18.9 MB in 1min 1s (305 kB/s) Reading package lists... 
Reading package lists... 
Building dependency tree... 
Reading state information... 
Calculating upgrade... 
The following packages will be upgraded: libpam-modules libpam-modules-bin libpam-runtime libpam0g 4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 375 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpam0g amd64 1.1.8-3.2ubuntu2.3 [55.7 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpam-modules-bin amd64 1.1.8-3.2ubuntu2.3 [36.9 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpam-modules amd64 1.1.8-3.2ubuntu2.3 [244 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpam-runtime all 1.1.8-3.2ubuntu2.3 [37.8 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 375 kB in 2s (160 kB/s) (Reading database ... 4780 files and directories currently installed.) Preparing to unpack .../libpam0g_1.1.8-3.2ubuntu2.3_amd64.deb ... Unpacking libpam0g:amd64 (1.1.8-3.2ubuntu2.3) over (1.1.8-3.2ubuntu2.1) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Setting up libpam0g:amd64 (1.1.8-3.2ubuntu2.3) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Processing triggers for libc-bin (2.23-0ubuntu11.2) ... (Reading database ... 4780 files and directories currently installed.) Preparing to unpack .../libpam-modules-bin_1.1.8-3.2ubuntu2.3_amd64.deb ... Unpacking libpam-modules-bin (1.1.8-3.2ubuntu2.3) over (1.1.8-3.2ubuntu2.1) ... Setting up libpam-modules-bin (1.1.8-3.2ubuntu2.3) ... (Reading database ... 4780 files and directories currently installed.) Preparing to unpack .../libpam-modules_1.1.8-3.2ubuntu2.3_amd64.deb ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Unpacking libpam-modules:amd64 (1.1.8-3.2ubuntu2.3) over (1.1.8-3.2ubuntu2.1) ... Setting up libpam-modules:amd64 (1.1.8-3.2ubuntu2.3) ... (Reading database ... 4780 files and directories currently installed.) Preparing to unpack .../libpam-runtime_1.1.8-3.2ubuntu2.3_all.deb ... Unpacking libpam-runtime (1.1.8-3.2ubuntu2.3) over (1.1.8-3.2ubuntu2.1) ... Setting up libpam-runtime (1.1.8-3.2ubuntu2.3) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Removing intermediate container 3d458b9249b5 ---> f00188bd821c Step 3/11 : RUN apt-get install -y python-software-properties ---> Running in b4f5db0d4277 Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: ca-certificates cron dbus dh-python distro-info-data file gir1.2-glib-2.0 iso-codes krb5-locales libapt-inst2.0 libasn1-8-heimdal libcap-ng0 libcurl3-gnutls libdbus-1-3 libdbus-glib-1-2 libexpat1 libffi6 libgirepository-1.0-1 libglib2.0-0 libglib2.0-data libgmp10 libgnutls30 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libidn11 libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libmagic1 libmpdec2 libnettle6 libp11-kit0 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libpython3-stdlib libpython3.5-minimal libpython3.5-stdlib libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl1.0.0 libtasn1-6 libwind0-heimdal libxml2 lsb-release mime-support openssl powermgmt-base python python-apt python-apt-common python-minimal python-pycurl python2.7 python2.7-minimal python3 python3-apt python3-dbus python3-gi python3-minimal python3.5 python3.5-minimal sgml-base shared-mime-info ucf unattended-upgrades xdg-user-dirs xml-core xz-utils Suggested packages: anacron logrotate checksecurity exim4 | postfix | mail-transport-agent dbus-user-session | dbus-x11 libdpkg-perl isoquery gnutls-bin krb5-doc krb5-user libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal lsb python-doc python-tk python-apt-dbg python-apt-doc libcurl4-gnutls-dev python-pycurl-dbg python-pycurl-doc python2.7-doc binutils binfmt-support python3-doc python3-tk python3-venv python3-apt-dbg python-dbus-doc python3-dbus-dbg python3.5-venv python3.5-doc sgml-base-doc bsd-mailx default-mta | mail-transport-agent needrestart debhelper The following NEW packages will be installed: ca-certificates cron dbus dh-python distro-info-data file gir1.2-glib-2.0 iso-codes krb5-locales libapt-inst2.0 libasn1-8-heimdal libcap-ng0 libcurl3-gnutls libdbus-1-3 libdbus-glib-1-2 libexpat1 libffi6 libgirepository-1.0-1 libglib2.0-0 libglib2.0-data libgmp10 libgnutls30 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libidn11 libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libmagic1 libmpdec2 libnettle6 libp11-kit0 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libpython3-stdlib libpython3.5-minimal libpython3.5-stdlib libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl1.0.0 libtasn1-6 libwind0-heimdal libxml2 lsb-release mime-support openssl powermgmt-base python python-apt python-apt-common python-minimal python-pycurl python-software-properties python2.7 python2.7-minimal python3 python3-apt python3-dbus python3-gi python3-minimal python3.5 python3.5-minimal sgml-base shared-mime-info ucf unattended-upgrades xdg-user-dirs xml-core xz-utils 0 upgraded, 83 newly installed, 0 to remove and 0 not upgraded. Need to get 27.9 MB of archives. After this operation, 128 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 cron amd64 3.0pl1-128ubuntu2 [68.4 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.17 [1082 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-minimal amd64 3.5.2-2ubuntu0~16.04.12 [524 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libexpat1 amd64 2.1.0-7ubuntu0.16.04.5 [71.5 kB] Get:5 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python3.5-minimal amd64 3.5.2-2ubuntu0~16.04.12 [1598 kB] Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3-minimal amd64 3.5.1-3 [23.3 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/main amd64 mime-support all 3.59ubuntu1 [31.0 kB] Get:8 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmpdec2 amd64 2.4.2-1 [82.6 kB] Get:9 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libsqlite3-0 amd64 3.11.0-1ubuntu1.5 [398 kB] Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-stdlib amd64 3.5.2-2ubuntu0~16.04.12 [2131 kB] Get:11 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python3.5 amd64 3.5.2-2ubuntu0~16.04.12 [165 kB] Get:12 http://archive.ubuntu.com/ubuntu xenial/main amd64 libpython3-stdlib amd64 3.5.1-3 [6818 B] Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 dh-python all 2.20151103ubuntu1.2 [73.9 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3 amd64 3.5.1-3 [8710 B] Get:15 http://archive.ubuntu.com/ubuntu xenial/main amd64 libffi6 amd64 3.2.1-4 [17.8 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libglib2.0-0 amd64 2.48.2-0ubuntu4.6 [1120 kB] Get:17 http://archive.ubuntu.com/ubuntu xenial/main amd64 sgml-base all 1.26+nmu4ubuntu1 [12.5 kB] Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-minimal amd64 2.7.12-1ubuntu0~16.04.13 [337 kB] Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python2.7-minimal amd64 2.7.12-1ubuntu0~16.04.13 [1259 kB] Get:20 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-minimal amd64 2.7.12-1~16.04 [28.1 kB] Get:21 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-stdlib amd64 2.7.12-1ubuntu0~16.04.13 [1886 kB] Get:22 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python2.7 amd64 2.7.12-1ubuntu0~16.04.13 [224 kB] Get:23 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython-stdlib amd64 2.7.12-1~16.04 [7768 B] Get:24 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python amd64 2.7.12-1~16.04 [137 kB] Get:25 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 distro-info-data all 0.28ubuntu0.14 [4674 B] Get:26 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libmagic1 amd64 1:5.25-2ubuntu1.4 [216 kB] Get:27 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 file amd64 1:5.25-2ubuntu1.4 [21.2 kB] Get:28 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libapt-inst2.0 amd64 1.2.32ubuntu0.1 [54.5 kB] Get:29 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgmp10 amd64 2:6.1.0+dfsg-2 [240 kB] Get:30 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libnettle6 amd64 3.2-1ubuntu0.16.04.1 [93.5 kB] Get:31 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libhogweed4 amd64 3.2-1ubuntu0.16.04.1 [136 kB] Get:32 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libidn11 amd64 1.32-3ubuntu1.2 [46.5 kB] Get:33 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libp11-kit0 amd64 0.23.2-5~ubuntu16.04.1 [105 kB] Get:34 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libtasn1-6 amd64 4.7-3ubuntu0.16.04.3 [43.5 kB] Get:35 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgnutls30 amd64 3.4.10-4ubuntu1.8 [548 kB] Get:36 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 lsb-release all 9.20160110ubuntu0.2 [11.8 kB] Get:37 http://archive.ubuntu.com/ubuntu xenial/main amd64 ucf all 3.0036 [52.9 kB] Get:38 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssl amd64 1.0.2g-1ubuntu4.17 [492 kB] Get:39 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 ca-certificates all 20190110~16.04.1 [146 kB] Get:40 http://archive.ubuntu.com/ubuntu xenial/main amd64 libcap-ng0 amd64 0.7.7-1 [10.9 kB] Get:41 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdbus-1-3 amd64 1.10.6-1ubuntu3.6 [161 kB] Get:42 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 dbus amd64 1.10.6-1ubuntu3.6 [141 kB] Get:43 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgirepository-1.0-1 amd64 1.46.0-3ubuntu1 [88.3 kB] Get:44 http://archive.ubuntu.com/ubuntu xenial/main amd64 gir1.2-glib-2.0 amd64 1.46.0-3ubuntu1 [127 kB] Get:45 http://archive.ubuntu.com/ubuntu xenial/main amd64 iso-codes all 3.65-1 [2268 kB] Get:46 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 krb5-locales all 1.13.2+dfsg-5ubuntu2.1 [13.6 kB] Get:47 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libroken18-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [41.4 kB] Get:48 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libasn1-8-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [174 kB] Get:49 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libkrb5support0 amd64 1.13.2+dfsg-5ubuntu2.1 [31.2 kB] Get:50 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libk5crypto3 amd64 1.13.2+dfsg-5ubuntu2.1 [81.3 kB] Get:51 http://archive.ubuntu.com/ubuntu xenial/main amd64 libkeyutils1 amd64 1.5.9-8ubuntu1 [9904 B] Get:52 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libkrb5-3 amd64 1.13.2+dfsg-5ubuntu2.1 [273 kB] Get:53 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgssapi-krb5-2 amd64 1.13.2+dfsg-5ubuntu2.1 [120 kB] Get:54 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libhcrypto4-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [85.0 kB] Get:55 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libheimbase1-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [29.3 kB] Get:56 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libwind0-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [47.8 kB] Get:57 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libhx509-5-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [107 kB] Get:58 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libkrb5-26-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [202 kB] Get:59 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libheimntlm0-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [15.1 kB] Get:60 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgssapi3-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1.16.04.1 [96.1 kB] Get:61 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libsasl2-modules-db amd64 2.1.26.dfsg1-14ubuntu0.2 [14.5 kB] Get:62 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libsasl2-2 amd64 2.1.26.dfsg1-14ubuntu0.2 [48.7 kB] Get:63 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libldap-2.4-2 amd64 2.4.42+dfsg-2ubuntu3.9 [159 kB] Get:64 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d-1ubuntu0.1 [54.4 kB] Get:65 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcurl3-gnutls amd64 7.47.0-1ubuntu2.16 [184 kB] Get:66 http://archive.ubuntu.com/ubuntu xenial/main amd64 libdbus-glib-1-2 amd64 0.106-1 [67.1 kB] Get:67 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libglib2.0-data all 2.48.2-0ubuntu4.6 [131 kB] Get:68 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libicu55 amd64 55.1-7ubuntu0.5 [7650 kB] Get:69 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libsasl2-modules amd64 2.1.26.dfsg1-14ubuntu0.2 [47.7 kB] Get:70 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libxml2 amd64 2.9.3+dfsg1-1ubuntu0.7 [698 kB] Get:71 http://archive.ubuntu.com/ubuntu xenial/main amd64 powermgmt-base all 1.31+nmu1 [7178 B] Get:72 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-apt-common all 1.1.0~beta1ubuntu0.16.04.9 [16.8 kB] Get:73 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python3-apt amd64 1.1.0~beta1ubuntu0.16.04.9 [145 kB] Get:74 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3-dbus amd64 1.2.0-3 [83.1 kB] Get:75 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3-gi amd64 3.20.0-0ubuntu1 [153 kB] Get:76 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 shared-mime-info amd64 1.5-2ubuntu0.2 [405 kB] Get:77 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 xdg-user-dirs amd64 0.15-2ubuntu6.16.04.1 [61.8 kB] Get:78 http://archive.ubuntu.com/ubuntu xenial/main amd64 xml-core all 0.13+nmu2 [23.3 kB] Get:79 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-apt amd64 1.1.0~beta1ubuntu0.16.04.9 [147 kB] Get:80 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-pycurl amd64 7.43.0-1ubuntu1 [43.3 kB] Get:81 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 python-software-properties all 0.96.20.10 [20.6 kB] Get:82 http://archive.ubuntu.com/ubuntu xenial/main amd64 xz-utils amd64 5.1.1alpha+20120614-2ubuntu2 [78.8 kB] Get:83 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 unattended-upgrades all 1.1ubuntu1.18.04.7~16.04.6 [42.1 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 27.9 MB in 1min 50s (252 kB/s) Selecting previously unselected package cron. (Reading database ... 4780 files and directories currently installed.) Preparing to unpack .../cron_3.0pl1-128ubuntu2_amd64.deb ... Unpacking cron (3.0pl1-128ubuntu2) ... Selecting previously unselected package libssl1.0.0:amd64. Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.17_amd64.deb ... Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.17) ... Selecting previously unselected package libpython3.5-minimal:amd64. Preparing to unpack .../libpython3.5-minimal_3.5.2-2ubuntu0~16.04.12_amd64.deb ... Unpacking libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.12) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.1.0-7ubuntu0.16.04.5_amd64.deb ... Unpacking libexpat1:amd64 (2.1.0-7ubuntu0.16.04.5) ... Selecting previously unselected package python3.5-minimal. Preparing to unpack .../python3.5-minimal_3.5.2-2ubuntu0~16.04.12_amd64.deb ... Unpacking python3.5-minimal (3.5.2-2ubuntu0~16.04.12) ... Selecting previously unselected package python3-minimal. Preparing to unpack .../python3-minimal_3.5.1-3_amd64.deb ... Unpacking python3-minimal (3.5.1-3) ... Selecting previously unselected package mime-support. Preparing to unpack .../mime-support_3.59ubuntu1_all.deb ... Unpacking mime-support (3.59ubuntu1) ... Selecting previously unselected package libmpdec2:amd64. Preparing to unpack .../libmpdec2_2.4.2-1_amd64.deb ... Unpacking libmpdec2:amd64 (2.4.2-1) ... Selecting previously unselected package libsqlite3-0:amd64. Preparing to unpack .../libsqlite3-0_3.11.0-1ubuntu1.5_amd64.deb ... Unpacking libsqlite3-0:amd64 (3.11.0-1ubuntu1.5) ... Selecting previously unselected package libpython3.5-stdlib:amd64. Preparing to unpack .../libpython3.5-stdlib_3.5.2-2ubuntu0~16.04.12_amd64.deb ... Unpacking libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.12) ... Selecting previously unselected package python3.5. Preparing to unpack .../python3.5_3.5.2-2ubuntu0~16.04.12_amd64.deb ... Unpacking python3.5 (3.5.2-2ubuntu0~16.04.12) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../libpython3-stdlib_3.5.1-3_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.5.1-3) ... Selecting previously unselected package dh-python. Preparing to unpack .../dh-python_2.20151103ubuntu1.2_all.deb ... Unpacking dh-python (2.20151103ubuntu1.2) ... Processing triggers for systemd (229-4ubuntu21.29) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.17) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.12) ... Setting up libexpat1:amd64 (2.1.0-7ubuntu0.16.04.5) ... Setting up python3.5-minimal (3.5.2-2ubuntu0~16.04.12) ... Setting up python3-minimal (3.5.1-3) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Selecting previously unselected package python3. (Reading database ... 5794 files and directories currently installed.) Preparing to unpack .../python3_3.5.1-3_amd64.deb ... Unpacking python3 (3.5.1-3) ... Selecting previously unselected package libffi6:amd64. Preparing to unpack .../libffi6_3.2.1-4_amd64.deb ... Unpacking libffi6:amd64 (3.2.1-4) ... Selecting previously unselected package libglib2.0-0:amd64. Preparing to unpack .../libglib2.0-0_2.48.2-0ubuntu4.6_amd64.deb ... Unpacking libglib2.0-0:amd64 (2.48.2-0ubuntu4.6) ... Selecting previously unselected package sgml-base. Preparing to unpack .../sgml-base_1.26+nmu4ubuntu1_all.deb ... Unpacking sgml-base (1.26+nmu4ubuntu1) ... Selecting previously unselected package libpython2.7-minimal:amd64. Preparing to unpack .../libpython2.7-minimal_2.7.12-1ubuntu0~16.04.13_amd64.deb ... Unpacking libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.13) ... Selecting previously unselected package python2.7-minimal. Preparing to unpack .../python2.7-minimal_2.7.12-1ubuntu0~16.04.13_amd64.deb ... Unpacking python2.7-minimal (2.7.12-1ubuntu0~16.04.13) ... Selecting previously unselected package python-minimal. Preparing to unpack .../python-minimal_2.7.12-1~16.04_amd64.deb ... Unpacking python-minimal (2.7.12-1~16.04) ... Selecting previously unselected package libpython2.7-stdlib:amd64. Preparing to unpack .../libpython2.7-stdlib_2.7.12-1ubuntu0~16.04.13_amd64.deb ... Unpacking libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.13) ... Selecting previously unselected package python2.7. Preparing to unpack .../python2.7_2.7.12-1ubuntu0~16.04.13_amd64.deb ... Unpacking python2.7 (2.7.12-1ubuntu0~16.04.13) ... Selecting previously unselected package libpython-stdlib:amd64. Preparing to unpack .../libpython-stdlib_2.7.12-1~16.04_amd64.deb ... Unpacking libpython-stdlib:amd64 (2.7.12-1~16.04) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Setting up libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.13) ... Setting up python2.7-minimal (2.7.12-1ubuntu0~16.04.13) ... Linking and byte-compiling packages for runtime python2.7... Setting up python-minimal (2.7.12-1~16.04) ... Selecting previously unselected package python. (Reading database ... 6616 files and directories currently installed.) Preparing to unpack .../python_2.7.12-1~16.04_amd64.deb ... Unpacking python (2.7.12-1~16.04) ... Selecting previously unselected package distro-info-data. Preparing to unpack .../distro-info-data_0.28ubuntu0.14_all.deb ... Unpacking distro-info-data (0.28ubuntu0.14) ... Selecting previously unselected package libmagic1:amd64. Preparing to unpack .../libmagic1_1%3a5.25-2ubuntu1.4_amd64.deb ... Unpacking libmagic1:amd64 (1:5.25-2ubuntu1.4) ... Selecting previously unselected package file. Preparing to unpack .../file_1%3a5.25-2ubuntu1.4_amd64.deb ... Unpacking file (1:5.25-2ubuntu1.4) ... Selecting previously unselected package libapt-inst2.0:amd64. Preparing to unpack .../libapt-inst2.0_1.2.32ubuntu0.1_amd64.deb ... Unpacking libapt-inst2.0:amd64 (1.2.32ubuntu0.1) ... Selecting previously unselected package libgmp10:amd64. Preparing to unpack .../libgmp10_2%3a6.1.0+dfsg-2_amd64.deb ... Unpacking libgmp10:amd64 (2:6.1.0+dfsg-2) ... Selecting previously unselected package libnettle6:amd64. Preparing to unpack .../libnettle6_3.2-1ubuntu0.16.04.1_amd64.deb ... Unpacking libnettle6:amd64 (3.2-1ubuntu0.16.04.1) ... Selecting previously unselected package libhogweed4:amd64. Preparing to unpack .../libhogweed4_3.2-1ubuntu0.16.04.1_amd64.deb ... Unpacking libhogweed4:amd64 (3.2-1ubuntu0.16.04.1) ... Selecting previously unselected package libidn11:amd64. Preparing to unpack .../libidn11_1.32-3ubuntu1.2_amd64.deb ... Unpacking libidn11:amd64 (1.32-3ubuntu1.2) ... Selecting previously unselected package libp11-kit0:amd64. Preparing to unpack .../libp11-kit0_0.23.2-5~ubuntu16.04.1_amd64.deb ... Unpacking libp11-kit0:amd64 (0.23.2-5~ubuntu16.04.1) ... Selecting previously unselected package libtasn1-6:amd64. Preparing to unpack .../libtasn1-6_4.7-3ubuntu0.16.04.3_amd64.deb ... Unpacking libtasn1-6:amd64 (4.7-3ubuntu0.16.04.3) ... Selecting previously unselected package libgnutls30:amd64. Preparing to unpack .../libgnutls30_3.4.10-4ubuntu1.8_amd64.deb ... Unpacking libgnutls30:amd64 (3.4.10-4ubuntu1.8) ... Selecting previously unselected package lsb-release. Preparing to unpack .../lsb-release_9.20160110ubuntu0.2_all.deb ... Unpacking lsb-release (9.20160110ubuntu0.2) ... Selecting previously unselected package ucf. Preparing to unpack .../archives/ucf_3.0036_all.deb ... Moving old data out of the way Unpacking ucf (3.0036) ... Selecting previously unselected package openssl. Preparing to unpack .../openssl_1.0.2g-1ubuntu4.17_amd64.deb ... Unpacking openssl (1.0.2g-1ubuntu4.17) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../ca-certificates_20190110~16.04.1_all.deb ... Unpacking ca-certificates (20190110~16.04.1) ... Selecting previously unselected package libcap-ng0:amd64. Preparing to unpack .../libcap-ng0_0.7.7-1_amd64.deb ... Unpacking libcap-ng0:amd64 (0.7.7-1) ... Selecting previously unselected package libdbus-1-3:amd64. Preparing to unpack .../libdbus-1-3_1.10.6-1ubuntu3.6_amd64.deb ... Unpacking libdbus-1-3:amd64 (1.10.6-1ubuntu3.6) ... Selecting previously unselected package dbus. Preparing to unpack .../dbus_1.10.6-1ubuntu3.6_amd64.deb ... Unpacking dbus (1.10.6-1ubuntu3.6) ... Selecting previously unselected package libgirepository-1.0-1:amd64. Preparing to unpack .../libgirepository-1.0-1_1.46.0-3ubuntu1_amd64.deb ... Unpacking libgirepository-1.0-1:amd64 (1.46.0-3ubuntu1) ... Selecting previously unselected package gir1.2-glib-2.0:amd64. Preparing to unpack .../gir1.2-glib-2.0_1.46.0-3ubuntu1_amd64.deb ... Unpacking gir1.2-glib-2.0:amd64 (1.46.0-3ubuntu1) ... Selecting previously unselected package iso-codes. Preparing to unpack .../iso-codes_3.65-1_all.deb ... Unpacking iso-codes (3.65-1) ... Selecting previously unselected package krb5-locales. Preparing to unpack .../krb5-locales_1.13.2+dfsg-5ubuntu2.1_all.deb ... Unpacking krb5-locales (1.13.2+dfsg-5ubuntu2.1) ... Selecting previously unselected package libroken18-heimdal:amd64. Preparing to unpack .../libroken18-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libroken18-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libasn1-8-heimdal:amd64. Preparing to unpack .../libasn1-8-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libasn1-8-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libkrb5support0:amd64. Preparing to unpack .../libkrb5support0_1.13.2+dfsg-5ubuntu2.1_amd64.deb ... Unpacking libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Selecting previously unselected package libk5crypto3:amd64. Preparing to unpack .../libk5crypto3_1.13.2+dfsg-5ubuntu2.1_amd64.deb ... Unpacking libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Selecting previously unselected package libkeyutils1:amd64. Preparing to unpack .../libkeyutils1_1.5.9-8ubuntu1_amd64.deb ... Unpacking libkeyutils1:amd64 (1.5.9-8ubuntu1) ... Selecting previously unselected package libkrb5-3:amd64. Preparing to unpack .../libkrb5-3_1.13.2+dfsg-5ubuntu2.1_amd64.deb ... Unpacking libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Selecting previously unselected package libgssapi-krb5-2:amd64. Preparing to unpack .../libgssapi-krb5-2_1.13.2+dfsg-5ubuntu2.1_amd64.deb ... Unpacking libgssapi-krb5-2:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Selecting previously unselected package libhcrypto4-heimdal:amd64. Preparing to unpack .../libhcrypto4-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libhcrypto4-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libheimbase1-heimdal:amd64. Preparing to unpack .../libheimbase1-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libheimbase1-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libwind0-heimdal:amd64. Preparing to unpack .../libwind0-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libwind0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libhx509-5-heimdal:amd64. Preparing to unpack .../libhx509-5-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libhx509-5-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libkrb5-26-heimdal:amd64. Preparing to unpack .../libkrb5-26-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libkrb5-26-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libheimntlm0-heimdal:amd64. Preparing to unpack .../libheimntlm0-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libheimntlm0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libgssapi3-heimdal:amd64. Preparing to unpack .../libgssapi3-heimdal_1.7~git20150920+dfsg-4ubuntu1.16.04.1_amd64.deb ... Unpacking libgssapi3-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Selecting previously unselected package libsasl2-modules-db:amd64. Preparing to unpack .../libsasl2-modules-db_2.1.26.dfsg1-14ubuntu0.2_amd64.deb ... Unpacking libsasl2-modules-db:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Selecting previously unselected package libsasl2-2:amd64. Preparing to unpack .../libsasl2-2_2.1.26.dfsg1-14ubuntu0.2_amd64.deb ... Unpacking libsasl2-2:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Selecting previously unselected package libldap-2.4-2:amd64. Preparing to unpack .../libldap-2.4-2_2.4.42+dfsg-2ubuntu3.9_amd64.deb ... Unpacking libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.9) ... Selecting previously unselected package librtmp1:amd64. Preparing to unpack .../librtmp1_2.4+20151223.gitfa8646d-1ubuntu0.1_amd64.deb ... Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d-1ubuntu0.1) ... Selecting previously unselected package libcurl3-gnutls:amd64. Preparing to unpack .../libcurl3-gnutls_7.47.0-1ubuntu2.16_amd64.deb ... Unpacking libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.16) ... Selecting previously unselected package libdbus-glib-1-2:amd64. Preparing to unpack .../libdbus-glib-1-2_0.106-1_amd64.deb ... Unpacking libdbus-glib-1-2:amd64 (0.106-1) ... Selecting previously unselected package libglib2.0-data. Preparing to unpack .../libglib2.0-data_2.48.2-0ubuntu4.6_all.deb ... Unpacking libglib2.0-data (2.48.2-0ubuntu4.6) ... Selecting previously unselected package libicu55:amd64. Preparing to unpack .../libicu55_55.1-7ubuntu0.5_amd64.deb ... Unpacking libicu55:amd64 (55.1-7ubuntu0.5) ... Selecting previously unselected package libsasl2-modules:amd64. Preparing to unpack .../libsasl2-modules_2.1.26.dfsg1-14ubuntu0.2_amd64.deb ... Unpacking libsasl2-modules:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Selecting previously unselected package libxml2:amd64. Preparing to unpack .../libxml2_2.9.3+dfsg1-1ubuntu0.7_amd64.deb ... Unpacking libxml2:amd64 (2.9.3+dfsg1-1ubuntu0.7) ... Selecting previously unselected package powermgmt-base. Preparing to unpack .../powermgmt-base_1.31+nmu1_all.deb ... Unpacking powermgmt-base (1.31+nmu1) ... Selecting previously unselected package python-apt-common. Preparing to unpack .../python-apt-common_1.1.0~beta1ubuntu0.16.04.9_all.deb ... Unpacking python-apt-common (1.1.0~beta1ubuntu0.16.04.9) ... Selecting previously unselected package python3-apt. Preparing to unpack .../python3-apt_1.1.0~beta1ubuntu0.16.04.9_amd64.deb ... Unpacking python3-apt (1.1.0~beta1ubuntu0.16.04.9) ... Selecting previously unselected package python3-dbus. Preparing to unpack .../python3-dbus_1.2.0-3_amd64.deb ... Unpacking python3-dbus (1.2.0-3) ... Selecting previously unselected package python3-gi. Preparing to unpack .../python3-gi_3.20.0-0ubuntu1_amd64.deb ... Unpacking python3-gi (3.20.0-0ubuntu1) ... Selecting previously unselected package shared-mime-info. Preparing to unpack .../shared-mime-info_1.5-2ubuntu0.2_amd64.deb ... Unpacking shared-mime-info (1.5-2ubuntu0.2) ... Selecting previously unselected package xdg-user-dirs. Preparing to unpack .../xdg-user-dirs_0.15-2ubuntu6.16.04.1_amd64.deb ... Unpacking xdg-user-dirs (0.15-2ubuntu6.16.04.1) ... Selecting previously unselected package xml-core. Preparing to unpack .../xml-core_0.13+nmu2_all.deb ... Unpacking xml-core (0.13+nmu2) ... Selecting previously unselected package python-apt. Preparing to unpack .../python-apt_1.1.0~beta1ubuntu0.16.04.9_amd64.deb ... Unpacking python-apt (1.1.0~beta1ubuntu0.16.04.9) ... Selecting previously unselected package python-pycurl. Preparing to unpack .../python-pycurl_7.43.0-1ubuntu1_amd64.deb ... Unpacking python-pycurl (7.43.0-1ubuntu1) ... Selecting previously unselected package python-software-properties. Preparing to unpack .../python-software-properties_0.96.20.10_all.deb ... Unpacking python-software-properties (0.96.20.10) ... Selecting previously unselected package xz-utils. Preparing to unpack .../xz-utils_5.1.1alpha+20120614-2ubuntu2_amd64.deb ... Unpacking xz-utils (5.1.1alpha+20120614-2ubuntu2) ... Selecting previously unselected package unattended-upgrades. Preparing to unpack .../unattended-upgrades_1.1ubuntu1.18.04.7~16.04.6_all.deb ... Unpacking unattended-upgrades (1.1ubuntu1.18.04.7~16.04.6) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Processing triggers for systemd (229-4ubuntu21.29) ... Setting up cron (3.0pl1-128ubuntu2) ... Adding group `crontab' (GID 106) ... Done. update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults update-rc.d: warning: stop runlevel arguments (1) do not match cron Default-Stop values (none) invoke-rc.d: could not determine current runlevel invoke-rc.d: policy-rc.d denied execution of start. Setting up mime-support (3.59ubuntu1) ... Setting up libmpdec2:amd64 (2.4.2-1) ... Setting up libsqlite3-0:amd64 (3.11.0-1ubuntu1.5) ... Setting up libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.12) ... Setting up python3.5 (3.5.2-2ubuntu0~16.04.12) ... Setting up libpython3-stdlib:amd64 (3.5.1-3) ... Setting up libffi6:amd64 (3.2.1-4) ... Setting up libglib2.0-0:amd64 (2.48.2-0ubuntu4.6) ... No schema files found: doing nothing. Setting up sgml-base (1.26+nmu4ubuntu1) ... Setting up libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.13) ... Setting up python2.7 (2.7.12-1ubuntu0~16.04.13) ... Setting up libpython-stdlib:amd64 (2.7.12-1~16.04) ... Setting up python (2.7.12-1~16.04) ... Setting up distro-info-data (0.28ubuntu0.14) ... Setting up libmagic1:amd64 (1:5.25-2ubuntu1.4) ... Setting up file (1:5.25-2ubuntu1.4) ... Setting up libapt-inst2.0:amd64 (1.2.32ubuntu0.1) ... Setting up libgmp10:amd64 (2:6.1.0+dfsg-2) ... Setting up libnettle6:amd64 (3.2-1ubuntu0.16.04.1) ... Setting up libhogweed4:amd64 (3.2-1ubuntu0.16.04.1) ... Setting up libidn11:amd64 (1.32-3ubuntu1.2) ... Setting up libp11-kit0:amd64 (0.23.2-5~ubuntu16.04.1) ... Setting up libtasn1-6:amd64 (4.7-3ubuntu0.16.04.3) ... Setting up libgnutls30:amd64 (3.4.10-4ubuntu1.8) ... Setting up ucf (3.0036) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up openssl (1.0.2g-1ubuntu4.17) ... Setting up ca-certificates (20190110~16.04.1) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up libcap-ng0:amd64 (0.7.7-1) ... Setting up libdbus-1-3:amd64 (1.10.6-1ubuntu3.6) ... Setting up dbus (1.10.6-1ubuntu3.6) ... Setting up libgirepository-1.0-1:amd64 (1.46.0-3ubuntu1) ... Setting up gir1.2-glib-2.0:amd64 (1.46.0-3ubuntu1) ... Setting up iso-codes (3.65-1) ... Setting up krb5-locales (1.13.2+dfsg-5ubuntu2.1) ... Setting up libroken18-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libasn1-8-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Setting up libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Setting up libkeyutils1:amd64 (1.5.9-8ubuntu1) ... Setting up libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Setting up libgssapi-krb5-2:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Setting up libhcrypto4-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libheimbase1-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libwind0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libhx509-5-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libkrb5-26-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libheimntlm0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libgssapi3-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1.16.04.1) ... Setting up libsasl2-modules-db:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Setting up libsasl2-2:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Setting up libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.9) ... Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d-1ubuntu0.1) ... Setting up libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.16) ... Setting up libdbus-glib-1-2:amd64 (0.106-1) ... Setting up libglib2.0-data (2.48.2-0ubuntu4.6) ... Setting up libicu55:amd64 (55.1-7ubuntu0.5) ... Setting up libsasl2-modules:amd64 (2.1.26.dfsg1-14ubuntu0.2) ... Setting up libxml2:amd64 (2.9.3+dfsg1-1ubuntu0.7) ... Setting up powermgmt-base (1.31+nmu1) ... Setting up python-apt-common (1.1.0~beta1ubuntu0.16.04.9) ... Setting up shared-mime-info (1.5-2ubuntu0.2) ... Setting up xdg-user-dirs (0.15-2ubuntu6.16.04.1) ... Setting up xml-core (0.13+nmu2) ... Setting up python-apt (1.1.0~beta1ubuntu0.16.04.9) ... Setting up python-pycurl (7.43.0-1ubuntu1) ... Setting up xz-utils (5.1.1alpha+20120614-2ubuntu2) ... update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode Setting up dh-python (2.20151103ubuntu1.2) ... Setting up python3 (3.5.1-3) ... running python rtupdate hooks for python3.5... running python post-rtupdate hooks for python3.5... Setting up lsb-release (9.20160110ubuntu0.2) ... Setting up python3-apt (1.1.0~beta1ubuntu0.16.04.9) ... Setting up python3-dbus (1.2.0-3) ... Setting up python3-gi (3.20.0-0ubuntu1) ... Setting up python-software-properties (0.96.20.10) ... Setting up unattended-upgrades (1.1ubuntu1.18.04.7~16.04.6) ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version Creating config file /etc/apt/apt.conf.d/50unattended-upgrades with new version Processing triggers for systemd (229-4ubuntu21.29) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Processing triggers for ca-certificates (20190110~16.04.1) ... Updating certificates in /etc/ssl/certs... 127 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Processing triggers for sgml-base (1.26+nmu4ubuntu1) ... Removing intermediate container b4f5db0d4277 ---> be37f3d13c47 Step 4/11 : RUN apt-get install -y software-properties-common ---> Running in 5dd065b5642f Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: python3-pycurl python3-software-properties Suggested packages: libcurl4-gnutls-dev python-pycurl-doc python3-pycurl-dbg The following NEW packages will be installed: python3-pycurl python3-software-properties software-properties-common 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 72.0 kB of archives. After this operation, 483 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 python3-pycurl amd64 7.43.0-1ubuntu1 [42.3 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python3-software-properties all 0.96.20.10 [20.2 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 software-properties-common all 0.96.20.10 [9504 B] debconf: delaying package configuration, since apt-utils is not installed Fetched 72.0 kB in 1s (51.3 kB/s) Selecting previously unselected package python3-pycurl. (Reading database ... 8408 files and directories currently installed.) Preparing to unpack .../python3-pycurl_7.43.0-1ubuntu1_amd64.deb ... Unpacking python3-pycurl (7.43.0-1ubuntu1) ... Selecting previously unselected package python3-software-properties. Preparing to unpack .../python3-software-properties_0.96.20.10_all.deb ... Unpacking python3-software-properties (0.96.20.10) ... Selecting previously unselected package software-properties-common. Preparing to unpack .../software-properties-common_0.96.20.10_all.deb ... Unpacking software-properties-common (0.96.20.10) ... Processing triggers for dbus (1.10.6-1ubuntu3.6) ... Setting up python3-pycurl (7.43.0-1ubuntu1) ... Setting up python3-software-properties (0.96.20.10) ... Setting up software-properties-common (0.96.20.10) ... Processing triggers for dbus (1.10.6-1ubuntu3.6) ... Removing intermediate container 5dd065b5642f ---> 02ea2f860a4d Step 5/11 : RUN add-apt-repository ppa:bitcoin/bitcoin ---> Running in e0f89744d2f0 NOT MAINTAINED. The OS-library linking packages here had a series of issues. PLEASE DOWNLOAD DIRECTLY FROM bitcoincore.org (and verify the signatures of said files). IF YOU WANT AUTO-UPDATES, please see the officially-maintained snap package - https://github.com/bitcoin-core/packaging/tree/master/snap More info: https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin gpg: keyring `/tmp/tmphrg15vnm/secring.gpg' created gpg: keyring `/tmp/tmphrg15vnm/pubring.gpg' created gpg: requesting key 8842CE5E from hkp server keyserver.ubuntu.com gpg: /tmp/tmphrg15vnm/trustdb.gpg: trustdb created gpg: key 8842CE5E: public key "Launchpad PPA for Bitcoin" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK Removing intermediate container e0f89744d2f0 ---> b81c0b64d050 Step 6/11 : RUN apt-get update -y ---> Running in f5e3ffb92318 Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease Get:2 http://ppa.launchpad.net/bitcoin/bitcoin/ubuntu xenial InRelease [17.5 kB] Hit:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease Hit:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease Get:5 http://ppa.launchpad.net/bitcoin/bitcoin/ubuntu xenial/main amd64 Packages [2169 B] Hit:6 http://security.ubuntu.com/ubuntu xenial-security InRelease Fetched 19.7 kB in 5s (3527 B/s) Reading package lists... Removing intermediate container f5e3ffb92318 ---> f9d21b3c9e07 Step 7/11 : RUN apt-get install -y bitcoind ---> Running in afb933e1ded8 Reading package lists... Building dependency tree... Reading state information... E: Unable to locate package bitcoind ERROR: Service 'daemon_one' failed to build : The command '/bin/sh -c apt-get install -y bitcoind' returned a non-zero code: 100 C:\Users\ebata\bitcoin> 

RUN add-apt-repository ppa:bitcoin/bitcoin を ppa:luke-jr/bitcoincore に変更してみたら、Dockerfileが通った

 

 

ターミナルを開いて、コンテナに入ります。
docker exec -it bitcoin_1 /bin/bash
 root@bitcoin_1:/# bitcoind -daemon Bitcoin Core starting root@bitcoin_1:/# bitcoin-cli generate 100 error code: -32601 error message: Method not found

あれ?

bitcoin-cli getinfoで確認出来るって書いてたけど、もう無くなったAPIになっちゃてたみたい

This command doesn't exist anymore since Bitcoin Core 0.19. Use generatetoaddress instead. てなことが記載されている。

ここを読んでみると、

Generate 11 blocks to myaddress
> bitcoin-cli generatetoaddress 11 "myaddress"
If you are running the bitcoin core wallet, you can get a new address to send the newly generated bitcoin to with:
> bitcoin-cli getnewaddress

てな記載がある。

とにかくブロックを作らんことには、金(ビットコイン)が稼げないが、上記の"myaddress"が何ならよう分からん。

ここ の記事にある、bitcoin-cli generatetoaddress 101 `bitcoin-cli getnewaddress`

をやってもいいものなのか?

ちなみに、bitcoin-cli getnewaddress を実行すると、

root@bitcoin_1:/# bitcoin-cli getnewaddress
bcrt1qymag0kvldyw4saejksnssv92ss3awrkp5vz6ef

てな内容が出てくる(アドレス、モロばれだけど、実際の環境では使わないからいいかな)

で、やってみた。

root@bitcoin_1:/# bitcoin-cli generatetoaddress 101 `bitcoin-cli getnewaddress`
[
"4177f527560e47a246ab9c00e88c4255b3b7acc7772ac8f691e2444977005a7e",
"2a5d403754cea5be3dcbead230b24887209c0832b4adbc39deb5c94b9fe02b08",
"56ace4b11685e895b14476863b649996cf0a2be7d99ba90487baebc6f1469f1a",
"4a52e7133141ec90278cfa960db52865b0ae26383d4d54faba1a3011054f82f0",
"5231d7dfcc5a7de895294b4caaae234949179d1978fb08f7c4bea2d460092616",
"165e2c7989a2e7392f573769a7abfda4f0ea31a7cbf6ade5189fc82d605aafe9",
"2c581e76e8bf6441a1a9b9f4f79bb8ec2eb51fcfdc866c2e555bab9a4c6ca286",
"7fed803ad55e2aa646ee49acb903cd82092b73f4486e592493b9733ed2747c2d",
"2f74ea1621a8016f0c726e84710f2b6a8960872e6a384c7a718d31b989f4ccbc",
"0db3f0879ad15be05ae2d345bd68d944c1014b95019e9797c99239346a860ca7",
"62f22bf9f9a37398fb0d05ec02b3dd07484cb82f24a6a0e6e3044f8d0f609138",
"228d3b9a56f3c3553cd828b9dfa0a7d26ad212625d303fe37026432685e9ca8c",
"2bc79a882222d359833d6d502823d18d822cf73389b82f2f91a470e8aa959202",
"1a218e6d2d25f9f4b11a487c596c8550da93dcc9be8588de25b2d6fbfc28d401",
"66bc748557187e1a899e0d1fda8b763344c504124e9e30583facd42d6a711778",
"3ec3631019a691f4da89c29563bef83e82b4da50b552bc17605353c626f991d8",
"03006db53a078364eda8462ad6f33dfe2fb7cb7dc4cbb80f2306887cd02eca07",
"3a3ba0070d431abdce94a894bd88cb436af44cf8841c66e2fd6bbac95d70f06d",
"0b57e21ad6c9f25a95b32cc7e2ccfe5a290d522060dd259312790037de31d64b",
"604ae4c582c4c3fdc8ca8f3ee2bf43ebf6f80b8f4f565d9133e49b4e83cd3d4b",
"31429fef4d34dad0d0dd6ab5da9ba02e363b5b36f63399b9ccd5fd04294a4b32",
"19723216344b0b02e696700d7a96bb343dc7c31b318f87bdc5b5d012794a6ed9",
"4d998f07124795428c6b99749efcfd93df0bbaf6c266d7935c312ad74a86ce0a",
"2448217b611b82631ef8cd3aaf3f5b54237f39092dd4e24dd62b6420cb2224d7",
"41c938ece2f9dcacd7261f90a400646a90d026d545fe9d05cf0fd5d2ff599240",
"50fc0af9714ebbaedb692132895405ce3272e928de96472a1fb9bf9d41e21bcf",
"77348b3afa398920d3e9c4c4c73f9bdae2c9ba2325f91f8229f2d5329abc6067",
"064f502414991675fd0eafdbc013fa437108bf641cdcae6f90d4ceacc4780c8d",
"66291c94d0ba5da56f80ae3c6e0cbf9b8094845239125a0f8211c6c76fee0e66",
"66900f87b1b4a32bff9c46100800ae5e6c42cc407515d5c2d09eca46877c71cf",
"1f6f13ec5cca4a8f00fd7436c1d25d8f9841f2fa51e91857291b6ee5274aa962",
"0423406749eb449c0c94b8d3766555038c6dadda04c4ff0d4e73427df1017b03",
"033a07ca40f30768424cfc10b88d13c0a9750eb898dbdebc5e28d4dcbeab2577",
"4fd38f4eeb9a0201bf08b47765e6179b43aa1a0d6f18677d6af3e4593d4b6ae2",
"41158030deaf4caf1ce37b919e788d168bcdd0ec2f5a28842368e21bfc30c645",
"1af821dd38d22c0d855522635c9089bf0d5ff962d87026e8367458af3b30ac09",
"5ef03f6423957f46adee2fcc957d287418885650057fb1d90a278f7ecbbc4bf0",
"03ec5fef2f98eb7ed818e87d2d95225918523b71625479cba7c78a6280f68660",
"4a4bd1f23ebd6ae5ca9fab7ae2c775c964d061178b355e576e736faaae85d8c7",
"58d3d30078bae0a899d6b7a816283643e09994f7548f5ba53191f0465094042a",
"57e822309588a318f4a7294bf525ec99fb7fd34f9b7a77761de0b58a25b8fc18",
"2994a3bea7669ce10a317686b878be2e84784446e3ad6c455de1f763f903fa44",
"70c80bc118ae9c238ec4a16a068555391efb9cf8b8bf19b14a83f8e6347ac75a",
"3109660d42242062667335463a473d285260e93ec725d442611e71eaf6eb4647",
"6463e5937deea0ec5c7a0e333b78726831440f7da499d27278803483f1b7b159",
"0750647a6e537758065b7ab13955bbe771841c950eceaf84c3b8494f3ef120b2",
"7f73b6998c3f11b3960da9c20828e74085410e37c69efd64779d0672310088b4",
"167f911d6192f5387009dfcc684fd5c882b5bd3be38ee01a918ef5ce89fb36bc",
"12e8937f16ede3cae67f73cefe764bc79aeecf61113d20fc3156d422c338c30c",
"41c9f793360a87528a7b3de4e51f33e6a466c57c11f7760676edb33ebc6a9f7e",
"33a3e607e53b402d68ac2bfd4e829c4c4f741869da4468dbe03a0a2d98f291c4",
"33cac25e7ec93ee93e8f2a95276a808100dcc941242326cb176278415c345ed8",
"6a979424fa152e5996762965189804cd2946c208e1ed68697d3ec8fcdeb2002b",
"411a9f258bf9b7fa455de052c1e80c254d3cf59f545b433c129b3592188e5d09",
"057c705b1556d45eb98e6cc586c9118e2baffeb542ec6943d8a237392c8d4316",
"7ea3a47ae7fa7c57ac80f223964290f132d887e7f6f66c49fda67180da1f4ec5",
"0947a3a9ac627fa3b04c6828c0af9e62ec5bfd506d52c1d5e049b2e677341597",
"4b2b755ba0446662de1a28357bf841007d2e0701f77667170ebe3afc081cf2f8",
"6be55f71c3f4e71467ae0a74b67c298c0caa0c889efbabcc67762f92aaff03c8",
"283a7855e14de3919395ec717b692c3cd990b278d2d5c90699acc85eaa49757a",
"14ac5a3afaca4492060d3dbea2474e918127acb59d4bf2e514e6f384eb0fa53c",
"05c397cd9cdda0f359fd4e915067bf11b195e5d3dc1a5aea34bd64ebdd26f1d5",
"280933eba56163feaf275c0bc2e3b81048539d34788ec22090313518e8aca1b9",
"29c3a23724fc07ced98367affb0f7def6cbb2cfe4fe3289c91bfcbb1d9062884",
"1a8f2665107c50442d01ec3c3b9dead73a7237f3414d7fa438415e78509cb53e",
"436a7fac474736aed85dc7d4e312b9fdfffc6a53b7e19422f478268cb20eb424",
"1f39a851008729db5d7c0aba7888d8ccba06ac847bc4542095e03f574b70eb4e",
"15cfd6f53704ca6e4de027cab4a25149e6a04b8ce03fba4289cb5b9cdb6f9a59",
"650de6dd79484716987c42410a465d5dfa54b2a99fc7d603723df5607e4e20dd",
"1cfeedc95e1acd9cffcb26b0483884134f40d5a283d937b7b43c16b614892931",
"4ea1e49e8a3b717fee3deaf7ba3ee14274d32f9c4a98d02bbb18da2f0cdafde7",
"6d0b95389dcb352a78eab47f9ceabdcd4f9bd3ea589f737bc313bcf24a8b0486",
"4f763813798b72049943d6614a516d37d407e3eaba6779e41bf1ac538350bdab",
"0de431dcee2bbd808a54d1acab883ed5496dc8ccc1d363540ff3ce440f304c43",
"4a199b4331a5fc6a27b8d3a2876e97554aa7113fc0eb667c0c147abeea9b9e1d",
"75f6ba9f84c88b9878ed7b3df63b6c1586be6fce2b5b9f4cd5595343b831651d",
"4f65083dd5077f084e0e4a588ea59207a4a712eec902e31d33c2d4965a80c1a1",
"2987e28e6b7b2383ac206726c4a9ca07a4e4f705fb12adcdfe10cfdcff565d3a",
"3fc9fdd7270744fff4285498c8a7f8619fb8ec89f827a462045ce8c3a8583b02",
"068ab89a648e1e9da4636a63a1a1ff5edea123a4f21667281f58ee7b3f43fccd",
"4df5562e0874f9a4253107f798f5d177640ab44d161b5c0d4fcdfe935e7cc009",
"59e86db93218d2aa4b07105dcd6edd07d2dd85152662a261af1f47d2aac042cc",
"0b15af3d8d1b08b3bde093e85078dffa754a5924c79085c4be1c91a713fe8062",
"00bb8022cea7cf517c41b95db0250e3389f02c2f034dd0e21cf441b35f256db4",
"25c7bad69581eb1c673693c9b5ecea34fd3981292badb90c41fa6fcff925dbac",
"4830bf3b369b0ba3975ab08b3fff07b9546c8fda6e2b7e55f305b8381f18fd6e",
"39855405738ed795c9f23cf933ac66e0b04ebabe50f28e102cd659166f9c7ff0",
"276797adb3a45042cb357525c7bb2053af26f97b158078d87f4965174a61456e",
"3ae64d52d4e9e80c072685e88cfb576c992e49a9f3808c1cee29279bff8fc90d",
"608ae941f8351e5e8bdc936d84009a0d93b79f82afaa69512cb41d4b6b13b2b6",
"20ed7ebbf55105697c6754440f1ffb68f796046b5e9bf9a5bf13fe12b762b915",
"318988c1b686efe428b3d4d9f711f26654a506007a30013d1946f01d3b21a1dd",
"00920ebf768761a74b9c6a89f3a16bbf5fc1cbea6f4c8af17eb3d7bdc1db45be",
"2f547f083680726977aa47a64303fd2fcf88c63e9ab6c0d983aab4e55dfa4011",
"2bfc89a56cec028ef08612e5a700b475baf73eb1d7404e3d4e18d22d0fb84871",
"67ee0490dde106367d715f5dedc13fa9a365b6551edeba1187f2fac260c91840",
"2ab1cff953dc2fecb4647bead68bdf8f27670e55989234ac77be1387437ad04e",
"699a01f27c9f4071ef5fa1db01ecee0b1cea4d717e936f5a689d90b82b40797c",
"50851ed32add0fa33db1b4f665ca8132f2109966811aff6a3b8f7f1d103d6165",
"25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4",
"7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37"
]
root@bitcoin_1:/#

うん、なんかブロックできたみたいだ。

root@bitcoin_1:/# bitcoin-cli getblockcount
500

うん、できている。では金額を確認してみよう。

root@bitcoin_1:/# bitcoin-cli getbalance
50.00000000

おお! 凄い。今1BTCが120万円くらいだから、6000万円を作ってしまったぞ! 

では、ここで口座(アカウント)を作ってみよう。

bitcoin-cli getnewaddress testuser1
bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6

でもって、残高を調べるけど・・・

root@bitcoin_1:/# bitcoin-cli getnewaddress testuser1
bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6
root@bitcoin_1:/# bitcoin-cli getbalance testuser1
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/# bitcoin-cli getbalance *
error: Error parsing JSON:boot
root@bitcoin_1:/# bitcoin-cli getbalance bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/# bitcoin-cli -regtest getbalance bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/# bitcoin-cli getbalance bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/# bitcoin-cli getbalance "*"
12462.50000000
root@bitcoin_1:/# bitcoin-cli getbalance "testuser1"
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/# bitcoin-cli getbalance "bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6"
error code: -32
error message:
dummy first argument must be excluded or set to "*".
root@bitcoin_1:/#

あれー? 上手く表示されないなぁ。

この当たりを探ってみる。

root@bitcoin_1:/# bitcoin-cli listaddressgroupings
[
  [
    [
      "bcrt1q37qd0chv7he5epgeaycm236zke2kx37esh2we0",
      12462.50000000,
      ""
    ]
  ]
] 二人目のユーザ(アドレス:bcrt1qhzknya5w4qcyxnq0lkcwumu9py2c624ujv79f6)がいない
C:\Users\ebata\bitcoin>docker exec -it bitcoin_1 /bin/bash
root@bitcoin_1:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@bitcoin_1:/#
root@bitcoin_1:/#
root@bitcoin_1:/#
root@bitcoin_1:/#
root@bitcoin_1:/#
root@bitcoin_1:/#
root@bitcoin_1:/# bitcoin-cli getbalance
50.00000000
root@bitcoin_1:/# bitcoin-cli getbalance "*"
50.00000000
root@bitcoin_1:/# bitcoin-cli getblockchaininfo
{
  "chain": "regtest",
  "blocks": 101,
  "headers": 101,
  "bestblockhash": "7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37",
  "difficulty": 4.656542373906925e-10,
  "mediantime": 1602937028,
  "verificationprogress": 1,
  "initialblockdownload": false,
  "chainwork": "00000000000000000000000000000000000000000000000000000000000000cc",
  "size_on_disk": 30476,
  "pruned": false,
  "softforks": {
    "bip34": {
      "type": "buried",
      "active": false,
      "height": 500
    },
    "bip66": {
      "type": "buried",
      "active": false,
      "height": 1251
    },
    "bip65": {
      "type": "buried",
      "active": false,
      "height": 1351
    },
    "csv": {
      "type": "buried",
      "active": false,
      "height": 432
    },
    "segwit": {
      "type": "buried",
      "active": true,
      "height": 0
    },
    "testdummy": {
      "type": "bip9",
      "bip9": {
        "status": "defined",
        "start_time": 0,
        "timeout": 9223372036854775807,
        "since": 0
      },
      "active": false
    }
  },
  "warnings": ""
}
root@bitcoin_1:/# bitcoin-cli getconnectioncount
0
root@bitcoin_1:/# bitcoin-cli getpeerinfo
[
]
root@bitcoin_1:/# bitcoin-cli getnewaddress
bcrt1qa5wzz2pw85f670fsaqpg26thtddeh5dw6u33he

root@bitcoin_1:/# bitcoin-cli listtransactions
[
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 10,
    "generated": true,
    "blockhash": "318988c1b686efe428b3d4d9f711f26654a506007a30013d1946f01d3b21a1dd",
    "blockheight": 92,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "ad130241f06c44b88135b1847f8775ebccb73e849caa60bfe9e5db9a7588149b",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 9,
    "generated": true,
    "blockhash": "00920ebf768761a74b9c6a89f3a16bbf5fc1cbea6f4c8af17eb3d7bdc1db45be",
    "blockheight": 93,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "4c2c637433cd55d7809ba3ae842abf91dc3f2795bfad11cd056ac84b13d48b3d",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 8,
    "generated": true,
    "blockhash": "2f547f083680726977aa47a64303fd2fcf88c63e9ab6c0d983aab4e55dfa4011",
    "blockheight": 94,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "25e3578b8da9bc72acef85203d74bc1068bbd5b0f9e0611c07d9876a0cf85e56",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 7,
    "generated": true,
    "blockhash": "2bfc89a56cec028ef08612e5a700b475baf73eb1d7404e3d4e18d22d0fb84871",
    "blockheight": 95,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "c8c75936d15030b0090dd10b2ed8d650d1fa7657c4fcc379aa9c9642eb626b04",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 6,
    "generated": true,
    "blockhash": "67ee0490dde106367d715f5dedc13fa9a365b6551edeba1187f2fac260c91840",
    "blockheight": 96,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "c5f3031c90d5df19667019666d2cb994aaf8202d76b980f0f2a8f3c143ad353a",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 5,
    "generated": true,
    "blockhash": "2ab1cff953dc2fecb4647bead68bdf8f27670e55989234ac77be1387437ad04e",
    "blockheight": 97,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "53fa062b9e0be60e9263e048e941759f09d820b02b1a9352d3ce64bf157c3545",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 4,
    "generated": true,
    "blockhash": "699a01f27c9f4071ef5fa1db01ecee0b1cea4d717e936f5a689d90b82b40797c",
    "blockheight": 98,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "ee516eabe679ae6e54af57180deff4d91ce51c277c74e1b08618a5da56704242",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 3,
    "generated": true,
    "blockhash": "50851ed32add0fa33db1b4f665ca8132f2109966811aff6a3b8f7f1d103d6165",
    "blockheight": 99,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "896f89d0db10a0a1b00bc0bda0e774fa8e46c20d539739b8f59df1adbb358b8f",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 2,
    "generated": true,
    "blockhash": "25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4",
    "blockheight": 100,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "47986d3580f9b9e1168f4e16cd78decf982ff7b1f75417025d69689eeb3bd9fd",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 1,
    "generated": true,
    "blockhash": "7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37",
    "blockheight": 101,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "f759b7afcf00a9d037e37193a3d74f8e91250ceef46a8d260fc66c304aa6dc86",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  }
]

root@bitcoin_1:/# bitcoin-cli getpeerinfo
[
]
root@bitcoin_1:/# bitcoin-cli listtransactions
[
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 10,
    "generated": true,
    "blockhash": "318988c1b686efe428b3d4d9f711f26654a506007a30013d1946f01d3b21a1dd",
    "blockheight": 92,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "ad130241f06c44b88135b1847f8775ebccb73e849caa60bfe9e5db9a7588149b",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 9,
    "generated": true,
    "blockhash": "00920ebf768761a74b9c6a89f3a16bbf5fc1cbea6f4c8af17eb3d7bdc1db45be",
    "blockheight": 93,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "4c2c637433cd55d7809ba3ae842abf91dc3f2795bfad11cd056ac84b13d48b3d",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 8,
    "generated": true,
    "blockhash": "2f547f083680726977aa47a64303fd2fcf88c63e9ab6c0d983aab4e55dfa4011",
    "blockheight": 94,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "25e3578b8da9bc72acef85203d74bc1068bbd5b0f9e0611c07d9876a0cf85e56",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 7,
    "generated": true,
    "blockhash": "2bfc89a56cec028ef08612e5a700b475baf73eb1d7404e3d4e18d22d0fb84871",
    "blockheight": 95,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "c8c75936d15030b0090dd10b2ed8d650d1fa7657c4fcc379aa9c9642eb626b04",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 6,
    "generated": true,
    "blockhash": "67ee0490dde106367d715f5dedc13fa9a365b6551edeba1187f2fac260c91840",
    "blockheight": 96,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "c5f3031c90d5df19667019666d2cb994aaf8202d76b980f0f2a8f3c143ad353a",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 5,
    "generated": true,
    "blockhash": "2ab1cff953dc2fecb4647bead68bdf8f27670e55989234ac77be1387437ad04e",
    "blockheight": 97,
    "blockindex": 0,
    "blocktime": 1602937028,
    "txid": "53fa062b9e0be60e9263e048e941759f09d820b02b1a9352d3ce64bf157c3545",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 4,
    "generated": true,
    "blockhash": "699a01f27c9f4071ef5fa1db01ecee0b1cea4d717e936f5a689d90b82b40797c",
    "blockheight": 98,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "ee516eabe679ae6e54af57180deff4d91ce51c277c74e1b08618a5da56704242",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 3,
    "generated": true,
    "blockhash": "50851ed32add0fa33db1b4f665ca8132f2109966811aff6a3b8f7f1d103d6165",
    "blockheight": 99,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "896f89d0db10a0a1b00bc0bda0e774fa8e46c20d539739b8f59df1adbb358b8f",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 2,
    "generated": true,
    "blockhash": "25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4",
    "blockheight": 100,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "47986d3580f9b9e1168f4e16cd78decf982ff7b1f75417025d69689eeb3bd9fd",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  },
  {
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "category": "immature",
    "amount": 50.00000000,
    "label": "",
    "vout": 0,
    "confirmations": 1,
    "generated": true,
    "blockhash": "7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37",
    "blockheight": 101,
    "blockindex": 0,
    "blocktime": 1602937029,
    "txid": "f759b7afcf00a9d037e37193a3d74f8e91250ceef46a8d260fc66c304aa6dc86",
    "walletconflicts": [
    ],
    "time": 1602937011,
    "timereceived": 1602937011,
    "bip125-replaceable": "no"
  }
]
root@bitcoin_1:/# bitcoin-cli getnewaddress
bcrt1qfleh8qu94p6ec98pkvdqutumt89slr8pfp67x6

root@bitcoin_1:/# bitcoin-cli getnewaddress tomoichi
bcrt1qlqvsucx8kgaz7nqytke7x5af0ggp8xhk30ynxe
root@bitcoin_1:/# bitcoin-cli getbalance
50.00000000
root@bitcoin_1:/# bitcoin-cli listunspent
[
  {
    "txid": "82a2f72c85876bc460d55002edbb5ef6ad160485da1ea56ee53294d2f30a7136",
    "vout": 0,
    "address": "bcrt1qm7a39u23klsnmp332nz7kez2nhndced6ht23y8",
    "label": "",
    "scriptPubKey": "0014dfbb12f151b7e13d863154c5eb644a9de6dc65ba",
    "amount": 50.00000000,
    "confirmations": 101,
    "spendable": true,
    "solvable": true,
    "desc": "wpkh([51903fd0/0'/0'/1']0324020359d38db9f89d1e75fe3a3406b5e66d806214141e0c0ba76b685d08ff4b)#y8d0fgk6",
    "safe": true
  }
]

root@bitcoin_1:/# bitcoind -version
Bitcoin Core version v0.20.1.0-g7ff64311bee570874c4f0dfa18f518552188df08
Copyright (C) 2009-2020 The Bitcoin Core developers

Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org/> for further information about the software.
The source code is available from <https://github.com/bitcoin/bitcoin>.

This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <https://opensource.org/licenses/MIT>

root@bitcoin_1:/# bitcoin-cli -getinfo
{
  "version": 200100,
  "blocks": 101,
  "headers": 101,
  "verificationprogress": 1,
  "timeoffset": 0,
  "connections": 0,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "chain": "regtest",
  "balance": 50.00000000,
  "keypoolsize": 999,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "warnings": ""
}
root@bitcoin_1:/# bitcoin-cli getblockchaininfo
{
  "chain": "regtest",
  "blocks": 101,
  "headers": 101,
  "bestblockhash": "7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37",
  "difficulty": 4.656542373906925e-10,
  "mediantime": 1602937028,
  "verificationprogress": 1,
  "initialblockdownload": false,
  "chainwork": "00000000000000000000000000000000000000000000000000000000000000cc",
  "size_on_disk": 30476,
  "pruned": false,
  "softforks": {
    "bip34": {
      "type": "buried",
      "active": false,
      "height": 500
    },
    "bip66": {
      "type": "buried",
      "active": false,
      "height": 1251
    },
    "bip65": {
      "type": "buried",
      "active": false,
      "height": 1351
    },
    "csv": {
      "type": "buried",
      "active": false,
      "height": 432
    },
    "segwit": {
      "type": "buried",
      "active": true,
      "height": 0
    },
    "testdummy": {
      "type": "bip9",
      "bip9": {
        "status": "defined",
        "start_time": 0,
        "timeout": 9223372036854775807,
        "since": 0
      },
      "active": false
    }
  },
  "warnings": ""
}

root@bitcoin_1:/# bitcoin-cli getblockhash 100
25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4
root@bitcoin_1:/# bitcoin-cli getblock 25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4
{
  "hash": "25cc07422e00d859504bf4f7e072e9550d176860b5217c823cea5e93aef788c4",
  "confirmations": 2,
  "strippedsize": 214,
  "size": 250,
  "weight": 892,
  "height": 100,
  "version": 536870912,
  "versionHex": "20000000",
  "merkleroot": "47986d3580f9b9e1168f4e16cd78decf982ff7b1f75417025d69689eeb3bd9fd",
  "tx": [
    "47986d3580f9b9e1168f4e16cd78decf982ff7b1f75417025d69689eeb3bd9fd"
  ],
  "time": 1602937029,
  "mediantime": 1602937028,
  "nonce": 3,
  "bits": "207fffff",
  "difficulty": 4.656542373906925e-10,
  "chainwork": "00000000000000000000000000000000000000000000000000000000000000ca",
  "nTx": 1,
  "previousblockhash": "50851ed32add0fa33db1b4f665ca8132f2109966811aff6a3b8f7f1d103d6165",
  "nextblockhash": "7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37"
}
root@bitcoin_1:/# bitcoin-cli getblockcount
101
root@bitcoin_1:/# bitcoin-cli getbestblockhash
7114500ec4d179a09d609bde6cdf5d7c8f84920eca9d4f1efe102a3869591b37

root@bitcoin_1:/# bitcoin-cli getaddressesbylabel tomoichi
{
  "bcrt1qlqvsucx8kgaz7nqytke7x5af0ggp8xhk30ynxe": {
    "purpose": "receive"
  }
}

root@bitcoin_1:/# bitcoin-cli listlabels
[
  "",
  "tomoichi"
]
root@bitcoin_1:/#