nwdiagをRaspberry pi上で実行する際のエラー対処

# 発見契機
自宅内の装置が増えてきて管理が煩雑になってきたので、あるフォーマットに則って記載したテキストから、自動でネットワーク構成図を出力してくれるnwdiagを導入してみた。
その際、ちょっとしたエラーが発生したため備忘録として残す。

# nwdiag実行装置
Raspberry pi 3 Model B

# エラー内容

pipでnwdiagを導入後任意の構成図ファイルである「sample.nwdiag」を構成図に変換しようとしたところ、下記のエラーが発生した。

```
user1@nuc:~/nwdiag $ pip install nwdiag
Defaulting to user installation because normal site-packages is not writeable
（略）
Installing collected packages: webcolors, Pillow, funcparserlib, blockdiag, nwdiag
Successfully installed Pillow-9.4.0 blockdiag-3.0.0 funcparserlib-1.0.1 nwdiag-3.0.0 webcolors-1.12
user1@nuc:~/nwdiag $
user1@nuc:~/nwdiag $ nwdiag sample.nwdiag
Traceback (most recent call last):
  File "/home/hub/.local/bin/nwdiag", line 5, in <module>
    from nwdiag.command import main
  File "/home/hub/.local/lib/python3.7/site-packages/nwdiag/command.py", line 18, in <module>
    from blockdiag.utils.bootstrap import Application
  File "/home/hub/.local/lib/python3.7/site-packages/blockdiag/utils/bootstrap.py", line 24, in <module>
    from blockdiag.utils import images
  File "/home/hub/.local/lib/python3.7/site-packages/blockdiag/utils/images.py", line 23, in <module>
    from PIL import Image
  File "/home/hub/.local/lib/python3.7/site-packages/PIL/Image.py", line 103, in <module>
    from . import _imaging as core
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
```

[ここのサイト](https://game-allergy.hatenablog.com/entry/2021/04/19/154548)を参照し、エラーで表示されていた`libopenjp2.so.7:`を補えそうな`libopenjp2-7-dev`を追加した。
その後、再度実行したところ問題なくpng形式でネットワーク構成図を出力できた。

```
user1@nuc:~/nwdiag $ sudo apt install libopenjp2-7-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libopenjp2-7
The following NEW packages will be installed:
  libopenjp2-7 libopenjp2-7-dev
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 183 kB of archives.
After this operation, 568 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
（略）
Processing triggers for libc-bin (2.28-10+rpt2+rpi1+deb10u1) ...
user1@nuc:~/nwdiag $ nwdiag sample.nwdiag
user1@nuc:~/nwdiag $ ls
sample.nwdiag  sample.png
user1@nuc:~/nwdiag $
```

# 必要ライブラリの検索方法
今回はGoogle検索から解決方法を上手く見つけ出したが、地道に一つずつ確認する場合は下記の手段で探す。

1. 不足ライブラリの情報を確認
  `ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory`とあるので、`libopenjp2`に目星をつけて検索
2. aptでインストール可能なライブラリを検索
   下記のように`apt search`で検索する。
   yumなどの管理ソフトを使っているなら、それに合わせたライブラリ検索コマンドを実行する。
   下記実行時にはすでに`apt install libopenjp2-7-dev`を実行済みだったため`[installed]`が記載されている。
   ```
   user1@nuc:~/nwdiag $ apt search libopenjp2
   Sorting... Done
   Full Text Search... Done
   libopenjp2-7/oldstable,now 2.3.0-2+deb10u2 armhf [installed,automatic]
     JPEG 2000 image compression/decompression library

   libopenjp2-7-dev/oldstable,now 2.3.0-2+deb10u2 armhf [installed]
     development files for OpenJPEG, a JPEG 2000 image library

   libopenjp2-tools/oldstable 2.3.0-2+deb10u2 armhf
     command-line tools using the JPEG 2000 library

   user1@nuc:~/nwdiag $
   ```
1. 共有ライブラリの不足であれば、大体`-dev`が入っているライブラリを導入すれば解決。念のためパッケージ名下の説明文はよく読むこと

# さいごに
テキストベースで綺麗にネットワーク構成図が生成されるので、pythonを使って装置から情報取得&文字列操作でnwdiag用のファイルを自動出力&nwdiag実行と、一連の流れを自動化できそうな気配。
テキストからグラフィカルなものへ変換できる系は色々なツールへ発展させられそうで楽しい。