BonCasServer for Mac/Linux

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上で動作させている記事がいくつかあった。これによれば bcs-perl と言うPerlプログラムが使用できるらしい。早速ダウンロードして動作させようとした。しかし解説WebはLinuxばかりでMacOSでの動作は工夫が必要である。

この記事の更新中にBonCasServerを動作させているMac Mini Serverがクラッシュしてしまったので、応急措置としてRaspbery Pi上にbcs-perl.plを動作させている。



2.プログラムを動作させる

2.1 開発環境の整備

bcs-perlはperlプログラムなのでPerlが必要です。その他pcsc用のユーティリティが必要となります。

2.1.1 Macの場合

Xcodeコマンドライン機能を導入して使用することとします。

http://gaiax-techegg.hatenablog.com/entry/2015/07/09/184437を参考にしてplenvをインストールします。と前回書きましたが、古いMMac用のX-Codeはほぼ入手困難なので、直接下記のコマンドを打ちます。

$ curl -L http://is.gd/plenvsetup | bash


するとコマンドライン機能が必要かと聞いてくるので、インストールして、もう一度上記コマンドを打ち込みます。

その後下記でcpanmをインストールします。

% sudo su

# plenv versions

* system (set by /var/root/.plenv/version)

# plenv install-cpanm

# cpanm --force Chipcard::PCSC

# exit

%


2.1.2 Linux (Raspbery Pi)の場合

下記のコマンドでライブラリを導入します。

$ sudo apt-get install libccid libpcsclite-dev libpcsclite1 pcsc-tools pcscd


これだけで、bcs-perl.plを動作させることができますが、次の項カードリーダー名を取得する、pcsctestを動作させられないので、下記の方法で取得します。

$ perl ./bcs-perl.pl list



2.2 bcs-perlソースコードの修正

bcs-perl.plではカードリーダーの名称を設定しなければいけないので、BCASカードを入れたカードリーダーをUSBポートに差し込んで、pcsctest と打ってリーダーの名称を検出します。(Linuxの場合は上記参照)


この例ではReaderが一個しか差し込まれていないので、


Reader 01: NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader
Enter the reader number     :


で止まるが 1 と入力するとその後テスト結果を表示する。


そこで、bcs-perl.plをエディトして、下記の様に修正する。


ここで、実際にこのプログラムを動かしてみます。ターミナルから、


perl bcs-perl/bcs-perl.pl


と打ちます。この例ではpcs-perl.plがホームから下のbcs-perlと言うDirectoryにあるのでこの様になっています。


これで、プログラムは動作しています。いや動作している様に見えます。
実際は

Begin Listening(0.0.0.0:6900)....
で止まっていますが、クライアントの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と共存して動作されるためアクセスポートを変更したプログラムを作ってみました。

bcs-perl1.pl

このプログラムは原型の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にダウンロードしておきます。

$ wget https://mun2.jp/assets/bcs-perl-master.zip
$ unzip bcs-perl-master.zip
(その後bcs-perl.plとbcs-perl1.plのカードリーダー部を前項の説明に従って変更して下さい)

 


今回は、二つのターミナルを起動しておいて、それぞれport6900のbcs-perl.plとport6902のbcs-perl1.plを動作させる設定とします。

$ cd .config
$ mkdir autostart
$ cd autostart

$ nano sebastien.desktop
(下記を入力します。)
[Desktop Entry]
Exec=lxterminal -e /home/”ユーザネーム”/autorun.sh
Type=Application
Name=Sebastien
Terminal=true

$ nano sebastien1.desktop
(下記を入力します。)
[Desktop Entry]
Exec=lxterminal -e /home/”ユーザネーム”/autorun1.sh
Type=Application
Name=Sebastien
Terminal=true

$ cd ~/

$ nano autorun.sh
(下記を入力します。)
# !/bin/sh
perl /home/”ユーザネーム”/bcs-perl-master/bcs-perl.pl

$ nano autorun1.sh
(下記を入力します。)
# !/bin/sh
perl /home/”ユーザネーム”/bcs-perl-master/bcs-perl1.pl

$ chmod +x autorun.sh
$ chmod +x autorun1.sh

$ sudo reboot


リーブート後下記のような2つのターミナルと実行結果が表示されるはずです。


4.結論

今回の実装は多くのWebを検索するなど苦労を強いられたが、終わってみれば結構簡潔な方法であったと思われます。またカードリーダのDevice DriverがMac用に用意されていますが、これらも全く不要であったことも驚きです。

今回は余ったPCとして、MacMiniServerを使ったが、実際はそれほどの性能が必要な訳ではなくRaspberyPIの最安値のものに入れ換えている、こちらの方がインストールなども非常に簡単に済ませることができた。




CGI Powered
MUN2 HOME PAGE
(c) 2026 mun2.jp