LinuxでSoftCasは使用できるのか? ~Ubuntu 14.04 LTS編~
Pocket

前回CentOS 7で使用できることを確認したので、今回はUbuntu 14.04 LTSで検証を行う。
検証を行う環境は以下。

  • OS:Ubuntu  Desktop 14.04 LTS
  • 録画チューナー:PT2(余ってた)
  • CPU:Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
  • メモリ:4GB

それでは行ってみよう。

1.最低限の設定を行う

IPアドレスやホスト名の設定を行っておく。
ここについては割愛。

設定後、apt-get updateを行っておく。

$ sudo apt-get update

2.LAMP環境のインストール

次に、LAMP環境のインストールを行う。
(正直、Softcasの検証だけなら箇所はあまり必要ではない。epgrecなどの導入時用に記述しているだけだ。)

$ sudo apt-get install -y apache2 mysql-server libapache2-mod-auth-mysql php5-mysql php5 libapache2-mod-php5 php5-mcrypt

3.b25&PT2ドライバ&recpt1のインストール

PT2のドライバをインストールするため、必要となるパッケージをインストールする。

$ sudo apt-get install -y libccid libpcsclite-dev libpcsclite1 pcsc-tools pcscd autoconf g++

パッケージインストール後、復号ツールであるb25をダウンロード、解凍してインストールする。

$ wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
$ unzip c44e16dbb0e2.zip
$ cd pt1-c44e16dbb0e2/arib25
$ make clean && make && make install

次に、PT2ドライバのインストールを行う。

$ cd
$ sudo su -
# echo "blacklist earth-pt1" > /etc/modprobe.d/blacklist.conf
# exit
$ wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar -xvlf tip.tar.bz2
$ cd pt1-c8688d7d6382/driver/
$ make
$ sudo make install
$ sudo modprobe pt1_drv
$ sudo reboot

再起動後、Ubuntu 14.04 LTSでPT2を認識している事を確認する。

test@test-P5K-E:~$ lspci | grep Multi
04:02.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)
test@test-P5K-E:~$
test@test-P5K-E:~$ lsmod | grep pt1
pt1_drv 40802 0
test@test-P5K-E:~$
test@test-P5K-E:~$ ls -la /dev | grep pt1
crw-rw-rw- 1 root video 248, 0 12月 23 23:30 pt1video0
crw-rw-rw- 1 root video 248, 1 12月 23 23:30 pt1video1
crw-rw-rw- 1 root video 248, 2 12月 23 23:30 pt1video2
crw-rw-rw- 1 root video 248, 3 12月 23 23:30 pt1video3

20141223_000001

 

次に、recpt1のインストールを行う。
以下のコマンドを実行する。

$ cd pt1-c8688d7d6382/recpt1/
$ sudo ./autogen.sh
$ sudo ./configure -enable-b25
$ make
$ sudo make install
$ sudo su
# echo "/usr/local/lib" > /etc/ld.so.conf.d/recpt1.conf 
# exit
$ sudo ldconfig
Sponsored Links

4.Softcasのインストール

さて、それではSoftcasのインストールを行ってみよう。
以下のコマンドで、softcasをダウンロード、解凍する。

$ wget http://www.wazoku.net/softcas.zip
$ unzip softcas.zip
$ cd softcas
$ wget -O winscard.cpp http://pastebin.com/download.php?i=5144Ah9g
$ wget -O Makefile http://pastebin.com/download.php?i=FQdSixkB

次に、ライブラリが変更されたため、winscard.cppの一部を書き換える必要がある。
以下のコマンドでソースの書き換えを行う。

$ sed -i "/LONG SCardGetStatusChange/s/LPSCARD_READERSTATE_A/LPSCARD_READERSTATE/g" winscard.cpp
$ sed -i "s/SCARD_IO_REQUEST g_rgSCardT1Pci;/const SCARD_IO_REQUEST g_rgSCardT1Pci = { SCARD_PROTOCOL_T1, sizeof(SCARD_IO_REQUEST) };/g" winscard.cpp

上記対応で、winscard.cppは以下のようになる。

●winscard.cpp

//  Put the following files in the same folder:
//      Crypto.cpp, Crypto.h, Decoder-ECM.cpp, Decoder.h, Global.h
//      Keys.cpp, Keys.h, Keyset.cpp, Keyset.h
//  You should modify "Size" in Decoder-ECM.cpp l42 to "Size-3"
#include <string.h>
#include <PCSC/winscard.h>
#define htons htons_
#define ntohs ntohs_
#include "Global.h"
#include "Keys.h"
#include "Decoder.h"
#define CHAR    char
extern"C"{
void __attribute__ ((constructor)) SCardVCasInit(void) {
BCAS::Keys::RegisterAll();
}
LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
{
*phContext=(SCARDCONTEXT)0x35313239;
return SCARD_S_SUCCESS;
}
LONG SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)
{
CHAR r[]="@OishiiSlurper\0";
if(mszReaders)memcpy(mszReaders,r,sizeof r);
*pcchReaders=sizeof r/sizeof r[0];
return SCARD_S_SUCCESS;
}
LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
{
*phCard=(SCARDHANDLE)0x35313239;
*pdwActiveProtocol=SCARD_PROTOCOL_T1;
return SCARD_S_SUCCESS;
}
LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)
{
switch(pbSendBuffer[1])
{
case 0x30:{
BYTE r[]={
0x00,0x39,0x00,0x00,0x21,0x00,0x00,0x05, 0xc0,0xff,0xee,0xc0,0xff,0xee,0x01,0x50,
0x36,0x31,0x04,0x66,0x4b,0x17,0xea,0x5c, 0x32,0xdf,0x9c,0xf5,0xc4,0xc3,0x6c,0x1b,
0xec,0x99,0x39,0x21,0x68,0x9d,0x4b,0xb7, 0xb7,0x4e,0x40,0x84,0x0d,0x2e,0x7d,0x98,
0xfe,0x27,0x19,0x99,0x19,0x69,0x09,0x11, 0x01,0x02,0x01,0x90,0x00};
memcpy(pbRecvBuffer,r,sizeof r);
*pcbRecvLength=sizeof r;
break;}
case 0x32:{
BYTE r[]={
0x00,0x0f,0x00,0x00,0x21,0x00,0x01,0x54, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x90,0x00};
memcpy(pbRecvBuffer,r,sizeof r);
*pcbRecvLength=sizeof r;
break;}
case 0x34:{
BYTE r[]={
0x00,0x15,0x00,0x00,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x90, 0x00};
BCAS::Decoder::DecodeECM(pbSendBuffer+5,pbSendBuffer[4],r+6,NULL);
memcpy(pbRecvBuffer,r,sizeof r);
*pcbRecvLength=sizeof r;
break;}
case 0x80:{
BYTE r[]={
0x00,0x10,0x00,0x00,0xA1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x00};
memcpy(pbRecvBuffer,r,sizeof r);
*pcbRecvLength=sizeof r;
break;}
default:{
BYTE r[]={
0x00,0x04,0x00,0x00,0xa1,0xfe,0x90,0x00};
memcpy(pbRecvBuffer,r,sizeof r);
*pcbRecvLength=sizeof r;
break;}
}
return SCARD_S_SUCCESS;
}
LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition){return SCARD_S_SUCCESS;}
LONG SCardFreeMemory(SCARDCONTEXT,LPCVOID){return SCARD_S_SUCCESS;}
LONG SCardReleaseContext(SCARDCONTEXT){return SCARD_S_SUCCESS;}
LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout,LPSCARD_READERSTATE rgReaderStates, DWORD cReaders){return SCARD_S_SUCCESS; }
SCARD_IO_REQUEST g_rgSCardT1Pci_;
const SCARD_IO_REQUEST g_rgSCardT1Pci = { SCARD_PROTOCOL_T1, sizeof(SCARD_IO_REQUEST) };
}

ソース書き換え後、makeを行う。

# make

make後、「libpcsclite.so.1.0.0」というファイルが作成されているので、これを既存の、ファイルと置き換える。
元のファイルについては、以下のコマンドで場所を確認する。

$ find /lib/ -name libpcsclite.so.1.0.0
/lib/x86_64-linux-gnu/libpcsclite.so.1.0.0

上記コマンドでファイルの場所は分かったので、置き換えを行う。

$ sudo cp libpcsclite.so.1.0.0 /lib/x86_64-linux-gnu/

これで、Softcasを利用する準備が整った。

5.テストの実施

実際に利用出来るか、以下のコマンドでテストする。

$ recpt1 --strip -b25 27 10 test.ts

テストの結果、無事に再生することが出来た。
これでUbuntuとCentOS、どちらのOSでも利用できるようになった。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 7 comments

  1. だぶだぶ Reply

    makeをするとビルドに失敗します…
    ================
    daburutti@DABU-Sever:~/softcas$ make
    g++ -g -fPIC -O2 -I /usr/include/PCSC -c -o winscard.o winscard.cpp
    winscard.cpp:1:25: error: too many decimal points in number
    PROGRAM = libpcsclite.so.1.0.0
    ^
    winscard.cpp:13:40: error: stray ‘@’ in program
    $(LINK.o) $^ $(LOADLIBES) -shared -o $@
    ^
    winscard.cpp:1:1: error: ‘PROGRAM’ does not name a type
    PROGRAM = libpcsclite.so.1.0.0
    ^
    : recipe for target ‘winscard.o’ failed
    make: *** [winscard.o] Error 1
    ======================
    どうすればよいでしょうか? お時間ありましたらよろしくお願いします。

  2. だぶだぶ Reply

    さきほどコメントした者です。
    自力で解決できたのですが、また詰まりました…
    ===========================
    daburutti@DABU-Sever:~/softcas$ make
    Makefile:2: *** missing separator. Stop.
    ===========================
    何度も申し訳ございません…

  3. だぶだぶ Reply

    回避?したのですがまた別のエラーが…
    ====================================
    daburutti@DABU-Sever:~/softcas$ make
    g++ -g -fPIC -O2 -I /usr/include/PCSC -c -o winscard.o winscard.cpp
    winscard.cpp:12:18: fatal error: Keys.h: No such file or directory
    #include “Keys.h”
    ^
    compilation terminated.
    : recipe for target ‘winscard.o’ failed
    make: *** [winscard.o] Error 1
    ====================================
    連続の書き込み申し訳ございません…

    • blacknon
      blacknon Reply

      Keys.hが同一フォルダに無いようですね。
      おそらく、配布されているzipファイルの内容が変更されたのかなと。

      2chなどを参考に、どこからかKeys.cpp等の入ってるファイルを持ってきて、現在の内容に置き換えるのがよいかと思います。

      • だぶだぶ Reply

        すいません…Keys.hを入れてもうまくいきません…(´;ω;`)
        daburutti@DABU-Sever:~/softcas$ make
        g++ -g -fPIC -O2 -I /usr/include/PCSC -c -o winscard.o winscard.cpp
        make: *** No rule to make target ‘Keys.o’, needed by ‘libpcsclite.so.1.0.0’. Stop.
        ==============

        • blacknon
          blacknon Reply

          >make: *** No rule to make target ‘Keys.o’, needed by ‘libpcsclite.so.1.0.0’. Stop.

          このエラーメッセージを読むと、「Keys.o」を作るには、「libpcsclite.so.1.0.0」が必要だよ、という意味だとわかりますよね。
          このファイルが作成されてないか、PATHが通ってないため読み込めてないのではないかと思いますが。

Leave a Comment

メールアドレスが公開されることはありません。

*