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-TrailとNT-ITX/PW120Plus環境は後追いで作ってみたいと思っています。
- USBメモリ(今回は4Gで構築。4G以上であれば何でもいい。ただし、USB3.0対応品を選ばないと遅いので注意。永久保証品が良さそうです。)
- サーバ本体(格安サーバか、80plus gold以上の電源で構築。メモリは最低4Gbyte。個人的にはBay-TrailとNT-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の表記は適宜読み替えてください。スクリーンショットが無い箇所は間違えないであろう箇所(ユーザー名やホスト名)です。
基本的に、選択するべき項目を選択した状態でスクリーンショットを撮っています。
日本語でインストール。
普通にインストールを選びます。
はいを選択。
日本を選択。
日本語キーボードを使っているので、日本語を選択。
日本語を選択。
ホスト名はインストール後にも変更可能です。ここではデフォルトのままにしています。
HDDの設定(USBメモリを指定するので、ここが大事)
手動を選びます。
ガイドによるパーティショニングを選びます。
vmwareでスクリーンショットを撮っているので、vmwareとなっていますが、USBメモリの名前が出ているはずなので、USBメモリを選びます。
空のパーティションテーブルを作成する為、はいを選びます。
新しく追加されたディスクを選択します。
新しいパーティションの作成を行います。
デフォルトで最大容量が入力されているはずですが、メッセージにある通り、maxと入力しても良いので、ここではmaxと入力しています。
もちろん、基本パーティションを選びます。
ここが大事です。
- ラベルはお好みで入力してください。
- 予約ブロックは、HDDが一杯になってしまっても、rootユーザー用に確保しておく予備領域です。5%のままで良いでしょう。
- 起動フラグをオンにします(デフォルトはオフなので、そのままにしておくと、インストール後の起動に失敗します。)
- 最後に、パーティションのセットアップを終了を選びます。
ここでも、パーティショニングの終了とディスクへの変更の書き込みを選びます。
スワップが無いと言っていますが、USBメモリ上にスワップ領域を確保すると、USBメモリの寿命が減るので、スワップは無しにします。スワップを無しにして、インストール後にfmpfsと言うオンメモリのドライブを使うようにする為に、メモリを大目に必要としています。最低4G。出来れば8Gあると良いですね。
ディスクに変更を書き込みます。
マスターブートレコードに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受信時の画面を載せておきます。
録画ファイル名の形式やその他の設定値について
個人的なメモです。『%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)を選択します。下図の赤枠の方ですね。
番組表更新の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メモリから下記のような感じで『>>読込>>』しておきます。
出来れば、同一の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メモリの延命策等で更にいい方法がある場合や、他に連携すると面白いソフトウェアがあったら教えてください。
こんにちは、いつもわかりやすい説明と丁寧な文章ありがとうございます。
私も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を買ってから再挑戦してみようかな?
こんばんは。
以前、フォルダ分けの件で投稿して下さった方ですね。継続して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をダウンロードして使っていないかを再確認して下さい。
回答ありがとうございます。
どうやら32bit版のISOイメージをダウンロードしてしまったような気がします・・・お恥ずかしい・・・。
せっかくUbuntu14.04LTSがリリースされているので、そちらをダウンロードして再度トライしてみます。現時点では64bit版しかないので同じ間違いはしないと思いますしね。
成功したら、報告いたします。
さわがに
初めまして、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がバックアップされて再読み込みされないのですがこの場合は、どこの項目からやり直せばいいのでしょうか?
よろしくお願いします。
恐らく、『/etc/fstabの設定を行う』辺りからやり直すのが良いと思います。
問題の箇所としては、下記が思い当ります。
①一時領域にOSシャットダウン時に書き込めていない
②OS起動時に/tmpfs/var/から/varにコピーできていない
想定される原因としては
・パーミッションが間違っている
・OSのバージョン違いで上手く動かない(Ubuntu14.04をお勧めします。それ以上のバージョンは未確認です。)
・起動スクリプトの追加が上手くいっていない
等が思い当り、一つ一つつぶしていく必要があります。
最後に、この投稿は環境も合わせた上でコピペで上手い事作れば問題なく動きますが、はまると、その問題解決はかなりのLinuxの経験を要するので、初心者の場合には、他のPT3の構築例を参考に、HDDにLinuxをインストールした上でPT3を使い、慣れてきてからチャレンジする事をお勧めします。
わかりました。
試してみますありがとうございました