汎用的な製品を組み合わせて格安で継続的に利用できるシリアルコンソールサーバの構築を検討する。
完成イメージはこんな感じ

USBポート位置とデバイス名の紐付け
通常何も設定しなければデバイス名は指した順番に /dev/ttyUSB0 ... USB1 ... USB2 という風に生成されていくが、これではどのポートのデバイスがどんなデバイス名かが固定されず、故障交換の都度デバイス名が変更されコンソールサーバツールの設定を都度見直す必要が出てきてしまうため、これをUSBのポート(USBハブを想定)とデバイス名(Alias名もしくはSymlink名)を紐付けて固定する。
USBポート位置の確認
udevadmコマンドによりKERNELSの値を確認し位置を確認する。
root@catalyst:~# udevadm info -a -n /dev/ttyUSB0 |egrep "(KERNELS|DEVPATH)"
KERNELS=="ttyUSB0"
KERNELS=="1-1.3:1.0"
KERNELS=="1-1.3"
KERNELS=="1-1"
KERNELS=="usb1"
KERNELS=="0000:00:14.0"
KERNELS=="pci0000:00"
root@catalyst:~# udevadm info -a -n /dev/ttyUSB1 |egrep "(KERNELS|DEVPATH)"
KERNELS=="ttyUSB1"
KERNELS=="1-1.4:1.0"
KERNELS=="1-1.4"
KERNELS=="1-1"
KERNELS=="usb1"
KERNELS=="0000:00:14.0"
KERNELS=="pci0000:00"
root@catalyst:~# udevadm info -a -n /dev/ttyUSB2 |egrep "(KERNELS|DEVPATH)"
KERNELS=="ttyUSB2"
KERNELS=="1-3:1.0"
KERNELS=="1-3"
KERNELS=="usb1"
KERNELS=="0000:00:14.0"
KERNELS=="pci0000:00"
位置とデバイス名をAlias(Symlink)によって固定
vi /etc/udev/rules.d/99-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.3.1.0", SYMLINK+="ttyUSB01"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.4.1.0", SYMLINK+="ttyUSB02"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-3.1.0", SYMLINK+="ttyUSB03"
idVendorや、idProductは特にしてしなくてもよくて、KERNELSでの接続位置に対してポート名となるSYMLINKを割り当てたいので故障交換時に別の製品をつかったりするなら書かない方が楽だと思う
設定の反映
sudo udevadm control --reload-rules
sudo udevadm trigger
確認
root@catalyst:~# ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 9月 5 01:00 /dev/ttyUSB0
lrwxrwxrwx 1 root root 7 9月 5 01:00 /dev/ttyUSB01 -> ttyUSB0
lrwxrwxrwx 1 root root 7 9月 5 01:00 /dev/ttyUSB02 -> ttyUSB1
lrwxrwxrwx 1 root root 7 9月 5 01:00 /dev/ttyUSB03 -> ttyUSB2
crw-rw---- 1 root dialout 188, 1 9月 5 01:00 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 9月 5 01:00 /dev/ttyUSB2
コンソールサーバとその機能
パッケージのインストール
apt install conserver-server conserver-client
つづく・・・