PandaboardにUbuntu+地デジサーバを(地デジサーバソフト編)

==準備==
* Monster TV HDUS
* NTT-ME SCR3310-NTTCom

HDUS については旧型と新型があるらしい。
[http://www26.atwiki.jp/hdus/pages/20.html MonsterTV HDUS @ ウィキ – MonsterTV HDUS 新・旧比較] によれば、こちらで使用しているのは新型みたい。(本体シリアルが177〜)

このへんは各自情報収集して対応してください。

==セットアップ==
必要な情報は概ね [http://www12.atwiki.jp/edaeda/pages/13.html edaeda @ ウィキ – HDUSのセットアップ] に書かれているので、こちらに従えば良いと思います。Linuxのディストリビューションが、上記ページは Fedra であり、いっぽう Pandaboard は Ubuntu であるため、若干の差分があります。

ここでは、差分について書きます。

===事前にインストールしておくパッケージ===
以下のパッケージを事前にインストールしておきます。

* build-essential
* patch
* pkg-config
* libboost-filesystem1.42-dev
* libboost-thread1.42-dev
* libboost1.42-all-dev
* libglib2.0-dev
* libpcsclite-dev
* libusb-dev

具体的には以下のコマンドを入力します。

$ sudo apt-get install patch build-essential pkg-config \
libboost-filesystem1.42-dev libboost-thread1.42-dev \
libboost1.42-all-dev libglib2.0-dev libpcsclite-dev libusb-dev

===「recfriioコマンドのインストール」における追加修正===

g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DHDUS -DUDP `pkg-config –cflags glib-2.0` -c -o IoThread.o IoThread.cpp
In file included from IoThread.cpp:13:
RingBuf.hpp:90: error: ‘condition’ in namespace ‘boost’ does not name a type
RingBuf.hpp: In member function ‘void RingBuf::setReady(T*)’:
RingBuf.hpp:188: error: ‘cond’ was not declared in this scope
RingBuf.hpp: In member function ‘const T* RingBuf::getPopPtr(unsigned int)’:
RingBuf.hpp:233: error: ‘cond’ was not declared in this scope
RingBuf.hpp: In member function ‘void RingBuf::interrupt()’:
RingBuf.hpp:260: error: ‘cond’ was not declared in this scope
make: *** [IoThread.o] エラー 1

というエラーが発生した場合は RingBuf.hpp に下のような一行を加える

RingBuf.hpp


#include
#include
// add st
#include
// add ed

また
Recordable.hpp:118: error: ISO C++ forbids declaration of ‘uint8_t’ with no type
といったコンパイルエラーが発生した場合は Recordable.hpp に以下を追加する。


#include

AbstractFriio.cpp:221: error: ‘umask’ was not declared in this scope
というコンパイルエラーが発生した場合は、AbstractFriio.cpp に


#include

を追加します。

また boost_filesystem でリンクエラーとなる場合はMakefileを修正します。

LIBS = -lpthread -lboost_thread-mt -lboost_filesystem `pkg-config –libs glib-2.0`
↓↓↓↓↓
LIBS = -lpthread -lboost_thread-mt -lboost_filesystem-mt `pkg-config –libs glib-2.0`

===「HDUSを認識させる」における修正===
/etc/rc.local には、以下のコマンドを記述します。
SKNET_AS11Loader.sys が /usr/local/bin に存在する場合の例です。

/bin/sh -c ‘cd /usr/local/bin;./as11loader’

SKNET_AS11Loader.sys を /usr/local/bin 以外に配置した場合、cd で指定するディレクトリをそれにあわせて変更してください。

※as11loader はカレントディレクトリに SKNET_AS11Loader.sys があることを前提にした動作となっているようです。

なお、上記のコマンドは、接続しているHDUSの数だけ記述します。また、後述する udev を使用する場合は、/etc/rc.local の修正は不要です。(「HDUSの自動ロード」参照)

===「ICカードリーダのセットアップ」における修正===

pcscdの起動方法が Ubuntu では異なります。

$ sudo /etc/init.d/pcscd start

リスタートする場合は以下のとおり。

$ sudo /etc/init.d/pcscd restart

yum や chkconfig は必要ありません。

===HDUSの自動ロード===
$ sudo vi /etc/udev/rules.d/52-as11loader.rules

中身はこんな感じ。

SUBSYSTEM==”usb”, SYSFS{idVendor}==”1738″, SYSFS{idProduct}==”5211″, RUN+=”/bin/sh -c ‘cd /usr/local/bin ; /usr/local/bin/as11loader'”
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”3275″, ATTRS{idProduct}==”6051″, MODE=”0666″, GROUP=”video”

===Ubuntu11.04 Upgrade時の注意===
5/6時点では、Ubuntu11.04ではカードリーダが動作しません。よって、以下の対応により乗り切ります。

sudo vi /etc/apt/sources.list

deb http://ports.ubuntu.com/ubuntu-ports/ natty main universe restricted multiverse

の”natty”とある部分を”maverick”とする。つまり

deb http://ports.ubuntu.com/ubuntu-ports/ maverick main universe restricted multiverse

と変更。

$ sudo apt-get remove pcscd libpcsclite-dev libpcsclite1 libccid
$ sudo apt-get install pcscd libpcsclite-dev libpcsclite1 libccid

取得:1 http://ports.ubuntu.com/ubuntu-ports/ maverick/main libpcsclite1 armel 1.5.5-3ubuntu2 [50.6 kB]
取得:2 http://ports.ubuntu.com/ubuntu-ports/ maverick/universe libccid armel 1.3.11-1 [105 kB]
取得:3 http://ports.ubuntu.com/ubuntu-ports/ maverick/main libpcsclite-dev armel 1.5.5-3ubuntu2 [68.2 kB]
取得:4 http://ports.ubuntu.com/ubuntu-ports/ maverick/universe pcscd armel 1.5.5-3ubuntu2 [86.9 kB]

インストールが終わったら、

sudo vi /etc/apt/sources.list

deb http://ports.ubuntu.com/ubuntu-ports/ natty main universe restricted multiverse

に戻しておくこと。

また、このままだと、apt-get update; apt-get upgrade すると、新しいバージョンのpcscdがインストールされ、現象が再発してしまうため、インストールしたバージョンを固定します。

$ echo libpcsclite1 hold | sudo dpkg –set-selections
$ echo libccid hold | sudo dpkg –set-selections
$ echo libpcsclite-dev hold | sudo dpkg –set-selections
$ echo pcscd hold | sudo dpkg –set-selections

==EPGrecのインストール==
===epgdumpr2のインストール===
http://www.mda.or.jp/epgrec/index.php/インストール前の準備
から、以下のファイルをダウンロードします。

$ wget “http://www.mda.or.jp/epgrec/index.php?plugin=attach&refer=インストール前の準備&openfile=epgdumpr2-utf8.tar.gz” -O epgdumpr2-utf8.tar.gz

とでもすれば良いでしょう。

次に http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz のパッチをダウンロードします。パッチをあてないとUbuntuでは Segmentation Faultが発生するようです。

$ wget http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz
$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0246.zip
$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0248.zip

$ tar xvzf epgdumpr2-utf8.tar.gz
$ gunzip epgdumpr2-utf8_segv.patch.gz
$ unzip up0246.zip
$ unzip up0248.zip
$ cd epgdumpr2/
$ cp ../epgdumpr2-utf8_segv.patch ./
$ cp ../fix_overflow_184.patch ./
$ cp ../fix_overflow_maxseclen.patch ./
$ patch -p1 < epgdumpr2-utf8_segv.patch $ patch -p1 < fix_overflow_184.patch $ patch -p1 < fix_overflow_maxseclen.patch $ make $ sudo cp epgdump /usr/local/bin/ ===atのインストール=== $ sudo apt-get install at ===epgrecのビルド=== http://sourceforge.jp/projects/epgrec/releases/ から最新版をダウンロードします。 インストールは以下のとおり。 $ sudo tar xvzpf epgrec-日付.tar.gz -C /var/www/ ※/var/www がドキュメントルートの場合 ===config.phpの設定=== /var/www/epgrec/config.php.sampleをconfig.phpにリネームします。 $ sudo mv /var/www/epgrec/config.php.sample /var/www/epgrec/config.php config.phpを環境に合わせて修正する。 ====地上デジタルチャンネルマップ$GR_CHANNEL_MAPの設定==== サンプルを見ればなんとなく分かると思います。済んでいる地域に合わせてチャンネル情報を修正します。 http://www.maspro.co.jp/contact/bro/bro_ch.html あたりを参考に設定すれば良いでしょう。 ====do-record.shの設定==== こちらでは、以下のとおりとしています。
#!/bin/sh

RECORDER=/usr/local/bin/recfriio
B25=/usr/local/bin/b25

if [ ${MODE} -eq 0 ]; then
# MODE=0では必ず無加工のTSを吐き出すこと
sleep 2
$RECORDER –b25 –strip –hdus $CHANNEL $DURATION ${OUTPUT}
else
$RECORDER –strip –hdus –b25 $CHANNEL $DURATION ${OUTPUT}
fi

====www-dataをrootグループに加える====
$ sudo gpasswd -a www-data root

====/etc/at.denyの編集====
WEBサーバで使用しているユーザ(www-data等)が含まれている場合は削除します。

===ffmpeg===
Ubuntu に含まれる ffmpeg は H.264 に対応していないため、自前でビルドします。

git を使っているので、インストールしていない場合は予めインストールしておきます。

$ sudo apt-get install git-core

====ffmpegとx264ライブラリの削除====
$ sudo apt-get remove ffmpeg x264 libx264-dev

====必要なライブラリをインストール====
$ sudo apt-get update
$ sudo apt-get install libfaac-dev libmp3lame-dev libxvidcore-dev

====x264ライブラリのインストール====

$ cd /tmp
$ git clone git://git.videolan.org/x264.git
$ cd x264
$ ./configure
$ make
$ sudo make install

====ffmpegのインストール====
$ cd /tmp
$ git clone git://git.videolan.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure –enable-shared –enable-sse –enable-ssse3 –enable-pthreads –enable-gpl –enable-libmp3lame –enable-libfaac –enable-nonfree –enable-libx264 –enable-libxvid –enable-pthreads –enable-zlib
$ make
$ make install

===WEBサーバについて===
Apache は重そうなので、lighttpd をインストールした。epgrecに必要な MySQL や PHP もインストール。

$ sudo apt-get install lighttpd php5 php-pear php5-gd php5-cgi php5-mysql mysql-server

もしかしたら php-pear と php5-gd は必要ないかも。

設定は検索する等して対処してください。

PandaboardにUbuntu+地デジサーバを(Ubuntu10.10インストール&使用可能なメモリを増やす編)

==必要なモノ==
* Pandaboard
* SDカード(4Gバイト以上)
* 母艦PC (Linux) ※他のOSでも可能と思われますが、使用するツールが異なります

最低限必要なのは上記だが、地デジデータを保存するためには大容量のメディアが必要となるため、当方では64GバイトのUSBメモリを用意した。またSDカードはSandisk社32Gバイトの製品を使った。

==Ubuntuのインストール==

[http://www.omappedia.com/wiki/OMAP_Ubuntu_Main OMAP Ubuntu Main -OMAPpedia] から、『Quick Start Guide』を開き、そちらに書いてある手順に従えば良い。

===ダウンロード===

[http://www.omappedia.com/wiki/Prebuilt_ubuntu_binaries PandaBoard Prebuilt Ubuntu binaries] から filesystem のリンク先をダウンロードする。

$ wget http://cdimage.ubuntu.com/ubuntu-netbook/ports/releases/10.10/release/ubuntu-netbook-10.10-preinstalled-netbook-armel+omap4.img.gz

===SDカードのフォーマット===

母艦PCからSDカードにイメージを書き込む。以下の手順によりSDカードは初期化されるので、消えたら困るファイルがないように注意すること。

$ sudo fdisk -ls

などと入力して、SDカードに対応するデバイスファイルを確認する。

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 1 17062 63470610 83 Linux

などと表示されるので、これにより把握する。
そして、

$ sudo sh -c ‘zcat ./ubuntu-netbook-10.10-preinstalled-netbook-armel+omap4.img.gz > /dev/sdb’

として、SDカードにイメージを書き込む。

$ sync

として、SDカードに確実に書き出しを実施する。

===起動===

[http://www.omappedia.com/wiki/Ubuntu_Prebuilt_Platform_Configuration PandaBoard Configuration] にあるとおりに接続して Pandaboard を起動する。

無事起動すれば、見慣れたUbuntuのログイン画面が表示されるはずです。

===サーバ用途に向けてカスタマイズ===

グラフィカルな画面が表示された喜びもつかの間、少し考えれば、GUI は使わないのでメモリの無駄遣いにしかならないと気づくはず。

そこで、U-Bootというブートローダのパラメータを修正します。ポイントは以下のとおり。

/boot/boot.script を修正
* splash 削除
* text 追加
* メモリも増やす

具体的には以下のとおりです。

setenv bootargs quiet splash ro elevator=noop vram=32M mem=460M@0x80000000 mem=256M@0xA0000000 root=UUID=54311947-79da-457f-8767-732aac6b6c25 fixrtc
↓↓↓↓↓↓↓↓
setenv bootargs quiet text ro elevator=noop vram=32M mem=460M@0x80000000 mem=460M@0xA0000000 root=UUID=54311947-79da-457f-8767-732aac6b6c25 fixrtc

Kernelのバグが原因でPandaboardはせっかく1GBのDRAMが搭載されているにも関わらず、460MB+256MBという構成が認識できる最大容量となっているとのことだが、どうやら460MB+460MBでも動作するらしい。ということで、そのあたりのパラメータも修正してある。

$ sudo apt-get install uboot-mkimage
$ sudo mkimage -A arm -T script -C none -n “Pandaboard boot script” \
-d boot.script boot.scr

上記ににより、boot.scrを作成する。

$ sudo mount /dev/mmcblk0p1 /mnt
$ sudo cp /mnt/boot.scr /mnt/boot.scr.orig
$ sudo cp boot.scr /mnt/

リブートしたら、懐かしい!?コンソールによるログインプロンプトが表示されるはず。

GUIを表示させたければ、ログインした後、”startx”すれば良い。

$ startx

メンテナンスを行っていく場合、GUIが好みならstartxすれば良いし、頑張って、モニタをDVIやHDMIでつないでコンソールを使うのも良い。当方では、sshdをインストールして、母艦PCからsshによりログインしている。