Lantronix 社 の xDirect シリーズはイーサネット経由でシリアルポート(RS232)にアクセス出来る製品だそうです。「簡易コンソールサーバ」とも表現出来ると思います。
- xDirect 232
- PoE 非対応。$99.95。
- xDirect PoE
- PoE 対応。$129.95。
ただ、Amazon.co.jp や NTT-X ストアには基本的に在庫が無くて入手まで時間がかかると予想される上、NTT-X ストアで PoE 対応版の価格は約 21,000 円と、かなり高価な価格設定になっていました… そこで今回は Raspberry Pi をコンソールサーバにしてみようと思います。Raspberry Pi はワイヤレスに対応させ、一般的なコンソールサーバ製品と差別化してみます。
構成
今回は以下を組み合わせます。
- Raspberry Pi 2 Model B
- I-O DATA WN-G150U
- RATOC Systems REX-USB60F
- Jerminal version 0.8096
- Supervisor
Raspberry Pi2 は Raspbian OS(2015-05-05-raspbian-wheezy.img)をインストールしてあります。WN-G150U は 2.4GHz 帯しか対応していません(5GHz 帯は非対応)ですが、今回は良しとしました。USB/シリアル変換ケーブルである「REX-USB60F」はとりあえず 2 本、用意しました。環境構築後の構成は以下の通りです。
Raspberry Pi にワイヤレスアダプタを認識させる
今回は Raspberry Pi に WN-G150U を認識させますが、設定方法は「WN-G150UM on Raspberry Pi」という記事が大変、参考になりました。
vi /etc/udev/rules.d/network_drivers.rules というファイルを以下の内容で新規作成します。
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04bb", ATTR{idProduct}=="094c", RUN+="/sbin/modprobe -qba 8192cu"
同様に、vi /etc/modprobe.d/network_drivers.conf というファイルを以下の内容で新規作成します。
install 8192cu /sbin/modprobe --ignore-install 8192cu $CMDLINE_OPTS; /bin/echo "04bb 094c" > /sys/bus/usb/drivers/rtl8192cu/new_id
続いて、ネットワークの設定を行います。今回は wlan0 インターフェイスを以下のパラメータで設定しました。
項目 | 値 |
---|---|
SSID | MY-SSID |
事前共有鍵 | MY-PSK |
アドレス | 192.168.253.210 |
ネットマスク | 255.255.255.0 |
ゲートウェイ | 192.168.253.254 |
DNS (1) | 8.8.8.8 |
DNS (2) | 8.8.4.4 |
具体的には /etc/network/interfaces を以下のように修正しました。
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
wpa-ssid MY-SSID
wpa-key-mgmt WPA-PSK
wpa-psk My-PSK
address 192.168.253.210
netmask 255.255.255.0
gateway 192.168.253.254
dns-nameservers 8.8.8.8 8.8.4.4
これで WN-G150U を認識&利用出来るようになったはずです。
Jerm のインストール
シリアル通信の制御には minicom を使うケースも多いと思います。ただ、今回は「コンソールサーバにする = シリアル/TCP 変換を行う」必要がありますので jerm を利用します。リポジトリに jerm が無いのでソースからインストールします。
wget http://www.bsddiary.net/jerm/jerm-8096.tar.gz
tar zxvf jerm-8096.tar.gz
cd jerm-8096/
make
sudo cp ./jerm /usr/local/bin
これでインストールは完了です。特に引数無く、jerm とだけ実行するとヘルプが表示されます。
# jerm
Jerminal v0.8096 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007 candy
usage1: jerm [optinos] device
-b speed speed
-p [none|even|odd] parity
-d [7|8] data bits
-s [1|2|1.5] stop bit
-f [none|x|hard] flow control
-F Set FUCK MODE for TA-100KR/RA SYSTEMS CORP.
usage2: jerm [-46i][-P port] [options] host
client mode.
-i init stdin/out by device options (pipe mode)
common optinos:
-l file log file
-z truncate log file
-x start in hex dump mode
-r cccc set CR LF mapping. (default = rnrn)
c = {x=drop, r=CR, n=LF, t=CRLF}
option order = {recv CR, recv NL, send CR, send LF}
-j rockwell binary data mode
usage3: jerm -D [-46T][-P port][-z][-l file] device
server mode.
Supervisor で jerm をデーモン化する
jerm を起動しても、起動したユーザがログアウトしたらプログラムが終了してしまいます。これでは不便なので Supervisor を使って jerm をデーモン化します。まず、Supervisor をインストールします。
apt-get -y install supervisor
Supervisor でのデーモン化対象となるスクリプトを用意します。今回は「一本目の USB/シリアル変換ケーブル」と「二本目の USB/シリアル変換ケーブル」を制御するスクリプトを別々に用意しました。ひとつのスクリプトにまとめても良いのですが、片側のボーレートだけを変換したいようなケースではスクリプトが分かれている方が便利なのでスクリプトを分けました。
まず、一本目の USB/シリアル変換ケーブルを制御する /root/jerm-ttyUSB0.sh を新規作成します(スクリプトの配置位置はヤッツケです…)。-b オプションでスピードを指定していますが、これは接続先の機器に合わせて調整します。
#!/bin/sh
jerm -D -P 2001 -b 115200 -p none -d 8 -s 1 -f none /dev/ttyUSB0
続いて、二本目の USB/シリアル変換ケーブルを制御する /root/jerm-ttyUSB1.sh を新規作成します。
#!/bin/sh
jerm -D -P 2002 -b 115200 -p none -d 8 -s 1 -f none /dev/ttyUSB1
作成したスクリプトに実行権限を付与する為、パーミッションを調整します。
chmod 755 jerm-ttyUSB0.sh
chmod 755 jerm-ttyUSB1.sh
作成したスクリプトを Supervisor にサービスとして認識させる為の設定ファイルを作成します。まず、/etc/supervisor/conf.d/jerm-ttyUSB0.conf を以下の内容で新規作成します。
[program:jerm-ttyUSB0]
command=/root/jerm-ttyUSB0.sh
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/jerm-ttyUSB0.log
user=root
続いて /etc/supervisor/conf.d/jerm-ttyUSB1.conf を以下の内容で新規作成します。
[program:jerm-ttyUSB1]
command=/root/jerm-ttyUSB1.sh
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/jerm-ttyUSB1.log
user=root
Supervisor に設定ファイルを読み込ませます。
supervisorctl reread
最後に、作成したサービスを Supervisor に追加します。
supervisorctl add jerm-ttyUSB0
supervisorctl add jerm-ttyUSB1
supervisorctl status で確認すると、サービスが起動している(RUNNING)のが分かります。更に、netstat で Listen しているポートを確認すると jerm に Listen させている TCP/2001 や TCP/2002 が確認出来ます。
# supervisorctl status
jerm-ttyUSB0 RUNNING pid 2413, uptime 1:33:59
jerm-ttyUSB1 RUNNING pid 3184, uptime 0:00:05
# netstat -nat | grep 200[12]
tcp 0 0 0.0.0.0:2001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:2002 0.0.0.0:* LISTEN
クライアントから接続してみる
クライアント(OS X)からコンソールサーバ化した Raspberry Pi 経由で、コンソール接続してみます。クライアント側にも jerm が必要ですが、OS X であれば homebrew で簡単にインストールできます。1 本目の USB/シリアル変換ケーブルは Raspberry Pi の TCP/2001 で Listen していますので、接続するには以下のようにします。
jerm -P 2001 192.168.253.210
二本目の USB/シリアル変換ケーブルは TCP/2002 で Listen していますので、接続するには以下のようにします。
jerm -P 2002 192.168.253.210
コメント