Pebble Timeの出荷案内がやってきた!

つい先程、Kickstarterから、出荷案内がやってきた。早速手続きを行った。

この時点で色を選択するらしい。Apple Watchと同じ白を選択した。運送方法については船便と航空便の選択ができるようだ。こちらについては、急ぎでないことと航空便は別途5000円弱必要だったので船便を選択。4〜6週間かかるらしいけど、まあいいか。

サーバーのストレージが飛んだ!

先週末の話になりますが、自宅サーバーのストレージが飛びました。サーバーといっても、Raspberry-piであり、SDカードにアクセス出来なくなったということです。

かなりひどく、『スーパーブロック』と呼ばれる管理領域が読めなくなっていることに加え、どうやら半分以上のブロックにアクセス出来なくなっているようでした。ddrescueというツールでバックアップをとろうとしましたが、読み出し速度が8KB/秒程度となっており、いつ終わるか分からない。そこで復旧はあきらめ、いちからインストールすることにした。

過去の古めのバックアップとこれまでに書きしたためたももによりなんとか現状のレベルにできました。が、もう少し時間をかける必要がありそうです。

はあ、バックアップはまめにとっておくべきだった。

Android Tablet端末『ainol NOVO7 Aurora2』購入した

久々に日本橋に寄ってみたところ、ainol NOVO7 Aurora2という、いわゆる中華タブレット端末が販売されていたので購入しました。

もともと購入するつもりはなかったけれど、お仕事であったら便利だなあと思っていたところに、14000円程度で売られていたのでつい・・・

[img_assist|nid=877|title=ainol NOVO7 Aurora2 No1|desc=ainol NOVO7 Aurora2のホーム画面。 既にたくさんアプリをインストールしています。|link=node|align=left|width=480|height=280]

購入したら、少し動かした後早速カスタムROMをインストールすることにしました。

・タッチパネルの精度が悪い。
・フォントが中国語(繁体字??/簡体字??)
・Wifiの接続が安定しません。
・数時間放置していると電源断になっています。

とまあ、安かろう悪かろうで、このままでは安物買いの銭失いになりかねなかったからです。

==カスタムROMはどれをインストールする?==

あったら便利だなあと思っていたところに、14000円程度で売られていたのでつい・・・

購入したら、少し動かした後早速カスタムROMをインストールすることにしました。

* タッチパネルの精度が悪い。
* スリープ状態でACアダプタのコネクタを挿抜すると、反応しなくなることがある。
* フォントが中国語(繁体字??/簡体字??)
* Wifiの接続が安定しない。
* 数時間放置していると電源断になっている。
* 中国で流行っているかもしれないが、ご人的には必要のないソフトがたくさんプリインされている。

とまあ、安かろう悪かろうで、このままでは安物買いになっちゃうので、なんとかしなければ。

==カスタムROMはどれをインストールする?==

6/31時点で出回っていると思われるカスタムROMは以下のとおりです。

* [http://bbs.ainol.com/forum.php?mod=viewthread&tid=7718 Android 4.0.3 – feiyu_mod@20120609]
* [http://www.slatedroid.com/topic/34996-0621-firmware-tencai/ 0621 firmware tencai – SlateDroid.com]]
* [http://webhd.xuite.net/_oops/aggro/tpl Aggro0626-A.rar]

いずれもインストールして少し操作してみた結果、Aggro0626-A.rar をインストールすることにしました。後者にした理由は以下のとおり。

* 開発者向けオプションで、『スリープモードにしない』を有効にした際、スリープ時刻になった時のLEDの明るさが後者のほうが明るかった。
※Android 4.0.3 – feiyu_mod@20120609 はほとんど真っ黒で、目を凝らさないと見えなかった。
* スリープ中ACアダプタのコネクタ挿抜してもちゃんと動作する。
* タッチパネル操作がより正確。
※Android 4.0.3 – feiyu_mod@20120609 の場合、保護シートを貼っていると、操作しなくても勝手にタップ動作したりする。

ただし、Wifiの接続については、前者のほうがスムーズだと感じられた。

リカバリーモードから [http://115.com/file/e71pyutx#elf2-root.zip elf2_root.zip] をインストールした後、カスタムROMをインストールすれば良い。root化済みなら、カスタムROMだけインストールすれば良い。詳細なインストール方法については割愛。適宜検索するなどしてください。

==カスタムファームをインストールしたらしておくこと==

* Titanium Backup でバックアップ。
* 日本語フォントを準備
* カスタムROMをインストールした後にやるべきことをシェルスクリプトに記述する。
** 日本語フォントをインストール
** ネイティブアプリ等を好みでインストール(私の場合はEmacsをインストール)

== ベンチマーク結果==

そこそこいいんじゃないかなという感想。実際、操作していてもスムーズです。ベンチマークの結果を見て納得。

[img_assist|nid=878|title=ainol NOVO7 Aurora2ベンチマーク結果|desc= 想像よりも良い結果だった。|link=node|align=left|width=480|height=280]

自分用にカスタマイズしたPodcastを活用する

Podcastは非常に便利で、個人的には活用しています。
ところで有益な情報を提供してくれているにも関わらず、諸般の理由で
Podcastとして公開されていないことがあります。

例えばラジオ番組。
従来の放送との兼ね合いもあるのでしょうか。Podcastでは公開されていない
ことが多いです。

最近自宅サーバに取り込んでRSSを自動生成するようにしました。
備忘録として書いてみます。
記述する範囲はRSSを作成するところと、HTTPサーバ(Lighttpd)の設定につい
てのみです。

==準備==

===Ruby===
個人的にRubyが好みなので、RubyでRSSを生成する処理を記述しました。
1.9.3で動作確認をしています。多分1.8.7系でも動作します。

===HTTPサーバ===
自宅サーバは既にLighttpdを導入しているので、こちらに設定を追加しました。

==参考URL==
[http://haraita9283.blog98.fc2.com/blog-entry-312.html Ruby/REXML: CCLedなオーディオコンテンツを紹介するポッドキャストのフィード(RSS2.0)の読み書き | anobota]

==Rubyスクリプト==


#!/usr/bin/ruby
# -*- coding: utf-8 -*-

require “rexml/document”
require “uri”

class REXML::Element
def add_elem(type, text, attributes=nil)
elem = REXML::Element.new(type)
elem.text = text if text
self.add_element(elem, attributes)
end
end

def make_rss2(channel_info, tracks)
rss = REXML::Document.new
rss << REXML::XMLDecl.new("1.0", "utf-8") rss.add_element("rss", { "version"=>“2.0”,
# “xmlns:creativeCommons”=>”http://backend.userland.com/creativeCommonsRssModule”,
“xmlns:dc”=>”http://purl.org/dc/elements/1.1/”,
“xmlns:atom”=>”http://www.w3.org/2005/Atom”
})

channel = REXML::Element.new(“channel”)
channel.add_elem(“title”, channel_info[:title])
channel.add_elem(“link”, channel_info[:link])
channel.add_elem(“description”, channel_info[:description])
rss.elements[“rss”].add_element(channel)

tracks.each {|track|
item = REXML::Element.new(“item”)

item.add_elem(“title”, “%s (by %s)” % [track[:title], track[:artist]])
item.add_elem(“dc:title”, track[:title])
item.add_elem(“dc:creator”, track[:artist])
item.add_elem(“author”, track[:artist])
item.add_elem(“pubDate”, track[:pubdate])
item.add_elem(“description”, track[:description])
item.add_elem(“guid”, URI.encode(track[:audiofile_url]))
item.add_elem(“enclosure”, nil,
{ “url”=>URI.encode(track[:audiofile_url]),
“length”=>File.size(track[:audiofile_local_path]),
“type”=>”audio/mpeg”
})

rss.elements[“rss/channel”].add_element(item)
}

return rss
end

################################################################
## データを用意

channel = {
:title => “お気に入り”,
:link => “http://foo.bar”,
:description => “概要”,
}

tracks = []

################################################################
## ファイルの検索
`/bin/ls -1dp “#{File.dirname( __FILE__)}/”* | /bin/grep “\/$”`.gsub(/\/$/,”).split(“\n”).each do |d|
`find #{d} -name “*.m4a” -or -name “*.mp3″`.split(“\n”).each do |f|
s = File::stat(“#{f}”)
tracks << { :title => “#{d}(#{s.mtime})”,
:artist => “#{d}”,
:pubdate => “#{s.mtime}”,
:description => “#{d} #{s.mtime} 分”,
:audiofile_url => “http://foo/bar/podcast/#{f}”,
:audiofile_local_path => “/userdata/share/allusrs/stream/#{f}”
}
end
end

################################################################
## フィードに書き出し

rss_src = make_rss2(channel, tracks).to_s.gsub(/>\n<") open("podcast.xml", "w") {|f| f.puts rss_src }

ひとまず上記により、このスクリプトを配置している場所にあるディレクトリ
配下に含まれるmp3, aac(m4a)ファイルを探索し、RSSのItemとして登録する。

[http://haraita9283.blog98.fc2.com/blog-entry-312.html Ruby/REXML: CCLedなオーディオコンテンツを紹介するポッドキャストのフィード(RSS2.0)の読み書き | anobota]
にあるソースがベースである。
厳密にはほぼそのままだが…

ただし、もともとはguidタグに記述するURLに対するURLエンコード処理が存
在していなかったが、これにより日本語を含むURLがiTunesに登録されない問
題があったので修正している。

==Lighttpdの設定==

/etc/lighttpd/lighttpd.conf に以下のような記述を追加する。


$HTTP[“remoteip”] != “192.168.0.0/24” {
url.access-deny = (
“^/podcast”
)
}

上記の例では、http://foo/bar/podcast/ 配下に podcast.xmlといったRSSが
存在することを想定している。

これにより、192.168.0.X以外からのアクセスを禁止する。
オリジナルのデータを公開するのは問題ないはずだが、そうでないものが誰も
が参照できる状態になるのは問題である。

==iTunesに取り込む==

メニューにある [詳細] → [Podcastを登録] から URLを指定する。
ちなみに file://〜 や /foo/bar といった形式では登録できないことに注意
すること。

VLC2.x向け音声チャンネル構成切り替わり対応パッチをあてる

当方、Mac で動作するアプリ VLC にて地デジを視聴していますが、難儀なのがNHKニュースなどの音声多重放送です。どうも調べていると、VLCでは音声多重放送においては音声が出力されない現象が発生するらしい。

世間には自力で解決する強者もいるようで、ソースにパッチを当てることで音声が出力されるように修正しているらしい。しかし、提供されているパッチは1年以上前のもので、Mac OS Lionの開発環境ではコンパイルが失敗してしまいました。

また、最新のソースに対してパッチを適用しようとするとpatchコマンドがエラーになり、うまくパッチが当たりませんでした。そこで手動にてパッチの内容を取り込むことにより対応しました。

== パッチの取得 ==

パッチを取得する。
http://2sen.dip.jp/dtv/ にある、“up0243.zip”を取得します。

直接取得する場合は http://2sen.dip.jp/cgi-bin/dtvup/source/up0243.zip となります。

== パッチをあてる ==

パッチファイルの内容だけではどのようにパッチをあてていいかよくわからなかったため、いったんパッチをあてる前と当てた後のソースを生成します。


$ git clone git://git.videolan.org/vlc.git
$ cd vlc
$ git checkout 16cb266
$ patch -b -p1 < vlc_patch.txt

上記操作により、以下に示すファイルにパッチがあたる。
modules/codec/faad.c
modules/packetizer/mpeg4audio.c
src/input/decoder.c
また、”-b” オプションを付与することで、パッチをあてる前のファイルは “*.orig” というファイル名で保持される。

パッチをあてたら、ディレクトリ名を”vlc1″に変更する。


$ cd ..
$ mv vlc vlc1

== 新しいVLCを取得 ==
Lionの環境でビルドができる新しいVLCを取得する。


$ git clone git://git.videolan.org/vlc.git
$ cd vlc
$ git checkout 97dca37bcf82a3219c9014d2ab64542677cd9910
$ patch -b -p1 < vlc_patch.txt

== 手動でマージする ==

“/Developer/Applications/Utilities/FileMerge.app” を使って “vlc1” 側の差分を確認しながら、 “vlc” (新しいvlc) に手動で適用していく。

ちなみに当方では “FileMerge.app” を使ったことがなかったので、wine から”WinMerge” を使って差分を適用した。

== VLCのビルド ==

Macの場合、 http://wiki.videolan.org/OSXCompile に従ってビルドすれば良い。

つまり、以下のとおりにすれば良い。


$ cd vlc && mkdir build && cd build
$ ../extras/package/macosx/build.sh

buildディレクトリ直下に “VLC.app” が出来上がるので、”/Applications” ディレクトリなどにコピーして作業は完了。

謹んで新年のお慶びを申し上げます

昨年は日本にとっても、世界にとってもとても大変な一年でした。そして、私個人にとっても。

過去10年にわたって携わってきた仕事について、会社の考え方に納得できず、これから立ち上がりつつあった業務なら自分でグラウンドデザインを描くこともできるはずだという気持ちで社内公募に応募。熱い気持ちが伝わったのか、合格し、実際に新しい環境に飛び込んだのが1月。かなりが未知な領域で、ぬかるみを歩くような不自由さに歯がゆさを感じ続けた2, 3月。

4月からは国策に沿ったサービスを提供する業務に携わり、ようやく自分の立ち位置を見つけ、自分の力をいかんなく発揮してきて調子が乗ってきて、忙しいながらも充実した時間を過ごしてきました。しかし今度は納入先の馬鹿な大手メーカーが自身の問題をなすりつけようとする取り組み姿勢と戦い、本当に忙しくてストレスのたまる時間を過ごしました。

一言でいうと、色々と大変な一年だったのですが、一緒に仕事ができた仲間と支え合ってこれたこと、私自身の強みも発揮でき、概ね満足できました。

数年ぶりに忙しくてグラウンドデザインを描くところまでは手がまわらなかったけど、今年こそは手をつけたい。そして、仕事以外では久々にキーボードを引っ張りだして、自己表現してみたい。年末年始に撮りためた『Schola|音楽の学校』を観て、うずうずしています。自己表現という視点では、去年行けなかった旅行に出かけ、普段感じなかった瞬間を写真をおさめたいと考えています。

去年は3月に発生した天災と人災により、暗くなる一年だったと思いますが、心の元気だけは失わずに新しい一年を過ごしていきましょう。

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によりログインしている。

PandaboardにUbuntu+地デジサーバを(準備編)

まずは必要な物品とその購入に関して記述します。
あくまで私の備忘録であります…

[img_assist|nid=866|title=Pandaboard|desc=Pandaboardをアクリル板でサンドイッチにし、簡単なケースとしたところ。 SDカードはデジカメで使っていたものを流用しています。|link=node|align=left|width=480|height=360]

== 必須 ==
=== Pandaboard ===
Digi-Keyというところで購入するのが最も安いと思います。ただし、ホームページの出来が良くなく、購入までてこずってしまうと思われます。(結構迷いました)

# http://www.digikey.jp/ を開きます。
# 「商品検索→」のテキストボックスに「pandaboard」と入力し、「GO」ボタンを押下します。
# 「数量」に購入したい個数(例えば「1」)を入力し、「発注書に記入」ボタンを押下します。
# 「現時点の在庫状況」ボタンを押下します。
# 「次へ」ボタンを押下します。

これ以降は一般的な購入手続きとなります。

=== SDカード ===
信頼されるメーカの製品を使用するのが無難です。こちらでは当初某マイナーなメーカのSDカードでインストールしていましたが、すぐにファイルが壊れる事象が発生しました。

デジカメに入れていた「Sandisk」の製品を使うことで発生しなくなりました。問題はソフトなのか?Ubuntuなのか?Pandaboardなのか?SDカードなのかは分からないですが、使い物にならないSDカードがあるのも事実です。

なお、SDカードはなるべくランダムアクセス、あるいは小さいファイルの書き込み速度が速いものをお薦めします。
この動作速度が体感速度に大きく影響します。

また、Ubuntuのインストールページにあるように最低8GB必要です。最小限必要な構成が8Gというわけではなく、インストールの過程でSDカードのパーティション作成、フォーマットを行うのですが、それらの実行していくために必要となるようです。

=== ACアダプタ ===
出力が5V 3.5Aのものを購入しました。地デジチューナー等接続しなければ2Aあれば十分と思われます。
どれくらいの出力が必要かよく分からなかったので、3.5Aのものを購入しています。

== あるとより便利なグッズ ==
[img_assist|nid=868|title=PandaboardにUSB接続用のピンをハンダ付けしたところ|desc=PandaboardにはUSBコネクタが2つついていますが、信号としては4つ分あります。 残りの2つは配線はされており、ピンヘッダをハンダ付けすることで使用できるようになります。|link=node|align=right|width=480|height=360]

=== USBコネクタ ===
『奥沢一丁目』というUSBコネクタを購入しました。配線があっていれば、他のUSBコネクタでも良いです。

[img_assist|nid=870|title=Pandaboardの小屋制作に使用した部品|desc=Pandaboardは基板がむき出しになっているので、簡単なケースのようなものを制作しました。 その時に使用した部品の一部がこちらです。|link=node|align=left|width=480|height=360]

=== ピンヘッダ ===
USBコネクタを接続する部品です。4ピン+2列あれば良いです。

=== アクリル板 ===
Pandaboardにはゴム足がついており、基板が地面に触れたりしないように考慮されています。しかし上面も下面も保護されているわけではないので、少々心許ないです。そこでむき出しの基板に対してアクリル板で保護するようにします。好みにより厚みや色味を決めれば良いです。当方では3mm、透明のものを購入しました。なお透明だと傷が目立ちやすいので、色がついている方が良いかもしれません。

=== スペーサ ===
基板とアクリル板の間にはさむためのものです。下面用に高さ5mm、中心の空洞は3mm(M3)のものを、上面用に高さ3.5mmで同様にM3のものを4つずつ購入しました。

=== ビス ===
直径3mm(M3)、長さは50mmのものを4本購入。スペーサが5mm, 35mmあり、アクリル板が3mm×2枚、Pandaboardの基板の厚み
を考慮すると50mmくらい必要との判断です。

=== ナット ===
3mm(M3)のものを4本購入。

=== ワッシャー ===

3mm(M3)のものを4本購入。

== それ以外に必要になるかもしれないもの ==
=== はんだごて、はんだ ===
USBポートを増設する場合に必要となります。

=== アクリルカッター、または糸鋸 ===
アクリル板を切断するために使用します。当方は、オルファの『PカッターL型』を購入しました。([http://www.olfa.co.jp/ja/body/detail/162.html 【オルファ】PカッターL型])

=== ドリル ===
アクリル板にビス穴を作るために使用します。
3mmのドリル刃を電動ドリルに装着して使いました。

=== リーマー ===
ドリルであけた3mmの穴を広げるために使用しました。
ドリルの刃が3mmのものしかなかったこと、精度高く穴を作れなかったので使
用せざるを得なかったのです。

== USBコネクタを接続 ==
ピンヘッダを『EXPANSION CONNECTOR B』の1〜8番ピンにはんだ付けする。 [http://elinux.org/Panda_How_to_add_2_USBs Panda How to add 2 USBs] あたりが参考になると思います。

== アクリル板の加工 ==
[http://www.redstar.co.jp/pb.htm 株式会社レッドスター-PandaBoardオフィシャル] によれば、Pandaboardのサイズは114.3mm× 101.6mmらしいです。これを確認確認せず、ざっくり計測してアクリル板を加工して失敗しました…

上記のページにガーバーデータもありますので、正確な寸法や穴をあける位置を把握することができます。

当方では130mm×110mmで加工しました。3辺は5mm大きく、1辺は10mm大きく加工しました。1辺だけ10mmとしているのは、シリアルコネクタがより出っ張っているため。

上面側のアクリル板にはUSBコネクタを接続するために、少しコの字型に削ります。

Pandaboardにて地デジサーバを構築

[img_assist|nid=866|title=Pandaboard|desc=Pandaboardをアクリル板でサンドイッチにし、簡単なケースとしたところ。 SDカードはデジカメで使っていたものを流用しています。|link=node|align=left|width=480|height=360]

週末を利用して『Pandaboard』にUbuntu10.10をインストールし、地デジ録画環境を構築しました。

Pandaboardは最新のAndroidタブレットに使われているCPUが載っていて、まずまずの速度で消費電力が抑えられています。これまではATOMプロセッサが載ったパソコンにUbuntuを入れて、同様の環境を構築したのですが、ファンの音が気になったり、ちょっぴり消費電力も気になったりしていたので、存在を知ってすぐに購入したのでした。

詳細は後日書いてみるとして…

MonsterTV HDUSという少々古い地デジチューナーを2つ接続しました。最も気になっていたのが録画時のCPU占有率ですが、UDPで送信しながらファイルに記録している状態でtopコマンドで確認したところ、30%程度でした。2つ同時に動作していてもCPU占有率が高すぎてコマ落ちが顕著に現れるという事象はなさそうです。

消費電力は計測機器がないのでなんとも言えませんが、5V 3Aのアダプタで動作しているので、最大15Wということになるのでしょうか。これまでは2.5インチHDDを使っていたのですが、今回は32GバイトのSDカードと64GバイトのUSBメモリという構成で、かつCPUの消費電力自体も違うので、消費電力が減っているといえそうです。

動作はSDカードへの書き込みがボトルネックになるようで、時々応答が遅くなる(いわゆる『プチフリ』)が発生することがあります。

WEBサーバも入れているのですが、アクセスした時に遅く感じられる時は、この現象が発生している場合が多いです。

Pandaboardに変更するメリットは消費電力と静音に尽きます。また、SDカードにOS一式が入っているのでバックアップ等メンテナンスや違うOSのインストールも楽です。欠点は容量と処理速度です。容量はUSB HDDを使うことで解決できます。ただし、消費電力が上がるだろうし、ほんの少しうるさくなります。処理速度もUSB HDDで改善されますが、ATOM PCには追いつけないと思われます。

飽きたりもっと良いソリューションがあれば乗り換えて、PandaboardはAndroidを入れたりするかもしれません。

ひとまず地デジサーバを構築し、アクリル板でケースのようなものを作って週末は終わり。
しばらくはPandaboardで遊べそうです。