FreeBSD on RaspberryPi with OkaConsole Quadでコンソールサーバ

さてさて、FreeBSDでOkaConsole Quadを使えるようにした でシリアルポートが使えるようになったので、Raspberry Pi 3B+をターミナルサーバにしようと思う。

ハンドブックとか見てみるとtipってのをうまく使うといけるっぽい。

第17章 シリアル通信

ということは

  • 特定ユーザでログインしたときにtipが実行されるようにする
  • /etc/remote で4つのポートを利用可能にする

で大丈夫そう。

ユーザの追加

ではサクッと。 adduser コマンドで「okaconsole」ユーザを作ってやる。 /dev/cuaU* の所有権見たらdialerグループでの読み書きが可能になっているので、dialerグループに所属させる。

# adduser
Username: okaconsole
Full name:
Uid (Leave empty for default):
Login group [okaconsole]: dialer
Login group is dialer. Invite okaconsole into other groups? []:
Login class [default]:
Shell (sh csh tcsh zsh rzsh git-shell bash rbash nologin) [sh]: bash
Home directory [/home/okaconsole]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : okaconsole
Password : <disabled>
Full Name :
Uid : 1002
Class :
Groups : dialer
Home : /home/okaconsole
Home Mode :
Shell : /usr/local/bin/bash
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (okaconsole) to the user database.
Add another user? (yes/no): no
Goodbye!
#

SSH鍵の作成

リモートからの接続でパスワード聞かれても面倒だし、ローカルでしか使わないのもあるのでパスフレーズなしの公開鍵を作ってやる。

# su - okaconsole
The default editor in FreeBSD is vi, which is efficient to use when you have
learned it, but somewhat user-unfriendly. To use ee (an easier but less
powerful editor) instead, set the environment variable EDITOR to /usr/bin/ee
[okaconsole@pi-freebsd ~]$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/okaconsole/.ssh/id_rsa): /home/okaconsole/.ssh/pibsd-okaconsole
Created directory '/home/okaconsole/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/okaconsole/.ssh/pibsd-okaconsole.
Your public key has been saved in /home/okaconsole/.ssh/pibsd-okaconsole.pub.
The key fingerprint is:
SHA256:J7o35TOFrWLZUYKpbf9YU62iVNzHyHLnw2Brk4dXD3M okaconsole@pi-freebsd
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|         o       |
|        o ...o + |
|       oS .=+oO E|
|      ..oo+.++*Oo|
|      .. *.++*.=o|
|       .*.B+.o+ .|
|      .o oo+.    |
+----[SHA256]-----+
[okaconsole@pi-freebsd ~/.ssh]$ cp pibsd-okaconsole.pub authorized_keys

で、ここで作成した秘密鍵( pibsd-okaconsole )を使いたいマシンに持ってきておく。

/etc/remote の確認

/etc/remote に必要な定義があることを確認。ついでに検証環境ではボーレートを115200bpsにしてるのでそのへんのお手入れも。
編集後はこんな感じ。

$ grep cuaU /etc/remote
ucom1:dv=/dev/cuaU0:br#115200:pa=none:
ucom2:dv=/dev/cuaU1:br#115200:pa=none:
ucom3:dv=/dev/cuaU2:br#115200:pa=none:
ucom4:dv=/dev/cuaU3:br#115200:pa=none:
#ucom1:dv=/dev/cuaU0:br#9600:pa=none:
#ucom2:dv=/dev/cuaU1:br#9600:pa=none:
#ucom3:dv=/dev/cuaU2:br#9600:pa=none:
#ucom4:dv=/dev/cuaU3:br#9600:pa=none:
ucom5:dv=/dev/cuaU4:br#9600:pa=none:
ucom6:dv=/dev/cuaU5:br#9600:pa=none:
ucom7:dv=/dev/cuaU6:br#9600:pa=none:
ucom8:dv=/dev/cuaU7:br#9600:pa=none:

ログイン時にtipを自動実行

リモートから okaconsole ユーザでログインしたときに簡単なメニューを出して、目的のポートに接続できるように ~/.bashrc を作成。一応変な入力は弾くように。

$ cat > ~/.bashrc
clear
echo "1: Okaconsole Quad Port#1(Catalyst 3560v2#1)"
echo "2: Okaconsole Quad Port#2(Catalyst 3560v2#2)"
echo "3: Okaconsole Quad Port#3(Catalyst 3560  #1)"
echo "4: Okaconsole Quad Port#4(Catalyst 3560  #2)"
echo ""
echo "Which port?(1/2/3/4):"
read PORT

# 入力がなかったらやり直し
if [ -z ${PORT} ]; then
    echo "No input, Push any key:"
    read
    . ~/.bashrc
fi

# 入力が数値じゃなかったらやり直し
expr ${PORT} + 0 > /dev/null 2>&1
if [ $? -eq 1 -o $? -eq 2 ]; then
    echo "Not a Number! Push any key:"
    read
    . ~/.bashrc
fi

# 範囲外の数値だったらやり直し
if [ ${PORT} -lt 1 -o ${PORT} -gt 4 ]; then
    echo "Invalid number! Push any key:"
    read
    . ~/.bashrc
fi
tip ucom${PORT}

ここでちょっとハマったのが .profile.bashrc が実行されないと思ったら ~/.profile~/.bashrc を読み込む定義がなかった。ので、 ~/.profile の最後に以下のブロックを追記しといた。

$ tail -n 5 ~/.profile

# Load ~/.bashrc
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

結果

これで、以下のようにして接続すると

$ ssh -i pibsd-okaconsole okaconsole@{ラズパイのIPアドレス}

こんなシンプルな画面が出て

1: Okaconsole Quad Port#1(Catalyst 3560v2#1)
2: Okaconsole Quad Port#2(Catalyst 3560v2#2)
3: Okaconsole Quad Port#3(Catalyst 3560  #1)
4: Okaconsole Quad Port#4(Catalyst 3560  #2)

Which port?(1/2/3/4):

接続できる。ゴミが出てるけど…

Which port?(1/2/3/4):
1
can't open log file /var/log/aculog.
connected
$eueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueu
ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue ^ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue
ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue
ueueueueueueu

% Invalid input detected at '^' marker.

DSW1#

でもまぁなんとかなるかな。切断は ~. で。

Tips

自分が行編集のキーコンビネーション(Ctrl-PとかCtrl-Aとか)をよく使うので、これも仕込んどいた。

$ cat > ~/.tiprc
force=^
raisechar=^

 

第17章 シリアル通信

 

コメント

タイトルとURLをコピーしました