WSL環境の別PCへの移行Tips (ホスト名に依存するソフトが動いている場合)

### PCの置き換えとWSLイメージの移行
WSLの移行は、wsl --export / --import で簡単に実施することができます。
ですので、新しいPCに買い替える場合も手元のWSL環境を手軽に持っていくことができます。
exportによりtarファイルが作成され、importで vhdx に変換されます。

参考：
[標準機能だけでWSLを好きな場所にインストールする](https://qiita.com/yamada6667/items/9e73193b0167cba2351d)
[Windows 10/11でWSL環境を移行する方法](https://techracho.bpsinc.jp/morimorihoge/2021_11_26/113804)

WSLのホスト名は、デフォルトでWindowsのコンピュータ名となっています。
よって、別PCにお引越しする場合にはホスト名も変わります。
ここで、ホスト名に依存するソフトウェアが動いている場合には、ホスト名変更の対処を取らないと起動できない、なんてことが起きます。

### 対処方法
いくつか選択肢がありそうです。
自分で実践してうまくいったのは(1)ですが、他にも候補がありそうなので整理しておきます。
※(2)(3)(4)は実際に試しているわけではなく、あくまで候補です

#### 方法(1) ソフトウェアごとに提供されるホスト名変更方法を採用する
利用しているソフトウェア側でホスト名の変更に対処する方法が提供されている場合には、WSLのホスト名はそのまま変更せず、ソフトウェア側だけ対応すればOK。
たとえばデータベースソフトであるDb2の場合であれば、db2nodes.cfg ファイルとDB2SYSTEMレジストリ変数にホスト名が保持されるため、新しいホスト名に書き換えることで継続利用可能になります。

**(1)-1. db2nodes.cfg 編集**
db2nodes.cfg は、「数字(通常0)」「半角ブランク」「ホスト名」「半角ブランク」「数字(通常0)」という書式のテキストファイルです。
このホスト名部分を編集し、新しいホスト名(新PCのWindowsコンピュータ名)に変更します。

```
$ cat ~/sqllib/db2nodes.cfg
0 ＜新コンピュータ名＞ 0
$
```

**(1)-2. レジストリ変数DB2SYSTEM変更**
同様に新しいホスト名に設定変更します。
V11.5環境なので、db2set -g コマンド実行時に先立ち、DB2INSTANCE環境変数を設定します。

```
$ su – root
# export DB2INSTANCE=db2i115
# /home/db2i115/sqllib/adm/db2set -g DB2SYSTEM=＜新コンピュータ名＞

# /home/db2i115/sqllib/adm/db2set -all
[i] DB2COMM=TCPIP
[g] DB2SYSTEM=＜新コンピュータ名＞
```

参考：
[[DB2 LUW] DB2 がインストールされたコンピュータのホスト名変更手順 (IM-10-00K)](https://www.ibm.com/support/pages/db2-luw-db2-%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E5%A4%89%E6%9B%B4%E6%89%8B%E9%A0%86-im-10-00k)
[[Db2] root ユーザーで db2set コマンドなどが期待通り動作しないことがある](https://www.ibm.com/support/pages/db2-root-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A7-db2set-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AA%E3%81%A9%E3%81%8C%E6%9C%9F%E5%BE%85%E9%80%9A%E3%82%8A%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8B)



#### 方法(2) WSLのホスト名を移行先で変更する
移行先でのWSLでは、新しいPCのコンピュータ名がホスト名となっています。
これを旧PCホスト名に変更すれば、元通り動くのでは。ソフトウェアに手を入れるよりラクかもしれません。
参考：[WSL（ubuntu）でホスト名を変更する](https://blog.totsugeki.com/post-379/)


#### 方法(3) WSLのホスト名を事前に変更する
いっそソフトウェア導入前に、ホスト名をWindowsコンピュータ名ではない名前に設定しておけば、移行先のコンピュータ名が変わっても影響を受けずに済みそうです。
WSL移行手順がexport/importだけで完結する上、ソフトウェア種別は問わない汎用的な解決方法と言えそうですが、ソフトウェア導入後に気づいた場合には選択できません。

#### 方法(4) 移行元・先のWindowsコンピュータ名を統一
ここまで整理して思うこと。
... こんなことで困ったり手をかけたりするなら、新旧PCのWindowsコンピュータ名を統一すればいい話ですよね。
この道が選べるなら、一番ラクで確実かと。


### 補足：Db2 が動くWSLのホスト名を変更し忘れた場合の影響
新PCへWSL移行し、そのまま手元のテスト用Db2を操作しようとして、コマンド応答遅延やら起動不能状態に遭遇。
ホスト名が変わっている可能性が念頭にあればこんなひっかかり方はせずに済みましたが、我ながら本当に何も考えていなかったということです、反省。

#### (1) コマンド応答遅延
移行確認にあたり、まずその環境に存在するデータベース名を一覧表示する db2 list database directory コマンドを実行してみました。
ここで早速、応答に20秒近くかかる洗礼を受けました。
他OSコマンドは遅くないが、Db2コマンドだけ異様に遅い。
初のWSL移行でもあり状況が呑み込めておらず、この時点では何が起きているのかわかりませんでした。

#### (2) Db2起動失敗
ここでさすがに理解しました。涙。

(2)-1: 起動コマンド実行時のエラーメッセージ

```
$ db2start
SQL6031N  db2nodes.cfg ファイルの行番号 "1" で エラーがありました。  理由コード "10"
$
```

[SQL6000 - SQL6999 - IBM Documentation](https://www.ibm.com/docs/ja/db2/11.5?topic=messages-sql6000-sql6999#sql6031n) 
 > 理由コード10：sqllib ディレクトリーの db2nodes.cfg ファイルの行 line の ホスト名の値が無効です。

この時の db2diag.log 出力：

```
2022-03-03-20.17.58.382256+540 I6785947E799          LEVEL: Severe
PID     : 144                  TID : 139887818765248 PROC : db2start
INSTANCE: db2i115              NODE : 000
HOSTNAME: ＜新Windowsコンピュータ名＞
FUNCTION: DB2 UDB, base sys utilities, sqlePdbStartStopNode, probe:1106
DATA #1 : String, 12 bytes
host is down
DATA #2 : String, 60 bytes
/home/db2i115/sqllib/adm/db2rstar db2profile db2star2 SN 0 0
DATA #3 : String, 15 bytes
＜旧Windowsコンピュータ名＞
DATA #4 : Hexdump, 4 bytes
0x00007FFC6051148C : 1000 0000                                  ....
DATA #5 : Hexdump, 36 bytes
0x00007FFC60511480 : C8F8 672B 3A7F 0000 0500 0000 1000 0000    ..g+:...........
0x00007FFC60511490 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0x00007FFC605114A0 : 0000 0000
```

　→　ホスト名変更をDb2は知らない (構成に未反映)ですから、これでは起動できない、と。。。

---

PC移行なんてもともとそれなりに神経を使う中で、ソフトウェアが動かないなんて絶望してしまいます。
次回の移行時に同じ轍を踏まないよう、備忘録として残します。