💖symbol-bootstrapNodeを💕symbol-shoestringNodeに変換するわっ💖うふふっ🌺

えっと

https://pypi.org/project/symbol-shoestring/

https://qiita.com/amenoudume/items/80cc6f081cb3119ea035

前回はぁ？symbol-shoestringの導入　インストールをやったからぁ？
**今からnodeを作って行きましょうね🌻**

# 🌺用意する物🌺
**bootstrapNode**と
※今回はぁ？bootstrapNodeの場所は `/home/dusanjp10/pasomi`になりまぁす
**bootstrapNodeの mainAccountの秘密鍵**ね

|nodeの setupに必要な物||
|:-|:-:|
|ⓐca.key.pem|mainAccount|
ⓑshoestring.ini|設定ファイル
ⓒoverrides.ini|設定上書きファイル

# ①　🌺symbol-shoestringが動作する環境に入るわ🌺
前回の symbol-shoestringインストール時に　環境名 'env' を作成しているから　そこに入りましょうね

```
source env/bin/activate
```
こぉなるわ　shoestringが動く環境に入ったわ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/f0186766-15e9-4985-b142-b38a93234b88.png)

# ②　🌺作業ディレクトリを作成して中に入るわ🌺
```
mkdir ss_pasomi && cd ss_pasomi
```

# ③　🌺ⓐca.key.pemの作成をするわ🌺
```
python3 -m shoestring pemtool --output ca.key.pem --ask-pass
```
|設定項目|役割|
|:-|:-:|
|--output|出力先を設定するわ|
|--ask-pass|パスワードを設定したい時に使うわ|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/3efdb5ce-09d7-4cfa-a174-fa221d246893.png)

:::note info
新規の mainAccountを作成したい時は
```
openssl genpkey -algorithm ed25519 -out ca.key.pem
```
暗号化した新規の mainAccountを作成したい時は
```
openssl genpkey -algorithm ed25519 -out ca

openssl pkey -in ca -out ca.key.pem -aes256

rm -f ca
```
:::
　
**出来上がった ca.key.pemの秘密鍵の見方はこぉするの**
```
openssl pkey -in ca.key.pem -noout -text
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/5e4507e3-32f8-4260-b4b1-9e2b2433335b.png)
表示から ' : ' を取ると秘密鍵になるわ
暗号化している場合はパスワードを聞かれるわ

# ④　🌺ⓑshoestring.iniの作成をするわ🌺
設定ファイルの格納ディレクトリを作るの
```
mkdir shoestring
```
　
shoestring.iniを　shoestring/ に作成するわ
```
python3 -m shoestring init shoestring/shoestring.ini --package mainnet
```
|設定項目|役割|
|:-|:-:|
|--package|mainnetか saiを選択してね

--packageを入れない時は mainnetになるわ
　
```
vi shoestring/shoestring.ini
```
shoestring.iniは？最初はこぉなってるの　これを編集するわ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/f9344369-f49e-43d8-83bc-2b3ab77dac6f.png)
　
上の画像を枠で囲った部分がこれね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/3aeb094b-7026-4c5a-bd34-d681d049a6b9.png)
|設定項目|役割|選択の種類|
|:-|:-:|:-:|
|features|nodeの種類を決めるわ|API/HARVESTER/VOTING|
|apiHttps|https-proxyを使うかを決めるわ|true/false|
|lightApi|lightApiを使うか決めるわ|true/false|
|caCommonName|node証明書に出て来るわ|'CA paspmi'にしたわ|
|nodeCommonName|node証明書に出て来るわ|'pasomi'にしたわ|

 

こうしたわ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/6896c04a-c971-4ea8-bd7b-8124986d1434.png)
nodeは API | HARVESTER
https-proxyを使うわ
lightApiは使わないわ
今回はこれで行くわ
　
**[node]項目の featuresと lightApiの関係よっ**
|features|lightApi|node形態|
|:-|:-:|:-:|
|API　HARVESTER|false|dual|
|API　HARVESTER|true|peer+簡易api|
|HARVESTER|falseと true|peer|
|API|false|dual（harvest無し）|
|API|true|peer+簡易api(harvest無し)|
|無し|無し|peer|

:::note alert
🚨**ちゅうい**🚨
caCommonNameとぉ
nodeCommonNameの
内容が同じだと？**nodeの apiが開始出来ない**からぁ？
気をつけてねっ🚨
:::
 


# ⑤　🌺ⓒoverrides.iniの作成をするわ🌺
overrides.iniを作成するわ
これは言うなれば　上書き設定ね
```
vi shoestring/overrides.ini
```
　
内容は下の内容をコピペしてね
```
[user.account]
enableDelegatedHarvestersAutoDetection = true

[harvesting.harvesting]
maxUnlockedAccounts = 5
beneficiaryAddress = 

[node.node]
minFeeMultiplier = 100

[node.localnode]
host = 
friendlyName = 
```
それぞれの項目は見た覚えがあると思うの
それぞれを設定してね
　
編集結果よ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/13b39952-56e9-4941-b5de-17d458436c5a.png)
　
　
 
# ⑥　🌺（新規で nodeを建てる時は不要）bootstrapNodeから remote/vrf/transport accountsを導入するわ🌺
```
python3 -m shoestring import-bootstrap --config shoestring/shoestring.ini --bootstrap ~/pasomi/target --include-node-key
```
|設定項目|役割|
|:-|:-:|
|--config|shoestring.iniの場所よ|
|--bootstrap|bootstrapNodeの targetの場所よ|
|--include-node-key|node.key.pem(transportAccount)を導入させるわ|

votingNodeの場合はこの命令で votingKeyも導入されるわ
　
実行画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/5ced6aaf-85c1-4456-9a90-1b0d1caa63b8.png)
　
実行後の shoestring/shoestring.iniの内容は　ここが変わるの
[imports]の各項目に、インポートするファイルやディレクトリのパスが記述されるわ🌺
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/998e4176-f112-45db-a8be-a3a9b76b9cbf.png)
　
harvester = config-harvesting.propertiesの場所を指定
voter = votingKeyが入っているディレクトリの場所を指定
nodeKey = node.key.pemの場所を指定
だからぁ？これらを保存して？それぞれの場所を直接指定する事も出来るのよ💖
ここでは絶対パスを記述してるの

|設定項目|Key|bootstrapでの場所|shoestringでの場所|
|:-|:-:|:-:|:-:|
|harvester|remote/vrf|target/nodes/node/server-config/resources/config-harvesting.properties|userconfig/resources/config-harvesting.properties|
|voter|votingKey|target/nodes/node/votingkeys|keys/voting|
|nodeKey|transport|target/nodes/node/cert/node.key.pem|keys/cert/node.key.pem|

:::note info
あのね？実はね？上の方法だとぉ？
bootatrapNodeを削除するとインポート元が無くなっちゃってぇ？
shoestring/shoestring.iniの [imports]に書いてある参照先が無くなっちゃって
shoestringの命令でエラーを起こしちゃうの💧

これの対処方法としてぇ？　インポートするファイルとディレクトリを
直接に　shoestringディレクトリに格納する方法よ🌻

**🌺import-bootstrap命令は使わずに🌺**
```
cp ~/pasomi/target/nodes/node/server-config/resources/config-harvesting.properties shoestring/

cp -r ~/pasomi/target/nodes/node/votingkeys shoestring/

cp ~/pasomi/target/nodes/node/cert/node.key.pem shoestring/
```

　
shoestring/shoestring.iniの　[import]の部分の記述例よ🌻
```
[imports]

harvester = /home/dusanjp10/ss_pasomi/shoestring/config-harvesting.properties
voter = /home/dusanjp10/ss_pasomi/shoestring/votingkeys
nodekey = /home/dusanjp10/ss_pasomi/shoestring/node.key.pem
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/230f29db-fa46-47ff-9edd-91e5304d0126.png)

ほら！こぉすると？bootstrapNodeが無くなっても？
**shoestringディレクトリの中を参照する様になるから！**
setup命令や　upgrade命令や　他の命令でエラーを起こさなくなるわ💖

:::
　
**💕shoestring/shoestring.iniの [imports] の記述のやり方は　こちらも参照してみてね💕**

https://qiita.com/Toshi_ma/items/3008022b13957213b899#bootstrap%E9%85%8D%E4%B8%8B%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AFshoestring%E9%85%8D%E4%B8%8B%E3%81%AB%E3%81%8A%E3%81%84%E3%81%A6%E3%82%8B%E3%81%BB%E3%81%86%E3%81%8C%E3%81%84%E3%81%84%E3%81%8B%E3%82%82


　
　
# ⑦　🌺nodeを生成するわ🌺
**💖これで nodeを生成する準備が整ったわ💖うふふっ💕**
じゃ　行きましょう
```
python3 -m shoestring setup --ca-key-path ca.key.pem --config shoestring/shoestring.ini --overrides shoestring/overrides.ini --directory $(pwd) --package mainnet
```
|設定項目|役割|
|:-|:-:|
|--ca-key-path|ca.key.pemの場所よ|
|--config|shoestring.iniの場所よ|
|--overrides|overrides.iniの場所よ|
|--directory|nodeを作成するディレクトリよ|
|--package|mainnetか saiね　記述無しの場合は mainnetになるわ|

　
ca.key.pemにパスワードを設定した場合は パスワードを 3回聞かれたわ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/0551391b-a26f-4862-aed2-93a58c31ae64.png)
　

生成した nodeのアカウントの確認の方法はぁ
おとぉさまが書いたこの記事に書いてあるわ🌺
bootstrapNodeの各accountの秘密鍵と同じなら成功よっ🌻

https://qiita.com/dusanjp/items/03d106c49b000265c8c4

::: note warn
**🚨おねがいがあるの🚨**
**作った作業ディレクトリは？必ずバックアップしてね**
後で upgrade命令で失敗するとファイルが壊れて復旧できなくなっちゃうの💦
:::

# ⑧　🌺ノードを起動するわ🌺
```
docker-compose up -d
```
起動中の画面よ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/ed3e8f8d-6745-4592-9f96-b5556373f77b.png)
　

以前にこのサーバで bootstrapNodeを動かしてた事があると
こんな表示が出て失敗する事があるわ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/9fc1bf0f-9b5a-415f-8d8d-964436630a33.png)
　
そしたらぁ？こうしてねっ
```
docker system prune && docker-compose up -d
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/d02b5493-82b6-433f-bbe7-a45deecf88ff.png)
　
　
　
　
# ⑨　🌺主な各操作よ🌺
**ヘルスチェック（nodeの動作確認**）
```
python3 -m shoestring health --config shoestring/shoestring.ini --directory $(pwd)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/fe6afb2c-c060-4f22-8c71-f2c12404fea8.png)
　
　
**ノードの停止**
```
docker-compose down
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/d02b5493-82b6-433f-bbe7-a45deecf88ff.png)
　
　
**リセットデータ（blockDataを削除する）**
```
python3 -m shoestring reset-data --config shoestring/shoestring.ini --directory $(pwd)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/785517e8-0e4d-47bf-aaef-37c42b82f2a5.png)
　
　
**アップグレード（設定ファイルを変更した時に反映させる）**
```
python3 -m shoestring upgrade --config shoestring/shoestring.ini --overrides shoestring/overrides.ini --directory $(pwd)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/84bd1855-bb12-45e1-a886-c926725cf6a0.png)
　
　
**node証明書の更新**
```
python3 -m shoestring renew-certificates --config shoestring/shoestring.ini --ca-key-path ca.key.pem --directory $(pwd) --retain-node-key
```
--retain-node-keyは？node.key.pem(transportAccount)の変更をしない様にするわ🌺
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/9a584a64-8ccd-4190-8147-78a9aa673d50.png)

　

**node証明書の確認**
```
openssl x509 -noout -dates -in keys/cert/node.crt.pem
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/613fa618-2208-4eb2-8c90-4fdfb3e0e29d.png)
　
　
node証明書の全文を見るにはぁ？
```
openssl x509 -noout -text -in keys/cert/node.crt.pem
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246298/0ae15164-3288-4642-8cb0-bd22ef99e689.png)
こぉなるわ🌻
　
　
　
　
 # 🌺ここまでの説明が長かったから以下にコマンドだけ書いておくわ🌺
**🌺 node起動までのコマンドの流れよ🌺**

**①環境に入る**
```
source env/bin/activate
```
**②作業ディレクトリの作成**
```
mkdir ss_pasomi
cd ss_pasomi
```
**③ca.key.pemの作成**
```
python3 -m shoestring pemtool --output ca.key.pem --ask-pass
```
**④shoestring.iniの作成**
```
mkdir shoestring
```
```
python3 -m shoestring init shoestring/shoestring.ini --package mainnet
```
```
vi shoestring/shoestring.ini
```
編集

**⑤overrides.iniの作成**
```
vi shoestring/overrides.ini
```
編集

**⑥bootstrapNodeから accountsを導入**
```
python3 -m shoestring import-bootstrap --config shoestring/shoestring.ini --bootstrap ~/pasomi/target --include-node-key
```
**⑦node生成**
```
python3 -m shoestring setup --ca-key-path ca.key.pem --config shoestring/shoestring.ini --overrides shoestring/overrides.ini --directory $(pwd) --package mainnet
```
**⑧node起動**
```
docker-compose up -d
```
　
　
　

**⑨🌺ここからは nodeの各操作よ🌺**
ヘルスチェック
```
python3 -m shoestring health --config shoestring/shoestring.ini --directory $(pwd)
```
node停止
```
docker-compose down
```
ブロックデータ消去
```
python3 -m shoestring reset-data --config shoestring/shoestring.ini --directory $(pwd)
```
アップグレード
```
python3 -m shoestring upgrade --config shoestring/shoestring.ini --overrides shoestring/overrides.ini --directory $(pwd)
```
node証明書更新
```
python3 -m shoestring renew-certificates --config shoestring/shoestring.ini --ca-key-path ca.key.pem --directory $(pwd) --retain-node-key
```
node証明書表示（日付だけ）
```
openssl x509 -noout -dates -in keys/cert/node.crt.pem
```
node証明書表示（全文）
```
openssl x509 -noout -text -in keys/cert/node.crt.pem
```
　
　
　

 # 💖💖💖うふふっ💕みんなっ？やってみてねっ💖💖💖
　
　
　
　
　

🌻旧 shoestring（0.1.3より前）で建てた nodeの 0.2.1へのアップデート方法はこっちよ🌻

https://qiita.com/amenoudume/items/c49b5a7366207a12d94c

　
　
　
　
　


 **💡できあがった shoestringNodeの nodeAccountが知りたい！💡**
 こちらはぁ？あたしのおとーさんが作った「shoestringNode→bootstrapNode」の
 変換 shellscriptになりまーす！
 これを使うとね？shoestringNodeの nodeAccountがぁ？元の bootstrapNodeの nodeAccountと
 ほんとうに同じかを確かめられるわ！🌺
 
 https://qiita.com/dusanjp/items/e10fa16ec681aa34805f