BonCasServer for Mac/Linux (BonCasLink) [2026/08/07 更新中]
BoncasServerはWindowsPC用が用意されていますが、私の場合MacMiniServerにVMWare Fusionを用意してその上に仮想Windows7を導入してB~CASサーバーを動作させていました。しかしWindows上のBonCasServerはRemote Desktopで接続するとBonCasLinkが解除されてしまうので、他からの接続に左右されないCasServerをMAC/Linux上に構築することにした。
1. きっかけ
BoncasServerをMacOS上で動作させようと思ってWebを検索したところ、あるサイトがLinux上で動作させている記事がいくつかあった。これによれば
この記事の更新中にBonCasServerを動作させているMac Mini Serverがクラッシュしてしまったので、応急措置としてRaspbery Pi上にbcs-perl.plを動作させている。
2.プログラムを動作させる
2.1 開発環境の整備
bcs-perlはperlプログラムなのでPerlが必要です。その他pcsc用のユーティリティが必要となります。
2.1.1 Macの場合
Xcodeコマンドライン機能を導入して使用することとします。
するとコマンドライン機能が必要かと聞いてくるので、インストールして、もう一度上記コマンドを打ち込みます。
その後下記でcpanmをインストールします。
2.1.2 Linux (Raspbery Pi)の場合
下記のコマンドでライブラリを導入します。
これだけで、bcs-perl.plを動作させることができますが、次の項カードリーダー名を取得する、pcsctestを動作させられないので、下記の方法で取得します。
2.2 bcs-perlソースコードの修正
bcs-perl.plではカードリーダーの名称を設定しなければいけないので、BCASカードを入れたカードリーダーをUSBポートに差し込んで、

この例ではReaderが一個しか差し込まれていないので、
Enter the reader number :
で止まるが 1 と入力するとその後テスト結果を表示する。
そこで、bcs-perl.plをエディトして、下記の様に修正する。

ここで、実際にこのプログラムを動かしてみます。ターミナルから、
と打ちます。この例ではpcs-perl.plがホームから下のbcs-perlと言うDirectoryにあるのでこの様になっています。

これで、プログラムは動作しています。いや動作している様に見えます。
実際は
で止まっていますが、クライアントのBonCasProxyから接続すると、
Connected from .......
とでて良好に動作している様に見えます。
しかしながら、クライアントはイニシアライズが完了しないと出てさっぱり先に進みません。
最悪の状況です。
2.3 Debugと修正
この状況でDebugするのは、私の実力では無謀とも思われ、しばらくほうって置いたのですが諦めきれずに、Wireshark(ネット監視ツール)まで持ち出して、デバックを開始しました。
Socket通信では、サーバー側がデーターを受信している様ですが、データーがクライアント側に送られていないことが判明しました。
bcs-perl.plのデーター送出部分をチェックしたところ、おかしな部分があったので、下記の様に修正しています。

なんという事でしょう。Sock->send()関数のパラメーターが一つ(オプションもあるが意味が違う)のはずが2つもあります。これはParlのバージョンの違いの為なのでしょうか。そうでなければ酷いバグです。
ともあれ、この部分を修正して、やっと動作させることができました。
この様にパラメーターの数が合わないバグはコンパイラの場合チェックされエラーとして報告されるのですが、Parlのようなインタプリタのの婆氏はチェックされることなく実行不可となります。またOSやPerlによってはサブコール時のPUSHの順番によってそのままうまく動作することもあります。ただその場合でもメモリーリークを引き起こし、長期間の動作ができない結果になります。
2.4 (追記)BonCasServerについての考察と拡張
このbcs-perlの動作はUSB接続されたBーCASカードリーダーとネットワーク接続してネットワーク側からBーCASと通信できる様にしていることです。その他にカードリーダーに差し込まれた、カードが正規のBーCASカードかどうかにチェックしています。このため通常のBーCASカード以外ではエラーになって、動作を停止してしまいます。
今回スカパー!プレミアムの受信を Linuxサーバーに組み込んだ機械にこれ用のCASカードもBCS化できないかを検討してみました。単純にカードリーダーにスカーパー専用のカードを差し込むと前記チェックプログラムのせいで動作しません。そこでチェックの部分を削除してネットワーク通信可能の状態することができます。
ここでbcs-perlのチェック部分を削除し、本来のbcs-perlと共存して動作されるためアクセスポートを変更したプログラムを作ってみました。
このプログラムは原型のlisten_portを6900から6902に変更しています。またreaderを私の使っているものにしていますので、この部分の修正で通常のBonCasServerとしても使用が可能となっています。
3.実装
通常この手のプログラムはサービス登録してシステム起動時に動作開始するか、プログラムをstartupに登録する方法がある。しかし今回はターミナルからコマンドを入力して動作させる方式であるのでプログラムを作成する面倒を避ける為に、下記のの方法を取ることにした。
3.1 Macの場合
設定→ユーザとグループからログイン項目からターミナルアプリケーションを追加する。

ターミナルを起動しておいて、
ターミナル>環境設定>プロファイルからシェルを選択してコマンドを追加する。

この設定により、起動後にターミナルが開き、実行結果が表示された状態になるが、私の場合この機械(Mac Mini Server)はBonCasServerのみに立ち上げたので、これで良しとしている。またBCAS cardやcard readerが取り外された場合など引き続き画面(画面共有など)からコマンドを打ち込める利点がある。
Linux(RaspberyPi等)の自動起動方法はここでは割愛しますので、Webで検索して下さい。
3.2 Linux(RaspberyPI)の場合
まず上記bcs-perl.plとbcs-perl1.plをbcs-perl-masterにダウンロードしておきます。
今回は、二つのターミナルを起動しておいて、それぞれport6900のbcs-perl.plとport6902のbcs-perl1.plを動作させる設定とします。
リーブート後下記のような2つのターミナルと実行結果が表示されるはずです。

4.結論
今回の実装は多くのWebを検索するなど苦労を強いられたが、終わってみれば結構簡潔な方法であったと思われます。またカードリーダのDevice DriverがMac用に用意されていますが、これらも全く不要であったことも驚きです。
今回は余ったPCとして、MacMiniServerを使ったが、実際はそれほどの性能が必要な訳ではなくRaspberyPIの最安値のものに入れ換えている、こちらの方がインストールなども非常に簡単に済ませることができた。