- 投稿日:2020-12-27T23:16:03+09:00
ubuntu 20.04 + Geth環境のアカウント設定とether採掘
ubuntuにGethを導入後、アカウントを作成し採掘を行うまでの手順を開設する。
環境構築をまとめた前回の記事はこちら。
https://qiita.com/kanazwk/items/76ffda7b4d6b7dc1ba27
EOAアカウント作成
このノード内で作成されたEOAのリストを表示する。初期は空の状態なので、空白が表示される。
> eth.accounts [] >作成は
personal.newAccount(パスワード文字列)
で実行する。ここではアカウントを2つ作成する。> personal.newAccount("p@ssw0rd01") "0x911e18204582a6de08dd2b1f7540b9167ce93b67" > > eth.accounts ["0x911e18204582a6de08dd2b1f7540b9167ce93b67"]> personal.newAccount("p@ssw0rd02") "0x911e18204582a6de08dd2b1f7540b9167ce93b67" > > eth.accounts ["0x911e18204582a6de08dd2b1f7540b9167ce93b67", "0x634c921bfbad7756c7988ea74e4bdf5e5387620d"]EOAアカウントとは、Externally Owned Account。トランザクションを発生さえるユーザーアカウントで、他のアカウントへのetherの送金やコントラクトコードの実行を行う。etherのマイニングもこのアカウントで行う。
Ethereumのアカウントは2種類あり、もう一方のアカウントはContractと呼ばれる自動エージェントである。EOAから発行されたトランザクションがをトリガーにして、このContractアカウントが持つコントラクトコードが実行される。実行後、Contractアカウントのデータフィールドも更新される。
etherbase(coinbase)のアドレス確認
eth.coinbase
コマンドを実行すると、作成したEOAアカウントの一つが表示される。これをetherbase(coinbase)という。etherbase(coinbase)とは、各ノードでマイニングを行う際に、その報酬を紐づけるEOAのアドレスである。> eth.coinbase "0x911e18204582a6de08dd2b1f7540b9167ce93b67"etherbase(coinbase)は、
eth.accounts[0]
コマンドの実行結果(プライマリアカウントのアドレス)に紐づいている。> eth.accounts ["0x911e18204582a6de08dd2b1f7540b9167ce93b67", "0x634c921bfbad7756c7988ea74e4bdf5e5387620d"] > > eth.accounts[0] "0x911e18204582a6de08dd2b1f7540b9167ce93b67" > eth.accounts[1] "0x634c921bfbad7756c7988ea74e4bdf5e5387620d" >このアドレスは変更することが出来る。変更は
miner.setEtherbase(new_adress)
コマンドを以下のように実行する。> miner.setEtherbase(eth.accounts[1]) true > eth.coinbase "0x634c921bfbad7756c7988ea74e4bdf5e5387620d" >etherの採掘
etherコインの採掘は、
miner.start(thread_num)
で行う。thread_num
には実行するCPUスレッド数を指定する。指定しない場合は、動作環境のCPUコア/スレッド数で自動実行する。> miner.start() null採掘を開始すると、CPU使用率(%usr)は一気に高騰する。
$ dstat -tc ----system---- --total-cpu-usage-- time |usr sys idl wai stl 27-12 22:14:34| 0 0 100 0 0 27-12 22:14:35| 0 1 99 0 0 27-12 22:14:36| 0 0 100 0 0 27-12 22:14:37| 0 0 100 0 0 27-12 22:14:38| 0 0 100 0 0 27-12 22:14:39| 0 0 100 0 0 27-12 22:14:40| 0 0 100 0 0 27-12 22:14:41| 1 0 99 0 0 27-12 22:14:42| 0 0 100 0 0 27-12 22:14:43| 0 0 100 0 0 27-12 22:14:44| 0 0 100 0 0 27-12 22:14:45| 0 0 100 0 0 27-12 22:14:46| 0 0 100 0 0 27-12 22:14:47| 0 0 100 0 0 27-12 22:14:48| 0 0 100 0 0 27-12 22:14:49| 58 1 41 0 0 27-12 22:14:50|100 0 0 0 0 27-12 22:14:51| 99 1 0 0 0 27-12 22:14:52|100 0 0 0 0 27-12 22:14:53| 98 2 0 0 0 27-12 22:14:54| 99 1 0 0 0 27-12 22:14:55| 98 2 0 0 0 27-12 22:14:56| 99 1 0 0 0 27-12 22:14:57| 98 2 0 0 0dstatコマンドが導入されていない場合は、以下のコマンドでインストールしよう。
$ sudo apt install dstat採掘が開始されていることの確認は、
eth.mining
コマンド。trueが表示されていれば採掘が実行中で、falseが表示されれれば停止中の状況だ。> eth.mining true >採掘したetherはブロックを形成する。ブロックチェーンに何番目までブロックが連なっているかを
eth.blockNumber
コマンドで確認することが出来る。> eth.blockNumber 20 >ハッシュレートを確認すると、下記の通り数値が表示される。ハッシュレートとは、1秒あたりの計算力、採掘速度のことで、単位は
hash/s
。この数値が表示されている限り演算が続いている。> eth.hashrate 2455 >etherの採掘停止
採掘の停止は以下のコマンドで行う。
> miner.stop() nullコマンド実行後、即時に採掘が停止しないことがある。採掘開始時も同様で、即座に処理は開始されないが、これらの動きはDAGファイル生成に伴った初回だけの動作のようだ。
DAGという1GBの巨大なファイルを作成しているためであり、DAGファイルは、ブロックチェーンのハッシュ計算のために使用されるデータファイルである。このDAGファイル生成の間、採掘処理の開始・終了処理が実行される。AMD Ryzen 7 で10分程度要した。
DAGファイルは実行ユーザのホームディレクトリ直下
.ethash
フォルダ内に作成されていた。$ ls -lh /home/kana/.ethash 合計 2.1G -rw-rw-r-- 1 kana kana 1.0G 12月 27 22:24 full-R23-0000000000000000 -rw-rw-r-- 1 kana kana 1.1G 12月 27 22:35 full-R23-290decd9548b62a8採掘したブロックの確認
採掘したブロックの内容を表示する。
eth.blockNumber
コマンドの表示結果をもとに、任意のブロックをeth.getBlock(number)
コマンドで確認する。> eth.getBlock(19) { difficulty: 132160, extraData: "0xd883010919846765746888676f312e31352e36856c696e7578", gasLimit: 131749155, gasUsed: 0, hash: "0xf38872f5d72d585f6c8ba761b14d2e1c2445686c0fa04a0e13904bf772a7e918", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x634c921bfbad7756c7988ea74e4bdf5e5387620d", mixHash: "0x29b6d7cd55847d90b0d91853093ece9ded53babc5308dbedfc60f4af52c77168", nonce: "0x3de0229868f19a05", number: 19, parentHash: "0x02af21c8c989e4d2ac63846c3acb8ef708c16d86006a0367994ca585b0c35c3e", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 537, stateRoot: "0x9cdf5e057662eafa56503ed8d8fedb7580605d22961a5591665d1f5beea20618", timestamp: 1609075546, totalDifficulty: 2516544, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] } > > eth.getBlock(20) { difficulty: 132224, extraData: "0xd883010919846765746888676f312e31352e36856c696e7578", gasLimit: 131620495, gasUsed: 0, hash: "0xb53bf57600f78f9f4d0015b9e15f0901b99049d23e65ebc9dfa6460eba8e83ae", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x634c921bfbad7756c7988ea74e4bdf5e5387620d", mixHash: "0xd62344a2afbd419ce1e7c38c8664fcdeb35340a4de57fba2c2e5e7e94bdf42fc", nonce: "0x45064ec15863ac8d", number: 20, parentHash: "0xf38872f5d72d585f6c8ba761b14d2e1c2445686c0fa04a0e13904bf772a7e918", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 537, stateRoot: "0xd59b4f9158a04312b607464ac5c331142fa2c18f1d324b512f310791b7010a18", timestamp: 1609075547, totalDifficulty: 2648768, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] } > > eth.getBlock(21) null >20ブロック目の
parentHash
には、19ブロック目のハッシュ値が記されている。parentHash
には、親ブロックのブロック・ヘッダ・ハッシュを指す。19ブロックの子が20ブロック目であるという意味である。このようにブロックが連なるように台帳に記録される。ブロックチェーンと呼ばれる分かりやすい部分だ。
採掘報酬の確認
採掘した報酬の確認は
eth.getBalance(eth.accounts[Number])
コマンドで、EOAアカウントを指定する。eth.accounts
コマンドでEOAアカウント情報を確認し、それぞれ実行してみると、coinbaseである[1]番目のアカウントにetherの持ち高が表示される。採掘に成功していると判断できる。「wei」の単位 で持ち高が表示されるコマンドだ。> eth.coinbase "0x634c921bfbad7756c7988ea74e4bdf5e5387620d" > > eth.accounts ["0x911e18204582a6de08dd2b1f7540b9167ce93b67", "0x634c921bfbad7756c7988ea74e4bdf5e5387620d"] > > eth.getBalance(eth.accounts[0]) 0 > eth.getBalance(eth.accounts[1]) 100000000000000000000単位を「ether」で表示するには
web3.fromWei(eth.getBalance(eth.accounts[Number]),"ether")
コマンドを用いる。> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 0 > web3.fromWei(eth.getBalance(eth.accounts[1]),"ether") 100丁度100ether。
まとめ
CPU負荷を見ながら操作すると、採掘(マイニング)の処理負荷を実感できるので、ぜひやってみてほしい。
- 投稿日:2020-12-27T21:41:14+09:00
USB のブロックデバイス (USB メモリや HDD)を列挙する方法 (Part2)
USB のブロックデバイス (USB メモリや HDD)を列挙する方法 (Part2)
USB のブロックデバイス (USB メモリや HDD)を列挙する方法 で書いたのとは別の方法で、USB のブロックデバイスを列挙する。
方法
ls /dev/disk/by-id/usb* -1 | xargs readlink -f | grep -E '[a-z]+$'解説
/dev/disk/by-id/usb*
を実行すると、USB のブロックデバイス一覧とその実デバイスへのシンボリックリンクを取得できる。$ ls /dev/disk/by-id/usb* -l lrwxrwxrwx 1 root root 9 12月 27 21:28 /dev/disk/by-id/usb-BUFFALO_USB_Flash_Disk_xxxxxxxxx-0:0 -> ../../sdb lrwxrwxrwx 1 root root 10 12月 27 21:28 /dev/disk/by-id/usb-BUFFALO_USB_Flash_Disk_xxxxxxxxx-0:0-part1 -> ../../sdb1
readlink -f
により、シンボリックリンクの実体を取得できるので、以下で USB のブロックデバイスの実体のリストを取得できるが、$ ls /dev/disk/by-id/usb* -1 | xargs readlink -f /dev/sdb /dev/sdb1
/dev/sdb1
などパーティションに対するデバイスファイルも表示されるので、grep で正規表現を使ってフィルタリングする。$ ls /dev/disk/by-id/usb* -1 | xargs readlink -f | grep -E '[a-z]+$' /dev/sdb
- 投稿日:2020-12-27T20:48:21+09:00
USB のブロックデバイス (USB メモリや HDD)を列挙する方法
USB のブロックデバイス (USB メモリや HDD)を列挙する方法
USB のブロックデバイス (USB メモリや HDD)を列挙する方法 (Part2) の方法もあります。
方法
ls /sys/block/ -1 | \ xargs -I{} echo /sys/block/{} | \ xargs readlink | \ grep usb | sed -e 's!.*/\([a-z]\+\)!\1!'解説
ブロックデバイスの列挙
/sys/block/
以下を列挙すると、linux 上のブロックデバイスを列挙できる。- 各項目はシンボリックリンクになっている。
- usb のデバイスの場合はシンボリックリンクのパスに
usb
という文字列が含まれる。ls /sys/block/ -l 合計 0 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop0 -> ../devices/virtual/block/loop0 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop1 -> ../devices/virtual/block/loop1 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop10 -> ../devices/virtual/block/loop10 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop2 -> ../devices/virtual/block/loop2 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop3 -> ../devices/virtual/block/loop3 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop4 -> ../devices/virtual/block/loop4 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop5 -> ../devices/virtual/block/loop5 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop6 -> ../devices/virtual/block/loop6 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop7 -> ../devices/virtual/block/loop7 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop8 -> ../devices/virtual/block/loop8 lrwxrwxrwx 1 root root 0 12月 27 19:08 loop9 -> ../devices/virtual/block/loop9 lrwxrwxrwx 1 root root 0 12月 27 19:08 sda -> ../devices/pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0/block/sda lrwxrwxrwx 1 root root 0 12月 27 19:19 sdb -> ../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb lrwxrwxrwx 1 root root 0 12月 27 19:08 sr0 -> ../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sr0 tUSB のブロックデバイスを列挙する
ls /sys/block/ -1
の出力をxargs
に渡して、更にreadlink
でシンボリックリンクの実体を列挙する$ ls /sys/block/ -1 | xargs -I{} echo /sys/block/{} | xargs readlink | grep usb ../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdbUSB のブロックデバイスの部分を抽出する
sed -e 's!.*/\([a-z]\+\)!\1!'
のような正規表現を使うことで...block/sdb
の最後のsdb
の部分を抽出する。最終的に以下のコマンドでデバイスファイルの部分 (sdb など) を抽出できる。
ls /sys/block/ -1 | \ xargs -I{} echo /sys/block/{} | \ xargs readlink | \ grep usb | sed -e 's!.*/\([a-z]\+\)!\1!'以下のようなコマンドにすると
/dev/sdb
という形式で出力できる。ls /sys/block/ -1 | \ xargs -I{} echo /sys/block/{} | \ xargs readlink | \ grep usb | sed -e 's!.*/\([a-z]\+\)!\1!' | \ xargs -I{} echo /dev/{}参考情報
ブロックデバイスのサイズ
以下のコマンドで
/dev/sdb
のブロックデバイスのセクタサイズを取得できる。$ cat /sys/block/sdb/size 15646720
/sys/block/sdb/size
の値に512
を掛けることでブロックデバイス全体のサイズをバイト単位で取得できる。
- 投稿日:2020-12-27T20:34:53+09:00
ubuntu20.04 + Gethの導入手順
ubuntu 20.04にEtherum実行環境をインストールする。Virtual Boxへの導入手順はこちらを参照されたし。
https://qiita.com/kanazwk/items/5af85437ec556e23ef40今回の参考サイトはこちら。
https://book.ethereum-jp.net/以下にユーザ名"kana"で実行したログをもとにまとめた。
Gethのインストール
以下のコマンドを実行し、Gethをインストールする。
Geth:Go-Ethereum。Ethereumのクライアントソフトウェア。
PPA:Personal Package Archive。デフォルトの公式リポジトリに含まれない個人アーカイブのこと。
add-apt-repository -y
でEthereum配布元のリポジトリを指定し、ローカルのパッケージリストに追加する。$ sudo add-apt-repository -y ppa:ethereum/ethereum [sudo] kana のパスワード: ヒット:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease 取得:2 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB] 取得:3 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease [101 kB] 取得:4 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 DEP-11 Metadata [263 kB] カ荳シ倖5 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB] カ荳シ倖6 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal InRelease [17.5 kB] 取得:7 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 DEP-11 Metadata [205 kB] 取得:8 http://jp.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 DEP-11 Metadata [2,468 B] 取得:9 http://jp.archive.ubuntu.com/ubuntu focal-backports/universe amd64 DEP-11 Metadata [1,768 B] 取得:10 http://security.ubuntu.com/ubuntu focal-security/main amd64 DEP-11 Metadata [24.2 kB] 取得:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [56.5 kB] 取得:12 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main i386 Packages [500 B] 取得:13 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main amd64 Packages [3,072 B] 取得:14 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main Translation-en [880 B] 898 kB を 3秒 で取得しました (348 kB/s) パッケージリストを読み込んでいます... 完了 $ローカルのパッケージリストを更新することで、インストール可能なものとしてGethが認識される。
$ sudo apt-get update ヒット:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease ー・牴蜑・ http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease ー・牴蜑・ http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease ヒット:4 http://security.ubuntu.com/ubuntu focal-security InRelease ヒット:5 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal InRelease パッケージリストを読み込んでいます... 完了 $Gethのインストール。結構長いこと時間がかかる。数分程度。
$ sudo apt-get install ethereum パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: libfprint-2-tod1 これを削除するには 'sudo apt autoremove' を利用してください。 以下の追加パッケージがインストールされます: abigen bootnode clef evm geth puppeth rlpdump 以下のパッケージが新たにインストールされます: abigen bootnode clef ethereum evm geth puppeth rlpdump アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 0 個。 36.0 MB のアーカイブを取得する必要があります。 この操作後に追加で 127 MB のディスク容量が消費されます。 続行しますか? [Y/n] y 取得:1 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main amd64 abigen amd64 1.9.25+build24398+focal [5,451 kB] 取得:2 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main amd64 bootnode amd64 1.9.25+build24398+focal [5,285 kB] 取得:3 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal/main amd64 clef amd64 1.9.25+build24398+focal [8,024 kB] 46% [3 clef 7,598 kB/8,024 kB 95%] 225 kB/s 1分 18秒 : thereum (1.9.25+build24398+focal) を展開しています... rlpdump (1.9.25+build24398+focal) を設定しています ... puppeth (1.9.25+build24398+focal) を設定しています ... clef (1.9.25+build24398+focal) を設定しています ... bootnode (1.9.25+build24398+focal) を設定しています ... geth (1.9.25+build24398+focal) を設定しています ... evm (1.9.25+build24398+focal) を設定しています ... abigen (1.9.25+build24398+focal) を設定しています ... ethereum (1.9.25+build24398+focal) を設定しています ... $gethコマンドを実行してみて、インストールされたことを確認する。
$ geth --helpパッケージの最新化
インストールしたGethパッケージを最新化する。
apt-get update
でローカルのパッケージリストを最新化し、apt-get upgrade
でパッケージを更新する。特に更新はなかった。$ sudo apt-get update ヒット:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease ヒット:2 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease ヒット:3 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease ヒット:4 http://ppa.launchpad.net/ethereum/ethereum/ubuntu focal InRelease 取得:5 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB] 取得:6 http://security.ubuntu.com/ubuntu focal-security/main amd64 DEP-11 Metadata [24.3 kB] 取得:7 http://security.ubuntu.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [56.6 kB] 190 kB を 2秒 で取得しました (81.1 kB/s) パッケージリストを読み込んでいます... 完了 $$ sudo apt-get upgrade パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 アップグレードパッケージを検出しています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: libfprint-2-tod1 これを削除するには 'sudo apt autoremove' を利用してください。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。 $Genesisファイルを作成する
ブロックチェーンネットワーク上の最初のBlockであるGenesisブロックの情報を記述したGenesisファイルを作成する。
$ pwd /home/kana $ mkdir ./eth_private_net $ ls -ld ./eth_private_net/ drwxrwxr-x 2 kana kana 4096 12月 27 18:39 ./eth_private_net/ $ cd eth_private_net/ $ touch myGenesis.jsonmyGenesis.jsonファイルには下記を記述する。
myGenesis.json{ "config": { "chainId": 15 }, "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "", "gasLimit": "0x8000000", "difficulty": "0x4000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": {} }Genesisブロックの初期化
作成したGenesisファイルの内容で、ブロックチェーン情報を初期化する。
$ geth --datadir /home/kana/eth_private_net init /home/kana/eth_private_net/myGenesis.json INFO [12-27|18:46:13.842] Maximum peer count ETH=50 LES=0 total=50 INFO [12-27|18:46:13.842] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory" INFO [12-27|18:46:13.844] Set global gas cap cap=25000000 INFO [12-27|18:46:13.844] Allocated cache and file handles database=/home/kana/eth_private_net/geth/chaindata cache=16.00MiB handles=16 INFO [12-27|18:46:13.855] Writing custom genesis block INFO [12-27|18:46:13.855] Persisted trie from memory database nodes=0 size=0.00B time="13.035 μs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [12-27|18:46:13.856] Successfully wrote genesis state database=chaindata hash="7b2e8b …7e0432" INFO [12-27|18:46:13.856] Allocated cache and file handles database=/home/kana/eth_private_net/geth/lightchaindata cache=16.00MiB handles=16 INFO [12-27|18:46:13.864] Writing custom genesis block INFO [12-27|18:46:13.865] Persisted trie from memory database nodes=0 size=0.00B time="6.663μs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [12-27|18:46:13.866] Successfully wrote genesis state database=lightchaindata hash="7b2e8b…7e0432"
--datadir
で指定したディレクトリ配下にデータが格納される。下記のようなディレクトリ構成が自動生成された。$ ls -lR eth_private_net/ eth_private_net/: 合計 12 drwx------ 4 kana kana 4096 12月 27 18:46 geth drwx------ 2 kana kana 4096 12月 27 18:46 keystore -rw-rw-r-- 1 kana kana 411 12月 27 18:41 myGenesis.json eth_private_net/geth: 合計 12 -rw-r--r-- 1 kana kana 0 12月 27 18:46 LOCK drwxr-xr-x 2 kana kana 4096 12月 27 18:46 chaindata drwxr-xr-x 2 kana kana 4096 12月 27 18:46 lightchaindata -rw------- 1 kana kana 64 12月 27 18:46 nodekey eth_private_net/geth/chaindata: 合計 16 -rw-r--r-- 1 kana kana 1245 12月 27 18:46 000001.log -rw-r--r-- 1 kana kana 16 12月 27 18:46 CURRENT -rw-r--r-- 1 kana kana 0 12月 27 18:46 LOCK -rw-r--r-- 1 kana kana 435 12月 27 18:46 LOG -rw-r--r-- 1 kana kana 54 12月 27 18:46 MANIFEST-000000 eth_private_net/geth/lightchaindata: 合計 16 -rw-r--r-- 1 kana kana 1245 12月 27 18:46 000001.log -rw-r--r-- 1 kana kana 16 12月 27 18:46 CURRENT -rw-r--r-- 1 kana kana 0 12月 27 18:46 LOCK -rw-r--r-- 1 kana kana 435 12月 27 18:46 LOG -rw-r--r-- 1 kana kana 54 12月 27 18:46 MANIFEST-000000 eth_private_net/keystore: 合計 0 $Gethの起動
gethを起動する。
--networkid "15"
は、同じnetworkidで起動しているノード(peer)が探しに来るという代物。デフォルトで走査に行くが、今回--nodiscover
を指定しているのでその処理は行われない。console
でトランザクション処理を操作できるコンソールを起動することが出来る。バックグラウンドで起動しておいて、後でコンソールを起動することもできる。$ geth --networkid "15" --nodiscover --datadir "/home/kana/eth_private_net" console 2>> /home/kana/eth_private_net/geth_err.log Welcome to the Geth JavaScript console! instance: Geth/v1.9.25-stable-e7872729/linux-amd64/go1.15.6 at block: 0 (Thu Jan 01 1970 09:00:00 GMT+0900 (JST)) datadir: /home/kana/eth_private_net modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 To exit, press ctrl-d >Genesisブロックの表示
Genesisブロックの内容を表示する。作成した
myGenesis.json
の内容を読み込んでいることを確認する。> eth.getBlock(0) { difficulty: 16384, extraData: "0x", gasLimit: 134217728, gasUsed: 0, hash: "0x7b2e8be699df0d329cc74a99271ff7720e2875cd2c4dd0b419ec60d1fe7e0432", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x3333333333333333333333333333333333333333", mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000", nonce: "0x0000000000000042", number: 0, parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 507, stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", timestamp: 0, totalDifficulty: 16384, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] } >まとめ
導入はここまで。次回はアカウント作成とマイニングをしてみる。
- 投稿日:2020-12-27T11:52:35+09:00
amazon-dashで、スキャンするNICを指定する方法
amazon-dashでNICを明示的に指定
AmazonDashボタンをIoTボタン化するOSS, amazon-dashのTIPSである。
amazon-dashにて、discoveryもしくはrunする際、複数のNICが存在すると、意図しないNICのパケットを監視してしまう場合がある。
たとえば、eth0, eth1が存在する場合、AmazonDashボタンが接続されているNICがeth1である場合でも、eth0をスキャンしてしまう場合がある。
その場合、以下のTIPSにてスキャンするNICを明示的に指定する必要がある。実行環境
以下の環境で実行した際の結果を使用した。
# cat /etc/debian_version 10.7 # python --version Python 2.7.16 # pip --version pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7) # amazon-dash Welcome to Amazon-dash v1.4.0 using Python 2.7.16discoveryでのNICの指定
discoveryを実行する場合、オプションでNICを指定可能である。
example
# amazon-dash discovery --interface eth1Document
ヘルプに書いてあった
# amazon-dash discovery --help Welcome to Amazon-dash v1.4.0 using Python 2.7.16 December 31 is the last day to block requests from your Amazon-dash buttons to Amazon servers. In 2020 your buttons can be bricked in an update from Amazon servers. Usage: amazon-dash discovery [OPTIONS] Discover Amazon Dash device on network. Options: --interface TEXT Network interface. --help Show this message and exit.runでのNICの指定
run、もしくはサービス化(systemctlから起動)の場合、
/etc/amazon-dash.yml
にて指定を行う。example
settings: interface: eth1Document
/etc/amazon-dash.yml
そのものに記載は無いが、ソースコード内で確認が出来る。
該当のファイルは、config.py
で、JSONのスキーマで存在を確認出来る。18:#: Json-schema validation 19:SCHEMA = { 20: "title": "Config", 21: "type": "object", 22: "properties": { 23: "settings": { 24: "type": "object", 25: "properties": { 26: "delay": { 27: "type": "integer" 28: }, 29: "interface": { 30: "type": "string" 31: },NICの名前について
NICの名前そのものはamazon-dash内では特にバリデーションをしておらず、そのまま
scan.py
のscan_devices
に渡しているだけのようである。
要には、OSが認識できていれば、なんでも良いらしい。
物理NICの他、VLAN Interface(例:eth1.100
)でも正常に動作をしている。試しに、無効なインターフェース名を渡したところ、こんな感じのエラーを吐いて止まった。
NIC周りを変更した後にトラブルになった際は、参考にして欲しい。# amazon-dash discovery --interface foo Welcome to Amazon-dash v1.4.0 using Python 2.7.16 (snip) OSError: foo: No such device exists (SIOCGIFHWADDR: No such device) Exception IOError: IOError(19, 'No such device') in <bound method L2ListenSocket.__del__ of <scapy.arch.linux.L2ListenSocket object at 0xb6744f0c>> ignored # echo $? 1
- 投稿日:2020-12-27T11:35:34+09:00
「nlコマンドAdvent Calendar 2020」まとめ
各記事のサマリー
初心者向け記事
- 12/1 はじめてのnlコマンド
- 12/2 様々なnlコマンドの実装
- 12/3 nlコマンドの使い方を調べる
このあたりは
nl
に限らず、各コマンド共通だと思います。
オプション解説記事
- 12/4 行番号のフォーマットを変更するnlコマンドのnオプション
- 12/5 行番号の桁数を変更するnlコマンドのwオプション
- 12/6 行番号のセパレータを変更するnlコマンドのsオプション
- 12/9 セクションの区切り文字列を変更するnlコマンドのdオプション
- 12/10 行番号の付番方式を変更するnlコマンドのb,f,hオプション
- 12/12 行番号の初期値を変更するnlコマンドのvオプション
- 12/13 行番号の増加値を変更するnlコマンドのiオプション
- 12/14 論理ページごとに行番号をリセットしないnlコマンドのpオプション
- 12/16 行番号を付加する空行の単位を変更するnlコマンドのlオプション
オプションは11個あり、9本の記事書きました。
挙動解説記事
- 12/7 nlコマンドでの空行の取り扱い
- 12/8 nlコマンドの論理ページ
- 12/11 nlコマンドでの正規表現の利用
- 12/15 nlコマンドの通し番号制御
- 12/17 nlコマンドの論理ページを無効化する
- 12/19 nlコマンドの最大値
基本的な動作仕様と注意点などについて書きました。
代替方法に関する記事
- 12/18 nlコマンドで素数を求める
seq
の代わりにnl
を使ってみる。
- 12/20 エディタでnlコマンドを代替する
- 12/21 スクリプトでnlコマンドを代替する
- 12/22 様々なコマンドでnlコマンドを代替する
他のコマンドで
nl
する。
その他の記事
- 12/23 nlコマンドの処理性能
性能比較をしてみました。
grep
とcat
速すぎ。
- 12/24 nlコマンドの開発に参加する
- 12/25 未来のnlコマンド
nl
に限らずコマンドをよりよくしていくための記事です。
他のAdvent Calendarへの寄稿
NetBSD AC
POSIX非互換と不具合報告のお話。
AIIT(産業技術大学院大学) AC
- 12/23 AIIT(産業技術大学院大学)で学ぶnlコマンド
過去の話をまとめたポエム。
ふりかえり
横浜線の停車駅を表示する
特に思い入れのあるシェル芸。coreutilsの
nl
で-i 0
ができるようになったのでやってみたかった。BSD$ nl -w 1 -v 0 -i 0 -b p'[川山菊新鴨田相橋八片]' yokohamaline | nl -w 1 -i 0 | tr '01' '快各' | expand 各 快 東神奈川 各 大口 各 快 菊名 各 快 新横浜 各 小机 各 快 鴨居 各 快 中山 各 十日市場 各 快 長津田 各 成瀬 各 快 町田 各 古淵 各 淵野辺 各 矢部 各 快 相模原 各 快 橋本 各 快 相原 各 快 八王子みなみ野 各 快 片倉 各 快 八王子
不具合報告
- coreutils
nl
での-d
不具合- coreutils
seq
とsleep
でのinf
トークンのドキュメント不足- NetBSD(macOS)
nl
での-s
オプションのPOSIX非互換記事執筆中の検証で見つけた不具合をリアルタイムに報告していました。連載中に修正方針が固まったものについては、過去記事も修正加筆しています。
今回書けなかった記事
- coreutilsの
cat -n
はなぜ速いのか- FreeBSDの
nl
- BusyBoxのビルドオプション
pr
と組み合わせる- POSIXの策定経緯
今回は調査不足でまとまらず記事にできませんでした。そのうち書くかもしれません。
感想
- 疲れた
- 思いつきで始めた(頭おかしい)ので構成なども考えながら
- 記事も文章になってないところたくさん…
説明順がかなり重要で依存関係がヤバい
結果的にソフトウェア品質が高まったのでやって良かった
調べれば調べるほどわからないことがたくさん
nlコマンドぜんぜんわからん
おしまい
- 投稿日:2020-12-27T02:19:58+09:00
XPS13(7390)にArchを入れた(備忘録)
はじめに
XPS13(7390)にArchを入れた時の手順とハマったことの備忘録.
参考にしたサイト
Arch wiki インストールガイド
My Arch Linux Install and Configuration on a Dell XPS 13 7390 (2019)
メモ:Dell XPS 13 (7390)にArch Linuxをインストールしたときのメモ
Arch Linux - wifi-menuがないのでiwctlコマンドで無線接続する基本的にはこの辺を参考にしました.
ハマったことと解決策
Critical Error Message No bootable devices found.
->ArchLinuxのインストール(3つのブート方式ごとの設定)
Rebootしたら,Error:device '/dev/mapper/vg0-root' not found.
->[SOLVED] Installed LTS kernel- device '/dev/mapper/vg0-root' not found
ここが一番ハマった.../etc/mkinitcpio.confHOOKS=(base udev autodetect keyboard keymap consolefont modconf block lvm2 encrypt filesystems fsck)/etc/default/grubGRUB_CMDLINE_LINUX=”cryptdevice=UUID=[UUIDofdevice]:vg0 root=/dev/mapper/vg0-root”UUIDは下のコマンドで確認.
# cryptsetup luksUUID /dev/nvme0n1p2インストール後にReboot->wifi接続できない
->iw,dhcpcd,wpa_supplicantをあらかじめインストールしておく.
My Arch Linux Install and Configuration on a Dell XPS 13 7390 (2019)wifi接続する
-> wpa_supplicant
-> netctl
-> Arch Linux - 無線 LAN 接続
-> ワイヤレス設定この辺が役に立ちました.wifiはnetctlではなくNetworkManagerにしたらうまくいきました.またうまくドライバが動作しない時は,他のドライバと競合していないか確かめるのが良いです.
# systemctl list-unit-files --state=enabled
- 投稿日:2020-12-27T01:03:33+09:00
タブレットPCをManjaro i3環境にした、タッチスクリーンの良さが消えた
TECLAST X4にManjaro i3を入れた作業メモ。
タッチスクリーンで2-in-1が推しのはずのX4に、マウスレスでいけちゃうウィンドウマネージャーをいれてしまい、迷走してます。
目的
- Manjaroで物書きできる環境を用意すること、ただやってみたかっただけ
用意環境
- TECLAST X4 11.6インチ
- USBフラッシュメモリ 8GB
持ち歩くには微妙な重量のタブレットPCです。
結果
達成
- Manjaro i3、動いた
- タイル型いいね!
- GitHubにアクセスして、Twitter見て、Qiita投稿できる程度にはなった
未達
OSインストールの簡単な流れ
- Manjaro i3のisoファイルを取得
- Rufusでisoファイルから起動用のUSBフラッシュドライブ作成
- USBブートしてインストール開始
- PCを起動し、起動ロゴが表示されいているときに
ESC
キーを入力することでBIOS画面に入る- Save&Exitタブの下の方に起動元を選択できる一覧があるので、差し込んだUSBフラッシュドライブを選択
- 起動確認画面が表示され、tz, keytable, langを変更せずそのままBoot
- LIVE Manjaro i3環境が起動し、画面中央に「Manjaro Hello」が表示される
- 右下にネットワークっぽいアイコンがあるので、Wifi等に接続する
- Manjaro Hallorの下部にある「Launch installer」を選択
- インストーラーが文字化けしてまったく文字という文字が表示されない場合は、インストーラー最初の画面の真ん中下にプルダウンがあり、そこから言語を選択できるのでEnglishを選択
- 以降はインストールウィザードに従う、tzやkeytableはここでも変更可能
- 全行程が完了したら再起動
OSインストール終わった以降
- Modは、Winキーが初期値だった
- Terminalは、Mod + Returnが初期ショートカットキーだった
まずはアップデート
# 近場リポジトリ探し(fasttrackだと総スキャンで時間かかるので $ sudo pacman-mirrors --geoip $ sudo pacman -Syu最低限必要なパッケージ
# すでに入っていれば再インストール扱いになる $ sudo pacman -S gvim git zsh # こちらも念の為 $ sudo pacman -S ntp $ timedatectrl status $ sudo timedatectrl set-ntp true続いてAUR
$ yay -S google-chrome $ yay -S visual-studio-code-bin # バックアップツール $ yay -S timeshift ※dmenuからtimeshift-launcherで初期設定ターミナル環境(Zsh + Prezto)
$ zsh $ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" $ setopt EXTENDED_GLOB for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" done $ chsh -s /usr/bin/zsh日本語入力
$ sudo pacman -S fcitx-im fcitx-configtool fcitx-mozc fcitx-gtk2 fcitx-gtk3 fcitx-qt5~/.xprofile# Key repeat xset r rate 200 30(キーリピート # ctrl/caps入れ替え setxkbmap -option "ctrl:nocaps" # Japanese input method export LANG="ja_JP.UTF-8" export XMODIFIERS="@im=fcitx" export XMODIFIER="@im=fcitx" export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export DefaultIMModule=fcitx~/.i3/config# Autostart applications exec --no-startup-id fcitx日本語フォント
$ sudo pacman -S adobe-source-han-sans-jp-fonts $ sudo pacman -S noto-fonts-emojiフォント設定の手順
- Ctrl + Mod + b
- 7 System & Settings
- 1 Appeearance
- 3 Set font
- Source Han Sans JP Normalを選択
Conkyガジェットの文字化け回避で英語表記に
/usr/bin/start_conky_maia#!/bin/bash LC_ALL=C conky -c /usr/share/conky/conky1.10_shortcuts_maia && LC_ALL=C conky -c /usr/share/conky/conky_maia && exit 0省電力
$ yay -S tlp powertop $ sudo tlp start壁紙変更
$ nitrogen
その他、個人設定
~/.i3/config############################# ## user settings ## ############################# # 日本語入力 exec --no-startup-id fcitx # Alt + F4でウィンドウ閉じるバインドに bindsym Mod1+F4 kill # ブラウザ起動のショートカットキー bindsym $mod+Shift+Return exec google-chrome-stable # focus対象の移動をvimに合わせて変更 bindsym $mod+h focus left bindsym $mod+j focus down bindsym $mod+k focus up bindsym $mod+l focus right # focusされたwindow自体の移動 bindsym $mod+Shift+h move left bindsym $mod+Shift+j move down bindsym $mod+Shift+k move up bindsym $mod+Shift+l move right # 分割する方向の指定 bindsym $mod+backslash split h;exec notify-send 'tile horizontally' bindsym $mod+minus split v;exec notify-send 'tile vertically' bindsym $mod+Ctrl+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdfさいごに
見事にマウスレスが達成されてタッチスクリーンが活用されていません!どうにかタッチする機会を検討します!
いずれにしてもやってみた系の作業もQiitaもとても久しぶりでしたが、年末ということもあり気分転換としてもよかったです。