発見契機
自宅内の装置が増えてきて管理が煩雑になってきたので、あるフォーマットに則って記載したテキストから、自動でネットワーク構成図を出力してくれる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
ここのサイトを参照し、エラーで表示されていた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検索から解決方法を上手く見つけ出したが、地道に一つずつ確認する場合は下記の手段で探す。
- 不足ライブラリの情報を確認
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
とあるので、libopenjp2
に目星をつけて検索 - 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 $
- 共有ライブラリの不足であれば、大体
-dev
が入っているライブラリを導入すれば解決。念のためパッケージ名下の説明文はよく読むこと
さいごに
テキストベースで綺麗にネットワーク構成図が生成されるので、pythonを使って装置から情報取得&文字列操作でnwdiag用のファイルを自動出力&nwdiag実行と、一連の流れを自動化できそうな気配。
テキストからグラフィカルなものへ変換できる系は色々なツールへ発展させられそうで楽しい。