2023-05-27 Raspberry Pi4 で簡易コンソールサーバを作る
中古のコンソールサーバが高い / 出回ってない + ラックスペースを消費するのが嫌だったため、余っていた Raspberry PI4 でコンソールサーバを立てました。
ポートあたりのコストは高いですが、棚板 0.5U 以下のスペースしか食わない・Syslog / SNMP Trap / RANCID サーバなどと兼用できるのが良いです。
構成
メーカー | 型式 | 内容 | 入手先 | 価格 | 数量 | 備考 | |
---|---|---|---|---|---|---|---|
SBC | Raspberry PI
Foundation |
Raspberry Pi4
ModelB 4GB |
4Core | Amazon | \6,875 | 1 | 2020/09 に購入して余ってたやつ |
Micro SD | SanDisk | Micro SD 64GB | Amazon | \1,400 | 1 | そのへんに転がってたやつ | |
Raspberry Pi 4 Case | RETROFLAG | NSEPi4 | ファン付き | Aliexpress | \4,200 | 1 | SSD が使える PI4 ケース
2020/08 購入 |
Raspberry Pi 4
USB-C (Type C)電源 |
Smraza | SD02-JP | 5V 3A | Amazon | \1,139 | 1 | On / Off スイッチ付き |
USB ハブ 5ポート USB 3.0 | Aceele | ASIN : B07RGVXFZL | 20cm | Amazon | \1,189 | 2 | バスパワー以外に USB-C で給電してセルフパワーも可能 |
RJ45-USB Cisco互換
コンソールケーブル |
monofive | MF-CBRJ45USB | FT232R
USB RJ-45 |
Amazon | \1,598 | 5 | |
合計 | \23,982 |
最近は価格が高くなっているので、ここまで安くならないでしょう。
筆者は余ってた PI4 にハブとコンソール ケーブルのみ追加購入したので、\10,368 でした。
(CH340 x8 を買って \5,000 ほどドブに捨てたのはないしょ)
手順
- Raspberry PI4 に CentOS 9 Stream をインストール
- FTDI 232R ドライバ モジュールを読み込み
- minicom をインストール
- 接続できるか確認
- デバイスファイルのファイル名を固定
- エイリアス名と機器が一致するか確認
01) Raspberry PI4 に CentOS 9 Stream をインストール
Web にたくさん事例があるので、割愛します。以下の順に実施。
- CentOS 9 Stream のイメージファイルをダウンロード
- Rufas で SD カードにイメージ ファイルを書き込む
- Raspberry PI4 に挿して起動
- SSH ログイン or ディスプレイとキーボードを接続して、Terminal から SD カードのパーティションをリサイズ
02) FTDI 232R ドライバ モジュールを読み込み
lsmod で ftdi-sio ドライバ モジュールが読み込まれているか確認します。
ない場合、modprobe コマンドで FT232R ドライバ モジュールを読み込みます。
$ modprobe ftdi-sio
以下のような表示になれば OK.
$ lsmod | egrep -i "Module|ftd"
Module Size Used by
ftdi_sio 53248 0
usbserial 45056 1 ftdi_sio
03) minicom をインストール
$ sudo dnf install minicom
04) 接続できるか確認
一般的な 9600bps の Cisco 機器と接続する場合、以下で接続が可能です。
$ minicom -b 9600 -D /dev/ttyUSB0
1 つ接続確認できたら、他の 4 つも接続してしまって OK です。
Ctrl + a の後 q を押して Enter で抜けられます。
使用方法は Ctrl + a の後 z で。
05) デバイスファイルのファイル名を固定
ttyUSB だと、
- USB にコンソールケーブルを接続した順番によって、デバイス ファイル名が変化してしまう
- どの機器に接続しているかわからない
ため、シリアル番号からデバイス ファイル名を固定します。
シリアル番号の確認
$ udevadm info -q property -n /dev/ttyUSB0 | grep -E "ID_SERIAL_SHORT=|ID_VENDOR_ID=|ID_MODEL_ID="
以下のような出力が得られます。
ID_MODEL_ID=6001
ID_SERIAL_SHORT=<Serial_NumN>
ID_VENDOR_ID=0403
ID_VENDOR_ID : メーカーに振られた ID. ここでは FTDI (Future Technology Devices International) を指す
ID_MODEL_ID : プロダクトの ID. ここでは FT232R を指す
ID_SERIAL_SHORT : プロダクトのシリアル番号
udev で機器接続時に tty のエイリアスを作成
5 つの USB シリアル コンバータを接続した場合は、 以下のように 5 行書きます。
# sudo vim /etc/udev/rules.d/90-usb-serial-devices.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="<Serial_Num0>", SYMLINK+="tty-rt91", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="<Serial_Num1>", SYMLINK+="tty-rt92", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="<Serial_Num2>", SYMLINK+="tty-l3sw91", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="<Serial_Num3>", SYMLINK+="tty-l3sw92", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="<Serial_Num4>", SYMLINK+="tty-l2mgmt91", GROUP="dialout"
<Serial_Num[0-4]> には、先程の udevadm コマンドで得られた値を入れます。
別メーカーのチップの場合、idVendor と idProduct も変更が必要です。
/etc/rc.local に実行権限を付与
$ sudo ls -al /etc/rc.local
rc.local は CentOS 7 から非推奨で互換性のために残されており、今後のリリースでは使えなくなるかもしれません。
再起動 or udev 再起動
$ sudo reboot
$ sudo udevadm control --reload-rules
$ sudo service systemd-udevd reload
エイリアス確認
$ sudo ls -al /dev/tty-*
lrwxrwxrwx 1 root root 7 Feb 27 09:00 /dev/tty-bgp91 -> ttyUSB0
lrwxrwxrwx 1 root root 7 Feb 27 09:00 /dev/tty-bgp92 -> ttyUSB2
lrwxrwxrwx 1 root root 7 Feb 27 09:00 /dev/tty-l3mgmt91 -> ttyUSB1
lrwxrwxrwx 1 root root 7 Feb 27 09:00 /dev/tty-l3sw91 -> ttyUSB4
lrwxrwxrwx 1 root root 7 Feb 27 09:00 /dev/tty-l3sw92 -> ttyUSB3
筆者はホスト名をつけました。
06) エイリアス名と機器が一致するか確認
$ sudo minicom -b 9600 -D /dev/tty-l2mgmt91
Welcome to minicom 2.7.1
OPTIONS: I18n
Compiled on Aug 9 2021, 00:00:00.
Port /dev/tty-l3mgmt91, 16:38:17
Press CTRL-A Z for help on special keys
tky-l2mgmt91#
一致しない場合、物理的に RJ-45 を差し替えるか、エイリアス作成コマンドのシリアルを入れ替え、再起動して再度確認します。
他の USB シリアル変換チップについて
FTDI は筆者が知る中で最高のチップですが、他の選択肢について記載します。
- Prolific PL2101
- たまにカーソル位置がずれるくらいで使えなくはない
- コンソールは信頼性がほしいので、筆者は 2 度と買いたくない
- Nanjing Qinheng Microelectronics (WCH) CH340
- 面白いゴミだ 気に入った 壊すのは最後にしてやる
- 筆者が罵倒する形容詞に悩むような出来
- 燃えるゴミなら燃やせるだけマシなので、燃えるゴミに失礼
- I/O エラーが起きてアクセスできなくなるため、少なくとも Linux では使えない
参考 URL
Raspberry Pi に CentOS Stream 9 をインストールしてみる
https://people.centos.org/pgreco/CentOS-Userland-9-stream-aarch64-RaspberryPI-Minimal-4/