Dockerでrecdvbを使ったmirakurunとchinachuを動かす

投稿者: しみほ (2017/09/17)

カテゴリ: 未分類

タグ: 無し

投稿者: しみほ

詳しくはGithubを見てくれ。

PX-S1UDでChinachuしたいと思ったときにコードを書き換えようと思ったのがきっかけ。

ってことで書き換えました。

このコードの検証で一番つまづいたのは、ホストOSのカーネルの古さ(Ubuntu16.04 = Linux 4.4系統のカーネル)によってまずPX-S1UDが認識されていなかった問題ですね…

ここでmirakurun/Dockerfileの書き換えた内容の説明をします。

		gzip \
		vim \
		wget \
		curl \
		linux-headers \
		pcsc-lite-dev \
		ccid \

使いそうなパッケージを追加するコードです。

	# firmware
	&& cd /tmp/ \
	&& wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip \
	&& unzip PX-S1UD_driver_Ver.1.0.1.zip \
	&& mkdir -p /usr/local/lib/firmware \
	&& cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /usr/local/lib/firmware/ \
	&& cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/ \
	&& mkdir -p /etc/ld.so.conf.d/ \
	&& echo '/usr/local/lib' >> /etc/ld.so.conf.d/local.conf \
	&& echo 'smsusb' >> /etc/modules \

ドライバの追加コードです。
動くかを試行錯誤して動いたコードでコミットしたので汚くなってます。

	# other setting
	&& adduser root video \

ルートユーザーをビデオグループに追加しています。
追加しないと動かないらしいです。

	# softcas
	&& cd /tmp/ \
	&& wget http://web.archive.org/web/20140928031051/http://www.wazoku.net/softcas.zip \
	&& unzip softcas.zip \
	&& cd /tmp/softcas \
	&& wget -O winscard.cpp http://pastebin.com/raw/5144Ah9g \
	&& wget -O Makefile http://pastebin.com/raw/FQdSixkB \
	&& 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 \
	&& make \
	&& mv /usr/lib/libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so.1.0.0.backup \
	&& cp libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so.1.0.0 \

例のアレです。
詳しくは言いませんが、既存のライブラリをビルドしたもので置き換えています。

	# arib25
	&& cd /tmp/ \
	&& wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip \
	&& unzip c44e16dbb0e2.zip \
	&& cd /tmp/pt1-c44e16dbb0e2/arib25/src \
	&& make \
	&& make install || echo "kuso" \

arib25のビルドです。
make installするときに絶対エラーコードで終了するので、適当にecho文噛ませてます。

	# recdvb
	&& cd /tmp/ \
	&& wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz \
	&& tar xvzf recdvb-1.3.1.tgz \
	&& cd recdvb-1.3.1 \
	&& ./autogen.sh \
	&& ./configure --enable-b25 \
	&& sed -i '/#include <sys\/msg.h>/d' recpt1core.h \
	&& sed -i -E 's!(#include <sys/msg.h>)!#undef _GNU_SOURCE\n#undef _BSD_SOURCE\n\1!' recpt1.c \
	&& sed -i -E 's!(#include <sys/msg.h>)!#undef _GNU_SOURCE\n#undef _BSD_SOURCE\n\1!' recpt1ctl.c \
	&& sed -i -E 's!(#include <sys/msg.h>)!#undef _GNU_SOURCE\n#undef _BSD_SOURCE\n\1!' checksignal.c \
	&& sed -i -E 's!(#include <ctype.h>)!\1\n#include <event.h>!' tssplitter_lite.c \
	&& sed -i 's#-I../driver#-I../driver -I/usr/local/include#' Makefile \
	&& make \
	&& make install \

recdvbをビルドしています。
Makeできないコードを修正しつつビルドします。