USBbootするUbuntu-NAS① epgrec+pt3+minidlna+kvm環境を構築する


UbuntuをUSBメモリにインストールし、pt2/pt3を使えるようにし、DLNAやsambaによるマルチメディアファイルサーバを作成しました。コンセプトは下記の通りです。

コンセプト

  • USBbootするUbuntuServer(13.10、14.04で検証済み)
  • apt-getによるパッケージ管理はHDD利用時と同じ使い勝手にする
  • 未使用時にHDDの電源OFFや各種デバイスの消費電力モードを低くする設定を施す
  • epgrec (UNA版)+ pt3、minidlna、ファイルサーバ(samba)の連携
  • KVMによる仮想化環境(vmware ESXi専用マシンの代用にする)
  • ddコマンドで容易にバックアップ可能にする

構築理由

本当は、FreeNASやNas4Freeのようなファイルサーバに特化したソフトウェアでepgrecや仮想マシンを利用できればいいのですが、DBをUSBメモリ上に置いた場合、USBメモリは数か月(早いと数週間)程度で書き込み上限に達してしまう事から、USBにインストールするタイプの製品ではディスク書き込みの激しいepgrec連携は難しく、更にBSD系の仮想マシンBHyVeは開発途中である事もあり、KVM程利用実績が無い事から、自分好みの物を作る事にしました。

必要なハードウェア

OSがwindowsではなくLinuxなので、純粋に必要なハードウェア代金のみ。当方は合計4万円程度で下記をそろえました。TX100 S3と、pt3、2.5inch HDD(ST500LT012)2台、USBメモリ1個、メモリ4Gの構成で、ワットチェッカーで平常時24w近辺、録画時28w近辺です。Bay-TrailNT-ITX/PW120Plus環境は後追いで作ってみたいと思っています。

  • USBメモリ(今回は4Gで構築。4G以上であれば何でもいい。ただし、USB3.0対応品を選ばないと遅いので注意。永久保証品が良さそうです。)
  • サーバ本体(格安サーバか、80plus gold以上の電源で構築。メモリは最低4Gbyte。個人的にはBay-TrailNT-ITX/PW120Plusで作りたい。)
  • pt3
  • カードリーダ
  • 低消費電力HDD(運用して気づきましたが、1TB以上が無難です。低容量だとすぐにHDDがあふれてしまうので。)

BSも見れると番組の幅が広がります。セルフで工事する分には最安6000円でBSを映せるはずです。BS/CSの環境整備については衛星放送(BS/CS) 録画/視聴のまとめを参照。

epgrec環境構築例(本家/STZ版/UNA版)

epgrecの環境構築例が当Blog内に数パターンある為、構成別にまとめました。参考にしてください。

投稿 構成 難易度 コメント
ubuntu+epgrec(UNA版)+pt3環境構築 epgrec(UNA版) + nginx + php5-fpm epgrec(UNA版)インストールの最小構成です。
USBbootするUbuntu-NAS① epgrec+pt3+minidlna+kvm環境を構築する epgrec(UNA版) + nginx + php5-fpm USBメモリ(SSD可)にUbuntuをインストールし、録画はRAID構成のHDDに行っています。単純にディスクの延命対策と低消費電力化するテクニックを使っているだけなので、USBメモリはSSDと読み替えてもらってOKです。②、③の記事まで実行するとminidlnaやsamba、KVMまでが同居する環境になります。
ubuntu13.10+epgrec(本家)+pt3+nginx+php5-fpm 環境構築 epgrec(本家) + Apache 本家です。安定して運用出来ます。開発が止まっているようです。
ubuntu13.10+pt3+STZ版epgrec+nginx+php5-fpmの環境構築 epgrec(STZ版) + nginx + php5-fpm STZ版はepgrecやrecpt1等をまとめて公開してくれているので、組合せによるトラブルが出にくいので、構築しやすいです。最近まではSTZ版をメインに利用していました。今はUNA版に移りつつあります。
ubuntu13.10+pt3+epgrecの環境構築 epgrec(STZ版) + Apache 上記のApache版。nginxとApacheを比べるとnginx上に構築した方がweb画面の遷移が速いが、Apacheの方がセットアップは楽なのでnginxで挫折した方向け
消費電力30W以下 Ubuntu13.04&PT2/PT3&epgrec サーバを作る epgrec(STZ版) + Apache PT2を最新カーネルでビルドする方法も一緒に書いています。
組み合わせを選ぶ基準として
epgrecは本家、STZ版、UNA版と色々な版を開発者の方が出して下さっていますが、開発が既に止まっているものもあります。現状で開発が活発なのはUNA版となります。3種ともに比較させて貰いましたが、構築が一番楽なのがSTZ版、便利に使えるのがUNA版、本家は安定運用実績が多い為、カスタマイズ(プログラム修正)したい場合に向くと言う感想を持っています。
コメント欄について
各記事のコメント欄で、コメントの最初に『【雑談】』と書いてもらえれば、情報交換の為に閲覧者間での雑談に使ってもらって構いません。メールアドレスは公開されないのでフリーのメアドでも使って下さい。誹謗中傷はしない方向でお願いします。

Ubuntuのインストール

インストール前に、ブートローダのインストール先を間違ったりしないように、HDDは全て取り外して、UbuntuをインストールするUSBメモリのみをさしておいてください。(自信があるようでしたらHDDを付けっぱなしでも良いです。ただ、ブートローダのインストールで間違えないようにしてください。)。

Ubuntu13.10Serverを利用します。Ubuntuのオフィシャルページダウンロード画面より入手してください。インストール自体は普通に進めますが、勘違いなどが無いように、画像つきで説明していきます。物理マシンではスクリーンショットが取りにくいので、インストール時のみ、vmware上でのスクリーンショットです。HDDの表記は適宜読み替えてください。スクリーンショットが無い箇所は間違えないであろう箇所(ユーザー名やホスト名)です。

基本的に、選択するべき項目を選択した状態でスクリーンショットを撮っています。

usblinux10

日本語でインストール。

usblinux11

普通にインストールを選びます。

usblinux12

はいを選択。

usblinux13

日本を選択。

usblinux14

日本語キーボードを使っているので、日本語を選択。

usblinux15

日本語を選択。

usblinux16

ホスト名はインストール後にも変更可能です。ここではデフォルトのままにしています。

HDDの設定(USBメモリを指定するので、ここが大事)

usblinux17

手動を選びます。

usblinux18

ガイドによるパーティショニングを選びます。

usblinux19

vmwareでスクリーンショットを撮っているので、vmwareとなっていますが、USBメモリの名前が出ているはずなので、USBメモリを選びます。

usblinux20

空のパーティションテーブルを作成する為、はいを選びます。

usblinux21

新しく追加されたディスクを選択します。

usblinux22

新しいパーティションの作成を行います。

usblinux23

デフォルトで最大容量が入力されているはずですが、メッセージにある通り、maxと入力しても良いので、ここではmaxと入力しています。

usblinux24

もちろん、基本パーティションを選びます。

usblinux25

ここが大事です。

  • ラベルはお好みで入力してください。
  • 予約ブロックは、HDDが一杯になってしまっても、rootユーザー用に確保しておく予備領域です。5%のままで良いでしょう。
  • 起動フラグをオンにします(デフォルトはオフなので、そのままにしておくと、インストール後の起動に失敗します。)
  • 最後に、パーティションのセットアップを終了を選びます。

usblinux26

ここでも、パーティショニングの終了とディスクへの変更の書き込みを選びます。

usblinux27

スワップが無いと言っていますが、USBメモリ上にスワップ領域を確保すると、USBメモリの寿命が減るので、スワップは無しにします。スワップを無しにして、インストール後にfmpfsと言うオンメモリのドライブを使うようにする為に、メモリを大目に必要としています。最低4G。出来れば8Gあると良いですね。

usblinux28

ディスクに変更を書き込みます。

usblinux29

マスターブートレコードにGRUBブートローダをインストールします。ブートローダの後に、追加のパッケージのインストールがきかれたら、SSHだけはインストールしておいてください。

再起動

ここまで終わったら再起動し、USBメモリからUbuntuがブートする事を確認します。USBメモリの転送速度に寄りますが、1分以内で起動するはずです。

Ubuntuインストール後の初期設定を行う

ipv6を無効化して、パッケージの更新を行い、インストール時にdhcpのままにしていた為、固定IPに設定し直します。

sudo su -
echo "UseDNS no" >> /etc/ssh/sshd_config
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
apt-get update
apt-get upgrade
apt-get install sysv-rc-conf sysstat
apt-get clean

vi /etc/network/interfaces

/etc/network/interfacesの設定内容。IPは適宜環境に合わせて修正してください。

auto eth0
iface eth0 inet static
address 192.168.20.200
netmask 255.255.255.0
network 192.168.20.0
broadcast 192.168.20.255
gateway 192.168.20.1
dns-nameservers 192.168.20.1

一旦再起動する。

reboot

USBメモリの寿命を延ばすための設定を行う

これは基本的にSSDを利用する場合と同じ要領です。USBやSSDはHDDと異なりずっと書き込んでいるとそのうち書き込み不可になったり壊れたりします。昔、USBメモリ上にLinuxを全部入れて、更にDBまで置いてepgrecを運用した所、2か月ほどでUSBメモリは壊れました。それは、番組表の更新の為にTSをUSBメモリに1日に3回も書き込んで、そのデータをDBに反映するようなことを常時やったら壊れるよね・・・と反省し、一度インストールした後にはほぼ書き込みが無いような状態を目指します。

ログや一時ファイルの書き込みはメモリ上のRAMディスク(tmpfs)に書き込むように設定を行います。また、pt3による録画データはHDDに書き出すようにします。他にもHDDに書き出すべきファイルはあるので、簡単にまとめておきます。

HDDに書き出すようにすべきファイル

  • MySQLのデータベースファイル
  • 録画データ
  • minidlnaのdbやログ

RAMディスクに書き出すようにすべきファイル

  • ログ(人によってはHDDに保存したいかもしれませんね)
  • 一時ファイル(番組表更新時の一時ファイルやXMLファイル等も含む)
  • /var以下の幾つかのディレクトリ上のファイル
  • /tmp(デフォルトでtmpfsになっているはず)

/etc/fstabの設定を行う

一番最初に、マウント情報を確認しておきます。


df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sdc1        3858212 1079904   2562604  30% /
none                   4       0         4   0% /sys/fs/cgroup
udev             2000988       4   2000984   1% /dev
tmpfs             402264     504    401760   1% /run
none                5120       0      5120   0% /run/lock
none             2011304       0   2011304   0% /run/shm
none              102400       0    102400   0% /run/user

/dev/sdc1がUSBメモリです。4Gのうち、30%程度が利用されているようです。

/varの中身を起動時に/tmpfsにコピーして、シャットダウン時に/tmpfsに同期させ、起動時に/tmpfsから/var以下に同期させるようにする。

sudo su -

# /tmpfs以下に、オンメモリで利用するディレクトリ類をコピーしておく。
# シャットダウン時に、/var/log等を/tmpfs/var/logに同期させ、
# 起動時に、/tmpfs/var/logから/var/logに書き戻す。
# 起動時にディレクトリ構成をmkdirで再現する方法もあるが、
# apt-getで新しいパッケージをインストールして、新規ディレクトリ等が出来た場合に、
# mkdirの項目を書き忘れる事もありえるので、わざと同期方式にした。
mkdir -p /tmpfs/var

# 初期同期させる
rsync -a --delete /var/log /tmpfs/var/
rsync -a --delete /var/mail /tmpfs/var/
rsync -a --delete /var/spool /tmpfs/var/
rsync -a --delete /var/tmp /tmpfs/var/

# 念の為にバックアップを取っておく
# 安定運用したら、tmpfs_bakは削除してOK.
mkdir -p /tmpfs_bak/var
rsync -a --delete /var/log /tmpfs_bak/var/
rsync -a --delete /var/mail /tmpfs_bak/var/
rsync -a --delete /var/spool /tmpfs_bak/var/
rsync -a --delete /var/tmp /tmpfs_bak/var/

 

wget http://eco.senritu.net/wp-content/uploads/share/mounted-tmpfs-copy.conf
mv mounted-tmpfs-copy.conf /etc/init/
chown root:root /etc/init/mounted-tmpfs-copy.conf
chmod 644 /etc/init/mounted-tmpfs-copy.conf
initctl reload-configuration

/etc/fstabの編集を行い、起動時にRAMディスクに退避データを書き戻すようにする

sudo vi /etc/fstab

修正前は下記のような設定になっていました。HDDの指定の仕方は、ラベル、UUID、昔ながらの/dev/sda1等の指定方法がありますが、最近はUUIDによる指定になってきているようです。

UUID=5beac068-e140-47a1-9ab8-1a0b4d957825 /               ext4    errors=remount-ro 0       1
/dev/sr0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

最終的な内容は下記の通り。floppyをオートマウントする設定になっていたので、それは削除しました。tmpfsから始まる数行を追加し、USBメモリにはnoatimeを追加しています。

# noatime,を追加した。noatimeを追加する事で、
# 対象のファイルに対するアクセス日時が記録されなくなり、
# 結果としてUSBメモリへの書き込み回数が減る。
UUID=5beac068-e140-47a1-9ab8-1a0b4d957825 / ext4 noatime,errors=remount-ro 0 1
/dev/sr0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

# tmpは起動する毎に中身が削除される。
# epgrecを運用したり、ソフトウェアのコンパイルに利用する場合には最低でも768m程度割り当てておくと安全。
tmpfs   /tmp    tmpfs   defaults,noatime,size=768m    0    0

# /runや/var以下の幾つかのディレクトリは、終了時にusbメモリ上にバックアップを取り、
# 起動時にバックアップから書き戻す。
tmpfs   /run            tmpfs   defaults,noatime,size=16m    0    0
tmpfs   /var/log        tmpfs   defaults,noatime,size=512m    0    0
tmpfs   /var/mail       tmpfs   defaults,noatime,size=32m    0    0
tmpfs   /var/spool      tmpfs   defaults,noatime,size=32m    0    0
tmpfs   /var/tmp        tmpfs   defaults,noatime,size=32m    0    0

/etc/fstabに記載した内容に間違いが無いか確認します。
fstabを編集した後にいきなり再起動してしまうと、記載ミスがあった場合に立ち上がらなくなってしまいます(fstab編集をミスって起動しなくなった場合には、ブート時にsingleオプションを指定してシングルモードで起動して修正します)。しかし、一々そんな面倒な事はしたくないので、再起動前に動作確認をしておきます。

# /etc/fstabの内容でマウントする
mount -a

# マウントされている事を確認
df -h

# 一度再起動してみる
reboot

再起動後、dfコマンドで、指定したディレクトリがマウントされている事と、/tmpfs/var/以下にバックアップしておいたものが、/var/以下に書き戻されている事を確認する。

df -h

ls -la /var/log
ls -la /tmpfs/var/log
ls -la /var/spool
ls -la /tmpfs/var/spool

※ /tmpfs/varの内容がRAMディスクである/var/logや/var/spoolにコピーされている事が確認できるまではここから先に進まないでください。両方とも/tmpfs/varからのコピーが失敗していても起動時にディレクトリが無ければ作成するように作られているサービスによって、いくつかのディレクトリやファイルが出来る為、勘違いしやすいです。必ず/tmpfs/var/log、/tmpfs/var/spoolとディレクトリ構成が大きくかけ離れていない事を確認してください。

シャットダウン時に/varの中身を/tmpfsにバックアップするようにする。

再起動後に下記を行う。

sudo su -
wget http://eco.senritu.net/wp-content/uploads/share/copy-tmpfs
mv copy-tmpfs /etc/init.d/
chown root:root /etc/init.d/copy-tmpfs
chmod 755 /etc/init.d/copy-tmpfs
sysv-rc-conf --level 016 copy-tmpfs off

# 再度再起動し、シャットダウン時に新しく作成したファイルバックアップされている事を確認する
touch /var/log/test.txt
reboot

# 再起動後、/var/log/test.txtがあればOK。
ls -la /var/log

# テスト出来たので削除する
rm /var/log/test.txt

ここまで出来たら、USBブートするUbuntu環境の構築が完了です。以降は別途用意したHDDを認識させ、各種サービスを設定していくことにします。

USBメモリ以外のHDD2台でRAID1を構築し、/etc/fstabに追記する

ここはSSDやHDDを使ってセットアップしている場合には読み飛ばしてもOKです。この投稿の通り、USBメモリにUbuntuをインストールしており、空のHDDがある場合のみ対応してください。

ブートローダも含め、UbuntuをUSBメモリに確実にインストールする為に、USBメモリ以外のHDD等の電源を抜くなりしてインストールしていたと思いますので、一旦シャットダウンし、HDDを接続した後にマシンを起動してください。

HDD2台でRAID1(ミラーリング)を行う


# smartmontools,mdadmをインストールする。mdadmインストール時にpostfixの設定を聞かれるが、
# 質問には各々、インターネットサイト、送信元メールアドレスの@以下を設定してインストールする。
# postfixはraidが壊れた時にメールを飛ばすのに利用する模様。
apt-get install smartmontools mdadm

# Linuxが認識しているHDD一覧を表示する。
ls /dev/sd*
/dev/sda  /dev/sdb  /dev/sdc  /dev/sdc1

# HDDの情報を確認するのは下記のコマンドを利用する。
# SMART Disabled. Use option -s with argument 'on' to enable it.と言われた場合には、
# 下記のようにして、smartをONにします。
# smartctl -s on /dev/sda

smartctl -a /dev/sda
fdisk -l /dev/sda

# この環境では下記の通り。
# /dev/sda ・・・ ST500LT012
# /dev/sdb ・・・ ST500LT012
# /dev/sdc ・・・ USBメモリ(sdc1はルートディレクトリ)

# mdadmでraid1ディスクを作成する。
# パーティションを事前に切っておき、raid1を構成する方法と、
# パーティションを切らずにraid1を構成する方法がありますが、
# 今回は後者を選択しています。
mdadm --create /dev/md127 --level=1 --name=raid1 -f
    --raid-devices=2 /dev/sda /dev/sdb

# mdadm --createでraidデバイスを構築すると、
# /proc/mdstatで進捗状況が確認できるようになります。
# 500Gだと数十分程度なので、完了するまで気長に待ちます。
# ・・・実は待たずに作業しても良いのですが、
# ファイルコピーなどが始まってしまうとディスクアクセスが込み合って遅くなるので、
# 待った方が良いでしょう。

# 同期が完了した状態。
cat /proc/mdstat
# Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
# md127 : active raid1 sdb[1] sda[0]
#      488255360 blocks super 1.2 [2/2] [UU]

LVMで、パーティション別の設定を行う

今回は、KVM用、epgrecのvideo録画ディレクトリ用、MySQLのDBファイル格納用の3つのパーティションを作成します。


apt-get install lvm2

# 今回は、2.5inchのHDD2本をraid1で運用する事にしたため、
# /dev/md127を利用します。
# /dev/sdaを利用したい場合には適宜読み替えてください。

pvcreate -M2 /dev/md127
vgcreate vg_raids /dev/md127

# kvm用に250Gを確保する
lvcreate -L250G -n kvm_1 vg_raids

# MySQL用に10Gを確保する
lvcreate -L10G -n mysql_db vg_raids

# 残り全部をepgrecのvideoディレクトリようにする
lvcreate -l 100%FREE -n video vg_raids

# ext4でフォーマットする。
mkfs.ext4 -m 0 /dev/vg_raids/kvm_1
mkfs.ext4 -m 0 /dev/vg_raids/mysql_db
mkfs.ext4 -m 0 /dev/vg_raids/video

KVMのインストール(必要なければ読み飛ばしてOK)

/etc/fstabに記載するディレクトリ/var/lib/libvirt/imagesを作成する為だけにインストール。KVMの投稿がある為、ここでは詳しくは触れません。

sudo apt-get install qemu-kvm virt-manager virt-viewer

なお、tag vlanを設定可能なnetgearのスマートスイッチGS108E設定例)と、Linuxの設定(設定例)で、ネットワークインターフェースが1つしかないマシンでも、複数個のネットワークに所属させ、仮想マシンを安価かつ柔軟に運用する事が可能です。

/etc/fstabにKVMのイメージ格納先をマウントする行を追加

/dev/vg_raids/kvm_1    /var/lib/libvirt/images ext4 defaults,noatime 0 0

/etc/fstabを更新した場合、テストもせずに再起動させると記載ミスがあった場合には起動すらしないと言う事態に陥ります。その場合には焦らずにシングルユーザーモードでLinuxを起動させ、/etc/fstabの該当箇所をコメントアウトするなり、修正するなりすれば良いのですが、mount -a コマンドで事前に/etc/fstabのマウント確認が出来るので、やっておきます。

mount -a

ntpのインストール

sudo apt-get install ntp
service ntp stop
ntpdate ntp.ubuntu.com
service ntp start

MySQL、nginx、PHP等のインストール

apacheで環境構築するのが普通ですが、今回はApacheを使いません。かわりに軽量のHTTPとリバースプロキシのサーバを兼ねたnginxを使います。更にnginxでリバースプロキシの設定を行い、epgrecはphp5-fpmで動かすことにします。

何故、Apacheではなくnginx+php5-fpmを使うかと言うと、速いからです。

sudo apt-get install nginx php5-fpm  php5-cli mysql-server mysql-client php5-mysql
sudo apt-get clean

at.denyの修正

at.denyが設定されていると予約が出来ないので、/etc/at.denyを修正します。面倒なのでsedコマンドで。

sed -i 's/www-data//g' /etc/at.deny

php.iniの修正

はまりやすい箇所のようなので、書き方を工夫しました。/etc/php5以下のphp.iniは全部修正してください。

# php.iniのすべてに対して、disable_functionsのコメントアウトと、date.timezoneの設定を行う。
# findでphp.iniを検索して、他にも該当ファイルがあればそれらも修正してください。
find /etc/php5 -name php.ini

cp /etc/php5/fpm/php.ini /etc/php5/fpm/php.ini.bak
sed -i 's/disable_functions/;disable_functions/g' /etc/php5/fpm/php.ini
sed -i 's/;date.timezone =/date.timezone = "Asia/Tokyo"/g' /etc/php5/fpm/php.ini

diff /etc/php5/fpm/php.ini /etc/php5/fpm/php.ini.bak

cp /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak
sed -i 's/disable_functions/;disable_functions/g' /etc/php5/cli/php.ini
sed -i 's/;date.timezone =/date.timezone = "Asia/Tokyo"/g' /etc/php5/cli/php.ini

diff /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak

mysql は普段であれば、apt-getでインストールして終わりなのですが、今回はUSBメモリ上にUbuntuをインストールしている為、USBメモリ上に DBファイルを格納したら、DBの更新処理でどんどんUSBメモリの寿命が縮まってしまいます。ですので、DBはHDD上に置く事とします(USBメモリ ではなく、SSDやHDDを使ってセットアップしている場合には、普通にMySQLをインストールするだけです)。

# mysqlを止めます。
service mysql stop

# MySQLがDBを格納しているディレクトリを確認
cat /etc/mysql/my.cnf  | grep datadir
# datadir         = /var/lib/mysql # /var/lib/mysqlにDBが格納されている事がわかった

mount -t ext4 /dev/vg_raids/mysql_db /mnt
mv /var/lib/mysql/* /mnt/
umount /mnt

vi /etc/mysql/my.cnf

/etc/mysql/my.cnfの中の[client]と[mysqld]の下に下記の設定を付け加えます。

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

/etc/fstabにMySQLのDB格納先をマウントする行を追加

/dev/vg_raids/mysql_db  /var/lib/mysql          ext4 defaults,noatime 0 0

マウントし直して、mysqlを起動させる

mount -a
chown -R mysql:mysql /var/lib/mysql
chmod -R 700 /var/lib/mysql
service mysql start

# 念の為、MySQLが起動している事を確認しておく
ps aux | grep mysql

DBを作成します。

mysql -uroot -p
create database epgrec;
grant all on epgrec.* to epgrec@localhost identified by 'yourpassword';
flush privileges;

PT3とepgrecの下準備

epgrecのセットアップ前にPT2/PT3のドライバをインストールしておきます。

PT3のドライバインストール


sudo apt-get install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools git build-essential autoconf unzip pkg-config

pcsc_scan | grep "Japanese Chijou Digital"

sudo su -
cd /tmp
echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
git clone https://github.com/m-tsudo/pt3.git
cd pt3/
make clean && make && sudo make install
reboot

# 再起動後に、/dev/pt3video0~3がある事を確認する。
ls -la /dev/pt*video*

PT2のドライバインストール

最近、PT2用のドライバは改変なしでカーネル3.8.0以上に対応できるようです。コミットログにもそのようにコメントがありましたので。

cd /tmp
rmmod earth_pt1
echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf

wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar -jxvf tip.tar.bz2
cd /tmp/pt1-c8688d7d6382/driver
make clean && make && sudo make install
reboot

# 再起動後に、/dev/pt1video0~3がある事を確認する。
ls -la /dev/pt*video*

recpt1の用意

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

cd /tmp
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2

tar -jxvf tip.tar.bz2
cd /tmp/pt1-c8688d7d6382/recpt1

# PT2/3混在環境の場合にはpt1_dev.hの/dev/pt1video**を
# 必要個数、pt3video**のようにPT3用に書き換えます。
# PT1/PT2のみの場合には、pt1_dev.hの書き換えの必要は無い。

# pt3のみの環境の場合には、sedで一括置換でOKです。
sed -i 's/pt1video/pt3video/g' pt1_dev.h

./autogen.sh
./configure --enable-b25 && make && make install
recpt1 -version

# 下記のように出力されればOK。

# recpt1 1.2.0
# recorder command for PT1/2 digital tuner.

# 序に録画テストも行っておく
cd /tmp
recpt1 --b25 --strip 27 20 test.ts

UNA版の必要ソフトウェアのダウンロード

作者さんが公開してくださっているので、適当な何かの別館このページから次の2ファイルをダウンロードし、サーバの/tmpにコピー(Linuxホストからはscp、windowsからならwinscpを利用)して下さい。ダウンロード時にパスワードが必要ですが、作者さんのサイト適当な何かの別館をきちんと見ればわかります。

  • epgdumpUNA130928.tar.gz
  • epgrec_UNA_140126.tar.gz

epgdump(UNA版)のインストール

epgdump、epgrecはwinscp等で予め/tmpディレクトリ以下にアップロードしておいてください。

cd /tmp
tar -zxvf epgdumpUNA130928.tar.gz

cd /tmp/epgdump
make && sudo make install

cd /tmp

# recpt1のテストで出力したTSファイルから番組表が取得できるか確認する。
epgdump  27 test.ts test.xml -xml

# xmlファイルが出来ている事を確認しておく。
cat test.xml

epgrec(UNA版)のインストール

tar -zxvf epgrec_UNA_140126.tar.gz
# readmeが入っているので読む。PT3を使っているので、パッチはあてない方向で。
cat readme.txt

mv epgrec /var/www/

mount -t ext4 /dev/vg_raids/video /mnt/
mv /var/www/epgrec/video/index.html /mnt/
umount /mnt

/etc/fstabに/var/www/epgrec/videoのマウント設定を追記

/dev/vg_raids/video    /var/www/epgrec/video   ext4 defaults,noatime 0 0

 

mount -a

# マウント結果の確認
df

 

chown -R www-data:www-data /var/www/epgrec
cd /var/www/epgrec

chmod 777 cache templates_c video thumbs settings
chmod 666 thumbs/index.html video/index.html
chmod 755 do-record.sh
chown www-data:www-data do-record.sh
vi config.php

config.phpは設定方法がきちんと書かれているので、コメントを読みながら調整します。今回は下記のようにしました。

define( "TUNER_UNIT1", 2 );  // 0 > 2に変更。PT3が2枚なら4。
define( "TUNER_UNIT2", 0 );  // 未使用との事なので、そのままにしておく
define( "USE_RECPT1", TRUE ); // FALSE > TRUEに変更。

nginxの設定を行う

vi /etc/nginx/nginx.conf

httpセクションの直下にcharset UTF-8;を追記します。

http {
 charset UTF-8;

下記の設定を追記。デフォルトで他の設定があったらコメントアウトでOK。

vi /etc/nginx/sites-enabled/default

 

server {
  listen 80 default_server;
  root /var/www;
  index index.html index.htm index.php;
  server_name usblinux;
  location / {
  try_files $uri $uri/ /index.html;

  location ~ .php$ {
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}

 

service nginx restart

ブラウザから設定を行う

http://ipアドレス/epgrec

にアクセスして画面の指示通りに設定を進めてください。

設定画面は非常に解り易く作られているので、説明を見ながらでも十分に設定可能です。取りあえず、最初の画面と、最後のEPG受信時の画面を載せておきます。

usblinux_with_epgrec_UNA10

録画ファイル名の形式やその他の設定値について

個人的なメモです。『%YEAR%%MONTH%%DAY%_%HOUR%%MIN%_%TYPE%%CH%_%TITLE%』で運用してみます。FILESYSTEM_ENCODING定数に返還前の文字コードを設定する事が出来るとありましたが、epgdumpでxmlをはかせてからnkf –guessで文字コードを調べたところ、UTF-8 (LF)でxmlファイルが出力されているようだったので、特にFILESYSTEM_ENCODING定数は変更しませんでした。ここは微調整するかもしれません。

あと、ページに表示する番組表の長さは、Apacheの場合には8時間程度にしておかないと遅くて我慢できませんが、nginx+php5-fpmの場合には、24時間にしても十分に速い為、18時間にしました。

※ ページに表示する番組表の長さを24時間にしたら、現時刻を示す赤線が表示されなくなり、予約しようとすると『予約できません』とエラーになりました。24時間に設定すると宜しくないようです。18時間に設定し直したら直りました。回避策が妥当だった為、特に原因調査はしていません。

epgrec設定時の注意事項(RAMディスクを使っている場合のみ)

step3で『shepherd.php::テンポラリー容量が不十分なため衛星波のEPG更新が出来ません。空き容量を確保してください。』と言うエ ラーが出た場合には、単純に/tmpの容量が小さいです。/etc/fstabの/tmp用に確保したRAMディスクの容量を大きくします。

最後に、設定が終わって、step6の画面になると、EPGの受信画面になります。そこで、1つ1つ受信する方式(getepg.php)と、全チューナー総動員で受信するパターン(shepherd.php)に分かれる様です。/tmpディレクトリは768m程度しかありませんので、1つ1つ受信する方式(getepg.php)を選択します。下図の赤枠の方ですね。

usblinux_with_epgrec_UNA11

番組表更新のgetepgをcronに登録する

sudo cp /var/www/epgrec/cron.d/getepg /etc/cron.d/
sudo vi /etc/cron.d/getepg

# getepgの実行時間は適宜変更します。
# デフォルトだと、2時間おきに○時29分になったら番組表の更新処理がされるみたいです。
# 作者さんのデフォルトの指定がベストチョイスだったのでそのままにしました。
# 29 */2 * * *   www-data /var/www/epgrec/getepg.php

minidlna環境を構築する

dlnaサーバはいくつもあって悩みましたが、minidlnaを利用する事にしました。

h.264圧縮したmp4ファイルもtsファイルもインストールしただけでdlnaクライアントから再生可能です。minidlnaはminidlnaユーザーで実行されている為、パーミッションの設定を間違っていると何時までたってもdlnaクライアントに表示されない状態になるので注意。sambaでのファイル共有時やscpでファイルを置いている場合等には要注意です。


sudo apt-get install minidlna
sudo sed -i 's/^media_dir=.*/media_dir=V,/var/www/epgrec/video/g' /etc/minidlna.conf

# ディレクトリの監視とdbの自動更新を有効にする
sudo sed -i 's/^#inotify=yes/inotify=yes/g' /etc/minidlna.conf

# 1時間置きにDBを更新するようにしている。
# 動作検証をしている場合や、出来るだけ早く見たい場合には、
# 60等に設定すれば、1分程度で反映出来る。
sudo sed -i 's/^#notify_interval=895/notify_interval=3600/g' /etc/minidlna.conf

# db_dirを/var/libの下に置くと、その都度USBメモリにdbが記載されるので、/var/www/epgrec/video/minidlna_db以下に移動
sudo sed -i 's/^#db_dir=/var/lib/minidlna/db_dir=/var/www/epgrec/video/minidlna_db/g' /etc/minidlna.conf

sudo service minidlna restart

## この下の2つはminidlnaでファイル更新が出来ない場合の対処方法
# minidlnaのログの確認
cat /var/www/epgrec/video/minidlna_db/minidlna.log

# dlnaで、-R やforce-reload(やっている事はminidlnaを一旦止めてから-Rオプション有で起動させているだけ)を
# 何度試してもファイルリストが更新されない場合はdbファイルを一旦削除する。
sudo rm /var/www/epgrec/video/minidlna_db/files.db

# 対象サーバの8200番ポート(デフォルト)にブラウザでアクセスすると、minidlnaが認識しているファイル数がわかる。
echo http://`hostname`:8200

# ファイルを置いた後にDBを更新する場合
minidlna -R

# もしくは
service minidlna force-reload

minidlnaについては『Ubuntu13.10へminidlnaをインストールする』でもう少し掘り下げています。

samba環境を構築する

samba環境は、特に解説はいらないと思います。普通にインストールしてからsmb.confを修正するだけです。注意点はepgrec、minidlna、sambaを連動させるにあたって、パーミッションを合わせる事が大事です。sambaでforce userを使えば良いでしょう。

sudo apt-get install samba

cd /tmp
wget http://eco.senritu.net/wp-content/uploads/share/smb.conf
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
mv /tmp/smb.conf /etc/samba/smb.conf

chmod 644 /etc/samba/smb.conf
chown root:root /etc/samba/smb.conf

# IPアドレス等を環境に合わせて修正してください。
# 上記からDLしたsmb.confだと、192.168.20.0/24からのアクセスしか受け付けません。
# interfaces = 192.168.20.0/24は必ず修正してください。
vi /etc/samba/smb.conf

# smb.confを修正したらサービス再起動
service smbd restart

# sambaにアクセスするユーザーの追加
# windowsにログインしているユーザー名と同じにしておけば、パスワードを都度求められなくて楽です。
smbpasswd -a yourname

不要なサービスの停止

余計な書き込みを発生させないために出来る限り不要なサービスを停止しておきます。postfixは他にメールサーバを持っている為に利用していません。LinuxのソフトウェアRAIDでHDDが壊れた場合の通知方法については、別途監視の仕組みを考えます。

service x11-common stop
service dns-clean stop
sysv-rc-conf dns-clean off
sysv-rc-conf x11-common off
apt-get remove postfix

IOが頻発していないかの確認

下記、UbuntuをUSBメモリやSSDにインストールした場合に余計な書き込みが発生していないかの確認方法です。HDDにインストールしている場合には特に気にしなくてOKです。

# ある程度放置した上で5分以内に書き込みが発生した箇所を確認しておく。
find / -type f -mmin -5 -ls

# USBメモリの領域が/dev/sdcだとした場合、/dev/sdcにかかる書き込みを測定しておく
iostat 1 | grep sdc
vmstat 3

# 後は、/proc/プロセスID/ioを確認。ps auxと組み合わせて。
# 怪しいプロセスIDが判っていれば使う。プロセスIDは大量にあるので注意。
sudo cat /proc/1/io

USBLinux環境をバックアップする

環境構築が完了したらバックアップを取得しておきます。Linux環境を別に持っている場合には、dd if=/dev/sdc of=/path/to/file.imgとでもしてバックアップを取得してください。windowsの場合にはDDforWindowsと言うソフトウェアを利用させてもらいます。DDforWindowsから最新版をDLし、解凍後、管理者として実行し、USBメモリから下記のような感じで『>>読込>>』しておきます。

dd_for_win11

出来れば、同一のUSBメモリをもう1つ購入し、そちらに書き込んで、バックアップから復元できるか確認しておけると吉です。

良くあるはまり所と、トラブルシューティング

      • ウェブサーバを勘違いしないようにしてください。本記事ではApacheは一切利用しておりません。nginxとphp5-fpmがApacheの代わりになっています。Apacheがインストールされている場合はアンインストールしてください。
      • /tmpfsに/varの中のディレクトリを移動させるのがポイントです。そこをミスっている場合、ディレクトリが無い等のエラーでサービス(nginx等)が起動しません。
      • RAMディスクの設定が完了した後、/tmpを使う際に、容量が小さい為、容量不足になる事があります。再起動で/tmpは空になります。ファイルをrmコマンドで削除しても良いです。

同シリーズ

タイトル コメント
USBbootするUbuntu-NAS① epgrec+pt3+minidlna+kvm環境を構築する USBboot環境の構築、epgrec、samba、minidlnaのセットアップ
USBbootするUbuntu-NAS② ffmpegをインストールする ffmpegのインストール
USBbootするUbuntu-NAS③ KVM環境のセットアップ KVM環境とタグVLAN環境のセットアップ

最後に

UbuntuをUSBメモリにインストールして、apt-getでパッケージの更新が出来るUbuntu本来の使い勝手を壊さないように、書き込みが多いディレクトリをメモリ上に退避し、その上でepgrecやminidlna、sambaを連携させてみました。USBメモリにインストールしている場合には、実運用に入る前に、iostatやvmstat、それと/proc/d/ioの値等を確認して、ioが殆ど無い事を確認してください。最新のプラットフォームでの構築事例や、感想などを書き込んでもらえると嬉しいです。 また、USBメモリの延命策等で更にいい方法がある場合や、他に連携すると面白いソフトウェアがあったら教えてください。

タグ付けされた , , , , , . ブックマークする へのパーマリンク.

6 Responses to USBbootするUbuntu-NAS① epgrec+pt3+minidlna+kvm環境を構築する

  1. さわがに 曰く:

    こんにちは、いつもわかりやすい説明と丁寧な文章ありがとうございます。

    私もepgrec本家からUNA版に移行したく、 以下の環境を揃えて試みて見ました。

    マザーボード:GIGABYTE GA-J1800N-D2H
    メモリー:4G
    USBメモリ:SanDisk Ultra USB 16G
    HDD:Toshiba 3.5inch ATA DT01ACA200 2T

    とりあえず、PT3やカードリーダーはUbuntuをUSBメモリにインストールした後に接続するつもりでした。
    しかしUbuntu Server 13.10 のインストールが最終段階まで進みましたが、USBメモリからUbuntuがブートを待ちましたが、

    error: boot/grub/i386-pc/normal.mod’ not found
    Entering rescue mode…
    grub rescue>

    のメッセージではまりました。とりあえず、別PCでググりました。
    よくわからんまま ls しまくり、(hd0,msdos1)に様々なファイルががありそうなのを発見!
    しかし、boot/grub/ には i386-pc なんてフォルダは無くその代わりに、x86_64-efi/ の下に様々なファイルを発見。
    そこで、

    set prefix=(hd0,msdos1)/boot/grub/x86_64-efi/
    set root=(hd0,msdos1)
    insmod (hd0,x)/boot/grub/x86_64-efi/normal.mod

    とここまでは順調、しかし

    normal

    としてもエラー。「Super Grub2 Disk」なんてものをCDに焼いてから起動すると、
    何とかubuntu 13.10 の端末だけが起動したけれどもGUIにならない。でも、めげずに
    sudo grub-install /dev/sdb1
    として再起動したけど・・・

    error: boot/grub/i386-pc/normal.mod’ not found
    Entering rescue mode…
    grub rescue>

    今回たまたまGrubがうまくインストールできなかったと考えて、初めからやり直して、USBメモリにUbuntuを再インストールしましたが、やっぱり同じ結果になりました。うーむ、GWの2日をこれだけでついやしてしまった・・・。

    UEFI環境ではUSBメモリからの起動は難しいとい書き込みも見たけど・・・どうなんでしょうね?
    おこづかいをためてSSDを買ってから再挑戦してみようかな?

    • lasas 曰く:

      こんばんは。
      以前、フォルダ分けの件で投稿して下さった方ですね。継続してBLOGを読んで頂いていると嬉しい限りです。ありがとうございあます。

      さて、本題ですが、epgrec UNA版はUSBブートかSSDでしか利用出来ないような誤解を与えていたのであれば申し訳ありません。投稿してもらった環境だと、わざわざUSBメモリにインストールする必要性も無さそうなので、最小構成のubuntu+epgrec(UNA版)+pt3環境構築を参考に、HDDにUbuntuをインストールして、USBブートしない環境で構築するのが良いかと思います。もちろん、USBブートしたければUSBブートにチャレンジして下さっても良いと思います。

      尚、ご質問にあるUEFI環境でのUSBブートは実績がありますので、環境依存の問題かケアレスミスだと思われます。BIOSの設定でUSBブートするようになっていれば問題ないと思います。少なくともMSIのB75A-G43では成功しています。それと、OSは最新の物を利用するようにしてください。古いOSだと最新のハードに対応しきれていないかもしれません。

      > error: boot/grub/i386-pc/normal.mod’ not found
      > Entering rescue mode…
      > grub rescue>
      インストールしようとしている環境は、32bitではなく、64bitですよね?
      i-386(32bit)の記載が出ているのが非常に気になります。
      お使いのMBのOS対応状況を見ると、64bitのみサポートしていますよね?
      間違って32bit版のISOをダウンロードして使っていないかを再確認して下さい。

  2. さわがに 曰く:

    回答ありがとうございます。

    どうやら32bit版のISOイメージをダウンロードしてしまったような気がします・・・お恥ずかしい・・・。

    せっかくUbuntu14.04LTSがリリースされているので、そちらをダウンロードして再度トライしてみます。現時点では64bit版しかないので同じ間違いはしないと思いますしね。

    成功したら、報告いたします。

    さわがに

  3. マガミ 曰く:

    初めまして、Linux系のPT3サーバ構築初心者なのですが質問です。

    sudo su –
    wget http://eco.senritu.net/wp-content/uploads/share/copy-tmpfs
    mv copy-tmpfs /etc/init.d/
    chown root:root /etc/init.d/copy-tmpfs
    chmod 755 /etc/init.d/copy-tmpfs
    sysv-rc-conf –level 016 copy-tmpfs off

    # 再度再起動し、シャットダウン時に新しく作成したファイルバックアップされている事を確認する
    touch /var/log/test.txt
    reboot

    # 再起動後、/var/log/test.txtがあればOK。
    ls -la /var/log

    # テスト出来たので削除する
    rm /var/log/test.txt

    上記の項目まで来たのですが再起動したときにtest.txtがバックアップされて再読み込みされないのですがこの場合は、どこの項目からやり直せばいいのでしょうか?

    よろしくお願いします。

    • lasas 曰く:

      恐らく、『/etc/fstabの設定を行う』辺りからやり直すのが良いと思います。
      問題の箇所としては、下記が思い当ります。
      ①一時領域にOSシャットダウン時に書き込めていない
      ②OS起動時に/tmpfs/var/から/varにコピーできていない

      想定される原因としては
      ・パーミッションが間違っている
      ・OSのバージョン違いで上手く動かない(Ubuntu14.04をお勧めします。それ以上のバージョンは未確認です。)
      ・起動スクリプトの追加が上手くいっていない
      等が思い当り、一つ一つつぶしていく必要があります。

      最後に、この投稿は環境も合わせた上でコピペで上手い事作れば問題なく動きますが、はまると、その問題解決はかなりのLinuxの経験を要するので、初心者の場合には、他のPT3の構築例を参考に、HDDにLinuxをインストールした上でPT3を使い、慣れてきてからチャレンジする事をお勧めします。

      • マガミ 曰く:

        わかりました。
        試してみますありがとうございました

コメントを残す

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