このブログを検索

ラベル ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル ubuntu の投稿を表示しています。 すべての投稿を表示

2011-09-10

UbuntuでPT2(携帯用)

PT2のIF、epgrecを外部公開する際、普通にやるとiモード携帯からはうまく録画できないようです。
スタイルシートが使えない・・・?他のキャリアのは不明。

で、iモード携帯からも使えるようにした入り口を作った方がいました
http://sarami.pv.s-labo.com/blog/zatta.php?itemid=104&catid=24

ここにある「iモード用のepgrec」をインストールするシミュレーションをしてみます。

Downloadからモジュールをダウンロードする
iepgrec_20101001.tar.gz

$ tar -xvzpf epgrec-20100322.tar.gz
中にあるファイルを.../epgrec/直下に置く。
./epgrec/に3ファイル、./epgrec/templates/に2ファイル入ります。

そのままだとphpにエラーが出ている?ようなので少し修正します。
$ sudo vi /var/www/epgrec/iprogramTable.php
下の方の153行目くらい?にある
$ch_options .= "where skiop!='1' ORDER BY id"
という行の上に1行挿入して
$ch_options = ""
$ch_options .= "where skiop!='1' ORDER BY id"
このようにします。
どうやら初期化されてないのに.を使っているのがだめなよう・・・?
もしかしたら対処しなくても動くかもしれないけど念のため。


あとは携帯からiprogramTable.phpに接続すればOK。
これで外部公開していれば、外出先から携帯を使って録画もできますね。
ただ、前回紹介した外部公開用セキュリティを施していると、
携帯からだと毎回パスワードをきかれてやっかいかもです。
定型文にパスワード入れるなりして対応するしかないかなぁ。






2重シールド5C同軸ケーブル S5CFB(C)BK

2重シールド5C同軸ケーブル S5CFB(C)BK
価格:105円(税込、送料別)

UbuntuでPT2(5/5)

おまけ
間違えている可能性が高いので参考程度に・・・

キーワードのバックアップ・リストア
$ sudo mysqldump -u root -p epg Recorder_keywordTbl > Recorder_keywordTbl_`date +%Y%m%d-%H%M%S`.sql
$ sudo mysql -u root -p epg < ダンプファイル名
 
局の追加
$ sudo /etc/init.d/apache2 stop
$ sudo /etc/init.d/cron stop
$ sudo vi /var/www/epgrec/config.php
ここでちゃんねるを開放する
逆にちゃんねるをコメントアウトするのはまずいかも?
$ /var/www/epgrec/getepg.php
$ sudo /etc/init.d/apache2 start
$ sudo /etc/init.d/cron start



epgrec番組表が壊れたとき
$ mysql -u root -p
mysql>use epg;
mysql>delete from Recorder_channelTbl;
mysql>delete from Recorder_programTbl;
mysql>delete from Recorder_reserveTbl;
mysql>exit;
↓を実行
http://ホスト名/epgrec/install/step1.php

epgrecのDBが壊れたとき
$ mysql -u -root -p
mysql>drop database epg;
mysql>create database epg;
mysql>grant all privileges on *.* to [username]@localhost identified by '[Password]';
mysql>exit;
↓を実行
http://ホスト名/epgrec/install/step1.php

epgrec再インストール
$ cd
$ sudo rm -r /var/www/epgrec/settings
$ mkdir /var/www/epgrec/settings
$ chmod 777 /var/www/epgrec/settings
↓を実行
http://ホスト名/epgrec/

epgrec完全再インストール
$ cd
$ sudo rm -r /var/www/epgrec/
$ sudo tar -xvzpf epgrec-20100322.tar.gz -C /var/www/
→インストール手順へ戻る

(以下、2012/1/21追記)
Ubuntuを10.10以上に上げると、使われるドライバが変わってしまう
(→動かない?)
"/etc/modprobe.d/blacklist.conf"に
blacklist earth-pt1
を追記すればDVB版ドライバはロードされなくなり、問題なくなる。(?)
その後再起動が必要だが、うまくいかない場合は電源OFF→ONすると良いらしい。
参考:http://team2ch.org/blog/?p=1103


Ubuntuを11.10に上げるとスマートカード周りのバグで動作しない
よくわからないがこの辺参照
※うちはまだ10.04
参考:http://team2ch.org/blog/?p=1103


予約済み番組の予約モード変更
$ mysql -u root -p
> use epg;
> select id,keyword,autorec_mode from Recorder_keywordTbl;
ここで該当するキーワードのidを調べて
> update Recorder_keywordTbl set autorec_mode=1 where id='調べたID';
> update Recorder_reserveTbl set mode=1 where title like "%キーワード%";


録画予約一覧に古い予約が残った場合の削除
まず録画予約一覧で古い予約のidを調べる。
$ mysql -u root -p
> use epg;
> update Recorder_reserveTbl set complete=1 where id='調べたID';





2重シールド5C同軸ケーブル S5CFB(C)BK
2重シールド5C同軸ケーブル S5CFB(C)BK
価格:105円(税込、送料別)


2011-09-09

UbuntuでPT2(4/5)

UbuntuでPT2たぶんラスト
最後に、保存領域を外付けUSBに変更します。
epgrecの保存領域はapacheで公開している範囲に限られるそうなので、
シンボリックリンクで対応したいと思います。

まずデバイスの認識から

$ sudo parted -l
モデル: ST310005 20AS (scsi)
ディスク /dev/sdc: 1000GB
というのが外付けHDDです

$ sudo parted /dev/sdc
(parted) mklabel gpt
(parted) print
→サイズを知る、1000GBだった
(parted) unit GB
(parted) mkpart video ext4 0 1000GB
(parted) unit MiB
(parted) mkpart video xfs 1 -1
(parted) quit
第一引数(video)はラベルなので何でもいい
3つ目の1は、MiBなら1から始めたほうが良いらしい?
最後の-1は終端の意味


$ sudo apt-get install xfsprogs
$ sudo mkfs.xfs /dev/sdc -f
$ sudo mkfs.xfs -f -b size=4k -i size=512 -l size=128m,version=2 /dev/sdc1


meta-data=/dev/sdc isize=512 agcount=4, agsize=7630917 blks
= sectsz=512 attr=2
data = bsize=65536 blocks=30523665, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=65536 ascii-ci=0
log =internal log bsize=65536 blocks=2048, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=65536 blocks=0, rtextents=0

デバイスにはパーティションを指定するので注意-> sdc1
-b sizeはブロックサイズでデフォルト4kだけどわかりやすいように明示的にした
本当は64kくらいは指定できたはずだけど、4kを超えるとなぜかマウントできなかった
-iと-lの指定は速くなるらしいので一応つけてみた(ファイルコピー試してみても差はわからなかった)


マウントポイント作成
$ sudo mkdir /home/media/pt2
$ sudo chown www-data:www-data /home/media/pt2
$ sudo chmod 777 /home/media/pt2
試しにマウント
$ sudo mount -t xfs /dev/sdc1 /home/media/pt2
再起動時にマウントするようにする
$ sudo vi /etc/fstab
/dev/sdc1        /home/media/pt2 xfs defaults 0 0

シンボリックリンク作成
$ sudo ln -s /home/media/pt2 /var/www/epgrec/video
$ sudo mkdir /home/media/pt2/thumbs
$ sudo chmod 777 /home/media/pt2/thumbs
$ sudo chown www-data:www-data /home/media/pt2/thumbs
$ sudo ln -s /home/media/pt2/thumbs /var/www/epgrec/thumbs


※今回はまっさらの状態でやったけど
もし録画データがあったらだめかも。
その場合はデータベースを再作成して再セットアップか?



次にクオータを設定します。
epgrecはディスク残量を管理しないので自分でやる必要があります。
今回はソフトリミットを超えたらメール通知されるようにしてみます。

メールアドレスの設定
$ sudo vi /etc/aliases
$ sudo postalias /etc/aliases
www-data: メールアドレス
を記述する

quotaをONにする
$ sudo vi /etc/fstab
/dev/sdcの
defaults

defaults,usrquota
に変更する
※pt2の録画先

$ sudo umount /dev/sdc1
$ sudo mount /dev/sdc1
$ cat /proc/mounts | grep pt2
/dev/sdc1にusrquotaがついていればOK
※remountではダメだった
※xfsファイルシステムの場合はquotacheck不要らしい

$ quotaon -v /home/media/pt2
quotaon: Enable XFS group quota accounting during mount
quotaon: Enforcing user quota already on /dev/sdc1
こんな感じで出ればOK

xfs用quotaコマンド"xfs_quota"を管理モード(-x)で起動
$ sudo xfs_quota -x

とりあえずレポートを見てみる
xfs_quota>report -u -h /dev/sdc1

quota対象のファイルシステム一覧を表示 xfs_quota>path

対象となるファイルシステムをカレントにセット xfs_quota>path 000
www-dataユーザにソフトリミット750GB, ハードリミット800GBを設定
xfs_quota> limit bsoft=750g bhard=800g www-data
解除する場合は0に指定すればよいようだ。ちゃんとコマンドありそうだが未確認。
抜ける
xfs_quota> q


リミットが来ているユーザにメールを送信する仕組み
"warnquota"の準備をする。

デバイス情報を記述する
$ sudo vi /etc/quotatab
/dev/sdc: Your home directory
/dev/sdc1: Your home directory


以上で設定完了。
対象のファイルシステムにソフトリミットを超えたユーザファイルをおいてみる。

そして下記コマンドでメール送信。
$ sudo warnquota -s
※ちなみにメールは/etc/aliasesで設定する

メールが通知されたら、あとはwarnquotaをcronで実行するようにする。
$ sudo vi /etc/cron.daily/do-warnquota.cron
#!/bin/sh
warnquota -s


以上でquotaつき録画領域の完成です!


参考:
http://hinode.nao.ac.jp/~tonooka/SBSC/open/parted_howto.html http://ameblo.jp/kupok/entry-10792760992.html http://xoops.fens.net/modules/wiki/?Linux%2FMemo%2Fxfs%2F%E6%93%8D%E4%BD%9C%E6%96%B9%E6%B3%95 http://www.ftnk.jp/~fumi/cl/2005-11-18-8.html http://blog.stud.vg/2008/12/xfs-2tb.html http://sea-mew.jp/nox/modules/xpwiki/587.html

(追記2012/8/2) mkpartの引数間違い修正
(追記2012/8/2) mkfs.xfsコマンドの引数を変更
(追記2012/8/2) xfs_quota limitでコメントと引数が不一致だったのを修正
(追記2012/8/2)
デバイス名を/dev/sdc1ではなく/dev/sdcと記載していたのを全体的に修正
今までそれで問題なかったけど恐らく良くない状態だった
今回HDDを入れ替えるにあたりミスに気づいた



2重シールド5C同軸ケーブル S5CFB(C)BK
2重シールド5C同軸ケーブル S5CFB(C)BK
価格:105円(税込、送料別)

apache2のデータディレクトリ変更

apache2のルートディレクトリを変更
通常/var/wwwがルートディレクトリですが
今回は/home/wwwに変更してみます。

defaultファイルを変更する
$ sudo /etc/init.d/apache2 stop
$ sudo cp -p /etc/apache2/sites-available/default /etc/apache2/sites-available/default.org
$ sudo vi /etc/apache2/sites-available/default
DocumentRoot /var/www

DocumentRoot /home/www
に変更

$ sudo cp -r -p /var/www /home/www
$ sudo /etc/init.d/apache2 start

参考
http://www.linux.net-japan.info/install08.html

mysqlのデータディレクトリ変更

mysqlのデータディレクトリは通常/var/lib/mysql
です。しかしこれだと、うちの環境のような、
homeディレクトリにだけ大容量ディスクをマウントしている環境だと困ります。
そこでこのデータディレクトリを/home以下に移してみます。

通常、confファイルのデータディレクトリを変更等すればよいだけなのですが、
うちの環境だとエラーがでて進みませんでした。
調べたところ、datadirを変更するとSELinuxという機能のために動かなくなるようです。
http://oksoft.blogspot.com/2009/12/issues-with-selinux-firewall.html

今回はそれをシンボリックリンクで解決します。

mysqlデータディレクトリを移動
$ sudo service mysql stop
$ sudo mv /var/lib/mysql /home/mysql

シンボリックリンク作成
$ sudo ln -s /home/mysql /var/lib/mysql

アクセス制御?を変更
$ sudo vi /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

/home/mysql/ r,
/home/mysql/** rwk,
に変更。

mysql再起動
$ sudo /etc/init.d/mysql start



参考:
http://tobysoft.net/wiki/index.php?Ubuntu%2Fmysql
http://gentoo.reichsarchiv.jp/item/28

mysql再インストール

mysqlが起動しなくなってしまいました。
ある日、PCを再起動するとmysqlに繋がらなくなって、
サービスを起動することもできない。
mysqld_safeも無理。

↓こんな感じになります。
$ sudo service mysql start
start: Job failed to start


で、再インストールを試みたのですが、通常、
$ sudo apt-get remove php5-mysql mysql-server*
でアンインストールすれば問題なく次にインストールできるらしいんですけど、
それじゃ何度やっても解消されない。

この辺の問題?
https://bugs.launchpad.net/ubuntu/+source/mysql-dfsg-5.1/+bug/573318


超いろいろ思考錯誤した結果解決しましたので
記録を残しておきます。

結論としては、mysql-commonを再インストール。が必要でした。


影響が大きいのでまずはシミュレーション
$ sudo apt-get -s remove --purge php5-mysql mysql-server* mysql-common
削除候補にmediatombが含まれてしまうTT


設定ファイルを退避させます
$ sudo cp -r -p /etc/mysql /etc/mysql.bak
$ sudo cp -r -p /etc/mediatomb /etc/mediatomb.bak

アンインストール
$ sudo apt-get remove --purge php5-mysql mysql-server* mysql-common
未使用パッケージがあったので一応削除
$ sudo apt-get autoremove --purge
フォルダが残っているので削除
$ sudo rm -r /etc/mysql
$ sudo rm -r /var/lib/mysql

インストール
$ sudo apt-get install php5-mysql mysql-server
起動確認
$ ps ax | grep mysql
5456 ? Ssl 0:00 /usr/sbin/mysqld
mysqldが起動していたら成功

設定ファイル戻す
$ sudo cp -p /etc/mysql.bak/my.cnf /etc/mysql/.
$ sudo service mysql restart

ここまでくるのに10時間はかかったような・・・
なんにせよ解決してよかったよかった。

あとは削除されてしまったmediatomb再インストール
$ sudo apt-get install mediatomb
起動確認
$ sudo ps ax | grep meditabom
5983 ? Ssl 0:00 /usr/bin/mediatomb -c /etc/mediatomb/config.xml -d -u mediatomb -g mediatomb -P /var/run/mediatomb.pid -l /var/log/mediatomb.log
mediatombが起動していたら成功

設定ファイル戻す
$ sudo cp -p /etc/mediatomb.bak/config.xml /etc/mediatomb/.
$ sudo /etc/init.d/mediatomb restart


めでたしめでたしでした。

2011-09-07

UbuntuでPT2(3/5)

さて前回でひと通りのセットアップが終わりましたが
epgrecはhttpサーバーなので外部公開も一応可能だそうです。
ローカル用に作られているのでセキュリティについては?ですが、
やるなら次の3つのことくらいをやっておくとよさそうです。
やらないとapacheが乗っ取られたりするそうです。

参考:
http://dambo.no-ip.org/pwiki/index
http://zeonic.ath.cx/jitaku/


一、認証をかける
パスワードファイルを暗号形式で作成する
$ sudo htpasswd -c /etc/apache2/.htpasswd ユーザー名

パスワードを設定する(公開フォルダでなければどこでもいい)
$ sudo vi /etc/apache2/apache2.conf

confファイルに次の記述を追記する

AuthType Basic
AuthName "Enter Password"
AuthUserFile /etc/apache2/.htpasswd
Require user ユーザー名


apache再起動
$ sudo /etc/init.d/apache2 restart

http://ホスト名/epgrecにアクセスしてパスワードを求められたら成功




二、クローラーを弾く
「.htaccessでクローラーIPを弾く」といった意味合いで各種紹介されている設定をapache2.confファイルに記述する。
例:

order allow,deny
allow from all
deny from env=○○○


○○○にはapache2.conf内で定義した定数が入り、定数にはフィルタリングルールが入る。



三、firewallの設定
Linuxのfirewallであるiptablesにてフィルタリングを行う

参考:
http://centossrv.com/iptables.shtmlhttp://www.najankai.com/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%81%AE%E6%A7%8B%E7%AF%89%28ubuntu%29
http://semiblackharp.blogspot.com/2010/01/iptables.html
http://d.hatena.ne.jp/Ubuntu/20080128/1201462048

まず現在の設定を確認してみる
$ sudo iptables -L -n

Ubuntuはデフォルトで、インストールされているソフトで必要なポートが自動的に開くようになっているらしい?

今回は手動でルールを決めて、なおかつ危険国からのアクセスを禁止するようにする。

まず参考サイトを見ながらまず設定用のスクリプトを用意する。
$ sudo vi /home/root/iptables_register/iptables.sh
$ sudo chmod 700 /home/root/iptables_register/iptables.sh
※参考サイトそのままだとUbuntu(?)の環境と合わないので
 いろいろ微修正が必要

いろんなサイトを統合してUbuntu用にデバッグしたところ↓な感じで落ち着いた
※全くわかってない上に適当なので間違えていたら教えて下さい
#!/bin/sh

# インタフェース名定義
#LAN=eth0

# 内部ネットワークのネットマスク取得
#LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`

# 内部ネットワークアドレス取得
#LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
#LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
LOCALNET=192.168.1.0/255.255.255.0

# ファイアウォール停止(すべてのルールをクリア)
#/etc/rc.d/init.d/iptables stop
iptables -F

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT DROP # 受信はすべて破棄
iptables -P OUTPUT ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP # 通過はすべて破棄

# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# 内部からのアクセスをすべて許可
iptables -A INPUT -s $LOCALNET -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

# フラグメント化されたパケットはログを記録して破棄
iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP

# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

# ACCEPT_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
ACCEPT_COUNTRY_MAKE(){
for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
do
iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
done
}

# DROP_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
DROP_COUNTRY_MAKE(){
for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
do
iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
iptables -A DROP_COUNTRY -s $addr -j DROP
done
}


# IPアドレスリスト取得
. /home/root/iptables_register/iptables_functions
IPLISTGET

# 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
# 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する

# 中国・韓国・台湾※からのアクセスをログを記録して破棄
# ※全国警察施設への攻撃元上位3カ国(日本・アメリカを除く)
# http://www.cyberpolice.go.jp/detect/observation.htmlより
iptables -N DROP_COUNTRY
#中国
DROP_COUNTRY_MAKE CN
#韓国
DROP_COUNTRY_MAKE KR
#台湾
DROP_COUNTRY_MAKE TW
#追加:北朝鮮
DROP_COUNTRY_MAKE KP
iptables -A INPUT -j DROP_COUNTRY

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから) #
#----------------------------------------------------------#

# 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
# ※SSHサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 外部からのTCP21番ポート(FTP)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY

# 外部からのPASV用ポート(FTP-DATA)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
# ※PASV用ポート60000:60030は当サイトの設定例
#iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT_COUNTRY

# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
# ※SMTPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY

# 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
# ※POP3サーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY

# 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
# ※POP3Sサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY

# 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
# ※IMAPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY

# 外部からのTCP993番ポート(IMAPS)へのアクセスを日本からのみ許可
# ※IMAPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY

# 外部からのUDP1194番ポート(OpenVPN)へのアクセスを日本からのみ許可
# ※OpenVPNサーバーを公開する場合のみ
#iptables -A INPUT -p udp --dport 1194 -j ACCEPT_COUNTRY

# VPNインタフェース用ファイアウォール設定
# ※OpenVPNサーバーを公開する場合のみ
#[ -f /etc/openvpn/openvpn-startup ] && /etc/openvpn/openvpn-startup

#追加
# 外部からのTCP123番ポート(NTP)へのアクセスを許可
# ※NTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 123 -j ACCEPT_COUNTRY


#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで) #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
for ip in `cat /root/deny_ip`
do
iptables -I INPUT -s $ip -j DROP
done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP

# サーバー再起動時にも上記設定が有効となるようにルールを保存
#/etc/rc.d/init.d/iptables save
iptables-save > /etc/network/iptables

# ファイアウォール起動
#/etc/rc.d/init.d/iptables start


次に内部で使用する関数を作る
$ sudo vi /home/root/iptables_register/iptables_functions
$ sudo chmod 700 /home/root/iptables_register/iptables_functions
mailの設定をしておかないと固まるので注意

# IPアドレスリスト取得関数定義
IPLISTGET(){
# http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
# 最新版IPアドレスリストが取得できなかった場合
if [ ! -f cidr.txt ]; then
if [ -f /tmp/cidr.txt ]; then
# バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
echo cidr.txt was read from the backup! | mail -s $0 root
return
else
# バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
echo cidr.txt not found!|mail -s $0 root
exit 1
fi
fi
# 最新版IPアドレスリストを /tmpへバックアップする
/bin/mv cidr.txt /tmp/cidr.txt
}
※mail行のrootは予め/etc/aliasesで定義しておかないといけないと思う
 よくわからなければコメントアウトでいいかも


さらに、cron用のスクリプトを作る
$ sudo vi /home/root/iptables_register/iplist_check.sh
$ chmod 700 /home/root/iptables_register/iplist_check.sh
$ sudo cp -p /home/root/iptables_register/iplist_check.sh /etc/cron.daily/iplist_check.sh
パスをあわせないといけない

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 新旧IPLIST差分チェック件数(0を指定するとチェックしない)
# ※新旧IPLIST差分がSABUN_CHKで指定した件数を越える場合はiptables設定スクリプトを実行しない
# ※新旧IPLIST差分チェック理由はhttp://centossrv.com/bbshtml/webpatio/1592.shtmlを参照
SABUN_CHK=100
[ $# -ne 0 ] && SABUN_CHK=${1}

# チェック国コード
COUNTRY_CODE='JP CN KR TW KP'

# iptables設定スクリプトパス
IPTABLES=/home/root/iptables_register/iptables.sh

# iptables設定スクリプト外部関数取り込み
. /home/root/iptables_register/iptables_functions

# IPアドレスリスト最新化
rm -f IPLIST.new
IPLISTGET
for country in $COUNTRY_CODE
do
if [ -f /tmp/cidr.txt ]; then
grep ^$country /tmp/cidr.txt >> IPLIST.new
else
grep ^$country /tmp/IPLIST >> IPLIST.new
fi
done
[ ! -f /tmp/IPLIST ] && cp IPLIST.new /tmp/IPLIST

# IPアドレスリスト更新チェック
diff -q /tmp/IPLIST IPLIST.new > /dev/null 2>&1
if [ $? -ne 0 ]; then
if [ ${SABUN_CHK} -ne 0 ]; then
if [ $(diff /tmp/IPLIST IPLIST.new | egrep -c '<|>') -gt ${SABUN_CHK} ]; then
(
diff /tmp/IPLIST IPLIST.new
echo
echo "$IPTABLES not executed."
) | mail -s 'IPLIST UPDATE' root
rm -f IPLIST.new
exit
fi
fi
/bin/mv IPLIST.new /tmp/IPLIST
sh $IPTABLES > /dev/null
else
rm -f IPLIST.new
fi


これでOK

まずは手動で実行する
$ sudo sh iptables.sh
※数分かかる

再度
$ sudo iptables -L -n
で状況を確認し、IPがたくさん登録されていたりしたらOK



このままでは再起動後に消えてしまうので
起動のたびに適用されるように?する
参考:
http://shiro9211.jugem.jp/?eid=449

sudoだとうまくいかなかったのでrootになる
$ sudo su

iptablesの設定をエクスポート
$ iptables-save > /etc/network/iptables

iptablesを起動毎に設定するスクリプトを作成
$ vi /etc/network/if-pre-up.d/iptables
--
#!/bin/sh
iptables-restore < /etc/network/iptables







--

$ chmod 700 iptables




以上の3つで、外部公開しても多少マシ?


おまけ
設定クリア(全ポート閉じる?)
$sudo iptables -F


(20110910追記)
チェック国コード(COUNTRY_CODE)に韓国(KP)が抜けていたので修正
(20110910追記)
iptables_functionsのgunzipには-fつけた方がいいか・・?







2重シールド5C同軸ケーブル S5CFB(C)BK

2重シールド5C同軸ケーブル S5CFB(C)BK
価格:105円(税込、送料別)

2011-09-03

UbuntuでIP固定

ubuntuでIP固定する場合、次のファイルを操作する必要があるようです。

/etc/network/interfaces
/etc/resolv.conf
/etc/hosts

これらの編集を簡易化するresolvconfというソフトもありますが
動作が不安定らしいので手動で変更します

$ sudo vi /etc/network/interfaces
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.123
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

eth0のdhcpをやめてstaticに変更
その下に設定を記述する

$ sudo vi /etc/resolv.conf
nameserver 192.168.1.1
search ubuntud.com

※これでいいのか?よくわからん

$ sudo vi /etc/hosts
2行目が127.0.1.1・・・となっていた場合は、固定したいIPに変更する。
192.168.1.123 ・・・・・


サービス再起動
$sudo /etc/init.d/networking restart




設定がうまくいかない場合、マシン再起動後、LANのみつながってインターネットに繋がらないという症状が発生した。
その時はネットでよく紹介されているresolvconfをインストール&networkという記述をしていた。
それらを解除したところ症状が改善された。
(20110913追記)
ルーターの設定が悪かったようだ。RV-S340HIという機種で、「Webサーバを外部に公開する」という機能があるんだけど、そこで指定したIPからはルーターにアクセスできなくなるらしい。→LANしかつながらない。
networkという記述は書いておくほうがよさそう。

(20110913追記)
interfacesファイルの説明
auto : マシン起動時に立ち上げるアダプタ、通常必須
address : 固定IP
netmask : 固定IPのクラスっていうんだっけ?同じネットワーク内で割り当てる領域を指定
       うちは192.168.1.2~192.168.1.254が自由なIPだからこの設定。
       24bitとも表すようだ
network : サブネット?netmaskと似たような感じで、自由な箇所を0にすればよい?
broadcast : これもnetmaskと似たような感じで、自由な箇所を255にすればよい?
         綴り間違えていたので本文修正しました。
gateway : ルーターのIPを指定すればOK

(20110913追記)
resolv.confファイルの指定を結構間違えていたので修正しました。
nameserver : うちはルーターのIPを指定。ルーターがプロバイダから自動でDNS情報を
          取得していて、端末はルーターからDNS情報を得ればよいらしい。
          ちなみに複数指定する場合は、nameserver行をその分追加するそうです。
search : 必要なければ指定しない方がよいらしい?LAN内でメールが送れなくなる・・・?

(20120725追記)
どうやらhostsファイルも編集したほうが良いみたいです。
必須ではないようですし紹介しているサイトも少ないですけど。
ちなみに127.0.1.1というのはOS側の仕様で、DHCPにした場合に設定される値のようです。


UbuntuでPT2(2/5)

そしてシミュレーションのインストール編。

まずハードウェアのインストール。
PCIスロットにPT2を挿入、USB端子にICカードリーダーを挿入。
カードリーダーにはB-CASカードを挿入します。
どうやらICカードは端子のある方が表で、カードリーダーに指すとき、見た感じ「逆だろう!」という方向が正しいことがあるそうなので気を付ける必要がありそうです。


インストーラを最新にする
$ sudo apt-get update


ICカードリーダーツールをインストールする
$ sudo apt-get install libccid pcsc-tools libpcsclite-dev

実行
$ pcsc_scan
(20120806)もし動かない場合はsudo apt-get install pcscdを試す
文字がいろいろ表示されて
Japanese Chijou Digital B-CAS Card (pay TV)
といった文字が表示されれば成功。


チューナードライバ
チューナーのLinux用ドライバがいくつかあるらしく、DVB版、chardev版と呼ばれるものを見つけました。
DVB版はGUIベース、chardev版はCUIベース、そしてPT2での一般的なのはchardev版(?)、というわけで、今回はchardev版をインストールするつもりで検討してみます。


まず、/usr/local/binが存在するか確認する。
ない場合はインストールに支障をきたすため作成しておく。
$ sudo mkdir /usr/local/bin
$ sudo chmod +x /usr/local/bin



PT2ドライバのインストール
(recpt1のインストール) ※詳細不明
$ cd
$ sudo apt-get install build-essential
$ wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
$ unzip c44e16dbb0e2.zip
$ cd pt1-c44e16dbb0e2/arib25
$ make
$ sudo make install
$ cd ./../recpt1
$ sudo make install

(ドライバのインストール)
$ cd
$ sudo apt-get install mercurial autoconf automake
$ hg clone http://hg.honeyplanet.jp/pt1 PT2
$ cd PT2/driver
$ make
$ sudo make install

再起動 ※電源OFFしてからONした方がいいらしい?
$ shutdown -h now



PT2が認識されているか確認
$ lspci | grep Xilinx

↓みたいな文字が出ればOK
05:00.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)



chardev認識(?)
$ ls -lart /dev/ |grep pt1
crw-rw-rw- 1 root video 250, 3 2011-08-31 21:16 pt1video3
crw-rw-rw- 1 root video 250, 2 2011-08-31 21:16 pt1video2
crw-rw-rw- 1 root video 250, 1 2011-08-31 21:16 pt1video1
crw-rw-rw- 1 root video 250, 0 2011-08-31 21:16 pt1video0
4ポートあるので4つ出るのが正しいらしい


とりあえず録画テスト
$ recpt1 --b25 --strip 22 30 test.ts
※TBSを30秒録画

以上でチューナーのインストール完了。


続いて録画システムであるepgrecのインストール。
Linuxでchardev版だとepgrecくらいしか選択肢ないらしい。

$ sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli mysql-server php5-mysql

まずはepgdumprというソフトをインストール
(20120808追記)パッチを当てる方法を掲載しました→epgdumprにパッチをあてる
$ cd
$ wget "http://www.mda.or.jp/epgrec/index.php?plugin=attach&refer=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%89%8D%E3%81%AE%E6%BA%96%E5%82%99&openfile=epgdumpr2-utf8.tar.gz" -O epgdumpr2-utf8.tar.gz
$ tar -zxvf epgdumpr2-utf8.tar.gz
$ cd epgdumpr2
$ make
$ sudo cp epgdump /usr/local/bin


確認
先ほどrecpt1で録画したtest.tsのあるフォルダで次のコマンドを実行する
先ほどのtest.tsのあるフォルダで
$ epgdump test test.ts - | less
番組名っぽいのがズラズラでてきたらOK


atのインストール
$ sudo apt-get install at

次の説明に従って設定する必要があるようです。
/etc/at.denyの設定
 epgrecはWebサーバーのユーザーアカウント(Debian/Ubuntuはwww-data、RedHat?系ではapache)でatコマン ドを実行しますが、セキュリティ上の配慮からatの使用禁止ユーザーリスト/etc/at.denyに、Webサーバーのアカウントが設定されている場合 があります。
 管理権限(root)で/etc/at.denyを開き、www-dataやapacheといった、Webサーバーのアカウントが含まれていないか調べ、含まれていたら、その行を必ず削除してください。


/etc/passwdの確認
 一部のディストリビューションでは、セキュリティ上の配慮からWebサーバーのアカウントにnologin(ログイン不可)が設定されています。 nologinのアカウントではatコマンドも利用できず、epgrecによる録画予約が機能しません。 rootアカウントで/etc/passwdを 開き、Webサーバーのアカウント(apacheなど)のエントリを調べ、シェルの設定が/sbin/nologinに設定されているようなら、/bin /shに変更しておきましょう。

apache:x:48:48:Apache:/var/www:/sbin/nologin
↓下記のように変更
apache:x:48:48:Apache:/var/www:/bin/sh

 以上の設定をしっかりと行っておかないと、録画予約に失敗します。



うちの場合/etc/at.denyにwww.dataが含まれていますね。
/etc/passwdには今回見るべきアカウントが含まれていません。



続いてmysqlのセットアップです。
まず日本語の設定から。

$ sudo vi /etc/mysql/my.cnf

[client]セクションに↓追記
default-character-set = utf8

[mysqld]セクションに↓追記
default-character-set = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
init-connect = SET NAMES utf8
(20120806追記)最新mysqlではdefault-character-setをcharacter-set-serverとする
(20120806追記)collation-serverはデフォルト値を指定していたみたいなので削除
(20120806追記)skip-character-set-client-handshake,init-connectは使わない方がいいらしい、問題があれば試してみる程度で

[mysql]セクションに↓追記
default-character-set = utf8

[mysqldump]セクションに↓追記,なければセクション追加
default-character-set = utf8


次にrootのパスワードを忘れてしまっていた場合の対処から。

mysqlサービス停止
$ sudo service mysql stop

認証をスキップするオプションを指定してmysqlを起動
$ sudo /usr/bin/mysqld_safe --user=root --skip-grant-tables &
※このあと画面に変化ないからエンターおしたらプロンプトが出る?

ログインしてmysqlデータベースに接続
$ mysql -u root mysql

パスワードを初期化
mysql> UPDATE user SET Password=PASSWORD('新しいパスワード') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

mysqld_safeは普通には終了できないので特別なコマンドで終了
$ mysqladmin shutdown

$ sudo service mysql start
$ mysql -u root -p
Enter password: ←新しいパスワード入れる

epq用のデータベースを作成し、権限を設定する
mysql>create database epgrec;
mysql>grant all privileges on epgrec.* to 'epgrec'@localhost identified by 'パスワード';
mysql>quit



epgrecインストール
テスト版がでているが安定板(20100322)を使うことにする

$ cd
$ wget 'http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fepgrec%2F46492%2Fepgrec-20100322.tar.gz' -O epgrec-20100322.tar.gz
$ sudo tar -xvzpf epgrec-20100322.tar.gz -C /var/www/

スクリプトの設置
$ cd /var/www/epgrec
$ cp -p config.php.sample config.php
$ cp -p do-record.sh.pt1 do-record.sh


config.phpを公式サイトに従って変更する

config.phpの設定

/var/www/epgrec/config.php.sampleをconfig.phpにリネームします。

$ sudo mv /var/www/epgrec/config.php.sample /var/www/epgrec/config.php

その上でエディタで開きます。たとえば、

$ sudo gedit /var/www/epgrec/config.php

ファイル内の設定を、環境に合わせて書き換えます。書き換えが必要&必要になるかもしれない項目を説明していきます。以下で挙げられた設定以外は変える必要はありません。
地上デジタルチャンネルマップ$GR_CHANNEL_MAPの設定 [はてなブックマークで表示] [コメントビューワーで表示]

 $GR_CHANNEL_MAPには、地上デジタル放送のチャンネルがPHPの配列として格納します。地上デジタル放送のチャンネルはお住まいの地域によって異なりますから、地域に合わせて設定を変えなければなりません。
 config.phpには首都圏東部(千葉方面)用のチャンネルマップが初期設定されています。首都圏地方局のうち、TVK、テレビ埼玉、MXTVはコメントアウト(行頭の//)されており、千葉テレビはコメントアウトされていません。首都圏にお住まいの方は、地方局のコメントの位置を自分が受信できる局に変更するだけで利用できます。
 一方、首都圏以外の地域では地域に合わせて丸ごとの変更が必要です。$GR_CHANNEL_MAPは次のように記述します。

$GR_CHANNEL_MAP = array(
"識別文字列" => "チャンネル番号",
"識別文字列" => "チャンネル番号",
.....局数分入れる
);

 識別文字列は局を識別するためのユニークな(唯一無二の)文字列にします。例のように"GRチャンネル番号"としておくのが無難でしょう。受信可能なチャンネル番号は、ネットで調べることが出来ます。たとえば、マスプロ電工の相談窓口などを参考にすると良いでしょう。例として、大阪地区の$GR_CHANNEL_MAPの設定例を掲載しておきます。

$GR_CHANNEL_MAP = array(
"GR24" => "24", // NHK
"GR13" => "13", // 教育
"GR16" => "16", // 毎日
"GR15" => "15", // 朝日
"GR17" => "17", // 関西
"GR14" => "14", // 読売
"GR18" => "18", // テレビ大阪
);


とりあえず今回は、MXとTVKを有効にして、千葉テレビを無効にすればよさそう。


ここで録画テスト
$ cd
$ OUTPUT=test.ts CHANNEL=22 DURATION=30 TUNER=0 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh
TBSが30秒録画されたら成功



epgrecの確認
http://ホスト名/epgrec/
に繋ぐ

”以上を確認し次の設定に進む”を選択

MySQL接続ユーザー名を"epgrec"に
MySQL接続パスワードを設定したパスワードに
使用データベース名を"epgrec"に
インストールURLを"http://ホスト名/epgrec"に
録画保存ディレクトリを"/○○○"に(sambaフォルダ)
サムネールの使用を"使用する"に
だいたいこんな感じで次へ

mediatomb連係機能を"使う"に
だいたいこんな感じで次へ

最後にリンクをクリックすれば初回受信に入るらしいけど
先にmediatombの連携設定

$ sudo vi /etc/mediatomb/config.xml

sqliteをoffにしてmysqlをonにする
前提としては、テーブル名がepg、ユーザー名もepg。
=>"no"
=>"yes"
localhost
epgユーザー
epgテーブルのユーザーパスワード
epgユーザーパスワード

mediatomb再起動
$ sudo /etc/init.d/mediatomb restart


mediatombの監視フォルダ設定で録画フォルダを選択する。
本当はinotifyを選択したほうがいいらしいけど
うちのmediatombは対応していないぽい。
JavaScriptをサポートさせた状態でビルドしないといけないっぽい?

ここまでセットアップしてから、epgrecの初回受信リンクをクリックする。
20~50分待ってから、案内されているリンクをクリックして番組表が表示されたら成功。

番組表を最新に保つためのスクリプトをcronに登録する
Ubuntuであれば変更なしでそのままでも動作するらしい。
$ sudo cp /var/www/epgrec/cron.d/getepg /etc/cron.d/.

最初は手動で実行できるか確認しておく
$ /var/www/epgrec/getepg.php
1分くらいまってコマンドが終わればOK
電波の弱いチャンネルがあれば結構時間かかる

※レスポンスがなくても途中でキャンセルしないこと
  動いているのにブレークすると番組表が壊れる可能性あり
※Constant E_ERROR ~という警告が出るが無視していいらしい
 間違えて予約済の定数名で定数をつくろうとしているらしい
 3/27パッチとやらで治るらしいがどこにあるかわからんかった



次に、番組録画の確認。
現時刻でやっている番組を試しに簡易予約し、/var/www/epgrec/videoにファイルが作成されるか確認する。


以上でインストール完了。

最後にパッチを当てておく
現時点で公式パッチは2つ出ている。
$ cd
$ wget "http://sourceforge.jp/frs/redir.php?m=globalbase&f=%2Fepgrec%2F46704%2Fepgrec-20100322fix1.tar.gz" -O epgrec-20100322fix1.tar.gz
$ tar -xvzpf epgrec-20100322fix1.tar.gz
$ cp epgrec-20100322fix1.diff /var/www/epgrec/.
$ cd /var/www/epgrec/
$ cat ./epgrec-20100322fix1.diff | patch -p1
$ rm epgrec-20100322fix1.diff

$ cd
$ wget "http://sourceforge.jp/frs/redir.php?m=keihanna&f=%2Fepgrec%2F46851%2Fepgrec-20100322fix2.tar.gz" -O epgrec-20100322fix2.tar.gz
$ tar -xvzpf epgrec-20100322fix2.tar.gz
$ cp epgrec-20100322fix2.diff /var/www/epgrec/.
$ cd /var/www/epgrec/
$ cat ./epgrec-20100322fix2.diff | patch -p1
$ rm epgrec-20100322fix2.diff


更に野良パッチをあてる

重複を考慮した録画予約アルゴリズムの改善
$ cd
$ wget "http://www.sky.sannet.ne.jp/kn_ishi/epgrec/files/Reservation.class_20110220kn.tar.gz" -O Reservation.class_20110220kn.tar.gz
$ tar -xvzpf Reservation.class_20110220kn.tar.gz
$ cp Reservation.class_20110220kn.diff /var/www/epgrec/.
$ cd /var/www/epgrec/
$ cat ./Reservation.class_20110220kn.diff | patch -p1
$ rm Reservation.class_20110220kn.diff


もう一つ野良パッチ
重複予約時にエラーを出力する

epgrecの記事の2010/06/03追記を参照
最初の野良パッチと競合するので、Keyword.class.phpのパッチだけ切り取って使う。
epgrec-20100322fix20100603_Keyword.class.php.diffという名前で保存
$ cd
$ cp epgrec-20100322fix20100603_Keyword.class.php.diff /var/www/epgrec/.
$ cd /var/www/epgrec/
$ cat ./epgrec-20100322fix20100603_Keyword.class.php.diff | patch
$ rm epgrec-20100322fix20100603_Keyword.class.php.diff


さらにそのログを閲覧するビューワーを
epgrecの記事の2010/09/10追記のソースをもとに作成し
/var/www/epgrec/dupReservLogViewer.phpとして設置する。
%重複予約%の部分を、最初の野良パッチにあわせて%予約が重複しています%に変更しておく。

権限を変更する
$ chown ユーザー dupReservLogViewer.php
$ chgrp グループ dupReservLogViewer.php
$ chmod 755 dupReservLogViewer.php
※ユーザー・グループは他のファイルと同じにしておく


これで完全にインストール完了。
本当にインストールできたらとても楽しそうですね。



参考
http://team2ch.org/blog/?p=1103
http://zeonic.ath.cx/pt2/
http://avalokitesxvara.blog99.fc2.com/blog-entry-177.html
http://www.sky.sannet.ne.jp/kn_ishi/epgrec/epgrec_Reservation.class.html




続く




【アースソフト】地デジチューナー PT3 Rev.A

【アースソフト】地デジチューナー PT3 Rev.A
価格:13,860円(税込、送料別)

UbuntuでPT2(1/5)

PT2というチューナー製品があり、
それがUbuntuに入るそうなので、
インストールしてみるシミュレーションをしました。

まず機器構成。準備編です。


本体はうちにあるUbuntuマシン
⇒Intel Essential mini-ITX BOXD510MO
PCIスロットがひとつあるからそれを使えばいける

そして今回のメインのチューナー
PT2 \21,000(amazon)
今はもう生産中止?

カードリーダー(B-CASカードを読みこませるための)
Linuxで使えるものは限られているらしく
良さそうなのがこれ
SCR3310-NTTCom \2,232(amazon)

B-CASカード
用意するとしたら自宅にあるチューナーのカードを流用でしょうか
もしやると規約違反になりそうです

アンテナケーブル
S-4C-FB~S-5C-FBという種類のケーブルが必要らしい。
アサヒデンキ 楽天市場店という通販サイトで、\100/m+端子が1端\100くらいで売ってて安い!
ケーブル:2重シールド5C同軸ケーブル S5CFB(C)BK
端子:★メール便OK★5C用 取付かんたんF型コネクター FP5E

分配器
全端子電流通過型分配器
というタイプを買うのが普通らしい。そうでない場合は環境によっては制限があるとのこと。
自宅のチューナーと電波を分けることになるだろう、なので必要

ブースター
DXアンテナ BU33L1B \5,374(amazon)
同じく、電波を分けるならブースターが必要だと思われる
これが安くて評価が高かった

アンテナ
日本アンテナ UDF80
この前購入した室内アンテナ



準備としてはこれくらいでしょうか?




2重シールド5C同軸ケーブル S5CFB(C)BK

2重シールド5C同軸ケーブル S5CFB(C)BK
価格:105円(税込、送料別)

2011-08-20

UbuntuでDLNAサーバー(3/3)

前回でひと通りのインストールは完了しました。ここからは追加作業になります。


ffmpegインストール
後述のサムネイル生成、トランスコーディングにffmpegを使います。
ffmpegは様々な形式の動画・音声を処理できるソフトウェアです(?)
本当はソースコードからビルドすべきみたいなのですが、何度やってもエラーとなり、ネットでも失敗している人が多かったのでビルド済のものをapt-getでインストールしました。細かな設定や対応形式の追加ができなさそうですが、とりあえずは問題ありませんでした。(誰かこのへんのこと詳しい人がいたら教えてほしいです・・・3gp形式とかの対応ができませんでした)

Mediubuntuをインストールする
これにより、Ubuntu標準ではついてこないコーデックなどをインストールできる。
インストールする必要があるのかないのかわからんが、とりあえず入れておく。

自分の使用しているUbuntuのバージョンを判別してMedibuntuのソースを追加?
$ sudo wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list

リポジトリ一覧を再読み込み
$ sudo apt-get --quiet update

Medibuntuの公開鍵を追加
$ sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring

リポジトリ一覧を再読み込み
$ sudo apt-get --quiet update

リポジトリ上のソフトウェアをすべてアップデート
$ sudo apt-get upgrade

※ここでsambaのアップグレードが入り、confファイルのマージを行った

コピーライトDVDのコーデックと、その他のコーデックをインストール
$ sudo apt-get install libdvdcss2 non-free-codecs w64codecs
※32bitの場合はw64codecsが別の名前となっている

なんかよくわからんが入れる
sudo apt-get install libavcodec-unstripped-52 libavdevice-unstripped-52 \
libavformat-unstripped-52 libavutil-unstripped-49 libpostproc-unstripped-51 \
libswscale-unstripped-0 libavcodec-unstripped-52

ffmpegをインストールする
$ sudo apt-get install ffmpeg

対応形式を確認する
$ ffmpeg -formats
h264などがあればよし?

※libx264というのはh264コーデックでエンコードするためのffmpeg外部のライブラリ
実際にエンコードを行う場合には、以前なら「-vcodec h264」としていた箇所を、
「-vcodec libx264」とすれば良い。aacも、libfaacとする。らしい。

参考:
http://www.pigumer.gr.jp/wiki/index.php/Ubuntu_10.04%E3%81%ABffmpeg%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6iPod_touch%E7%94%A8%E3%81%AEmp4%E3%82%92%E4%BD%9C%E6%88%90
http://ryubuntu.blogspot.com/2011/05/medibuntu.html
http://komotan.exblog.jp/13306159/
http://mstssk.blogspot.com/2008/12/encode-video-with-h264aac-codecs-by.html
http://www.degi.saloon.jp/archives/6706.html
http://blog.justoneplanet.info/2008/11/12/centos%E3%81%ABffmpeg%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%82%88%E3%81%86/
http://tadachi.txt-nifty.com/blog/2010/01/linuxboxmediato.html


ffmpegインストール(失敗編)
失敗しすぎてあまり記録はとっていませんが、最後にやった作業の概要だけでも。

$ sudo apt-get remove ffmpeg x264 libx264-dev
$ sudo apt-get update
$ sudo apt-get install build-essential checkinstall git libfaac-dev libjack-jackd2-dev \
libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev \
libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html \
yasm zlib1g-dev

※gitだけ「パッケージgitはデータベースには存在しますが、利用できません。」
と出たが、一応すでにインストールされているみたいなのでこのまますすめる。

$ cd
$ git clone git://git.videolan.org/x264
$ cd x264
$ ./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
--fstrans=no --default

その後、確かffmpegのソースコードを取得してmakeしたら、
x264か何かのエラーが出て先に進めなかった。


ffmpegthumbnailerインストール
これをインストールすることにより、PS3などで動画のサムネイルを表示することができます。
一般のDLNAクライアントにはサムネイル表示機能ないのであまり意味ありませんが・・・。

$ sudo apt-get install ffmpeg ffmpegthumbnailer

mediatombの設定を変更
$ sudo vi /etc/mediatomb/config.xml

<ffmpegthumbnailer enabled="no">"yes"

$ sudo /etc/init.d/mediatomb restart


これでps3から見るとサムネイルがが!
ffmpegのインストール失敗に5時間以上は費やしたので苦労した分は嬉しい

トランスコーディング
PS3などの非対応形式があるクライアントのために、サーバー側で展開する処理を有効にします。

$ sudo vi /etc/mediatomb/config.xml

 <transcoding enabled="no">"yes"
<mimetype-profile-mappings>を編集
<transcode mimetype="video/x-flv" using="vlcmpeg"/>
<transcode mimetype="application/ogg" using="vlcmpeg"/>
<transcode mimetype="application/ogg" using="oggflac2raw"/>
<transcode mimetype="audio/x-flac" using="oggflac2raw"/>
をコメントアウト
代わりに
<transcode mimetype="video/flv" using="ffmpeg-video" />
<transcode mimetype="video/x-flv" using="ffmpeg-video" />
<transcode mimetype="video/x-quicktime" using="ffmpeg-video"/>
<transcode mimetype="video/quicktime" using="ffmpeg-video"/>
<transcode mimetype="application/ogg" using="ffmpeg-audio"/>
<transcode mimetype="audio/x-flac" using="ffmpeg-audio"/>
<transcode mimetype="video/x-ms-asf" using="ffmpeg-video"/>
<transcode mimetype="video/x-matroska" using="ffmpeg-video"/>
を追加
 
<profiles・・・の下に
<profile name="audio-generic" enabled="yes" type="external" >
<mimetype>audio/L16</mimetype>
<first-resource>yes</first-resource>
<accept-url>yes</accept-url>
<sample-frequency>44100</sample-frequency>
<audio-channels>2</audio-channels>
<hide-original-resource>yes</hide-original-resource>
<agent command="ffmpeg" arguments="-ac 2 -ar 44100 -y -i %in -f s16be %out"/>
<buffer size="1048576" chunk-size="4096" fill-size="1024"/>
</profile>

<profile name="video-generic" enabled="yes" type="external">
<avi-fourcc-list mode="ignore">
    <fourcc>DX50</fourcc>
    <fourcc>DM4V</fourcc>
    <fourcc>M4S2</fourcc>
</avi-fourcc-list>
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="/etc/mediatomb/mediatomb-transcode-ffmpeg-video" arguments="%in %out"/>
<buffer size="14400000" chunk-size="512000" fill-size="120000"/>
</profile>
を追加 
 
 
トランスコーディングに使うスクリプトを作成する

$ sudo touch /etc/mediatomb/mediatomb-transcode-ffmpeg-video
$ sudo chmod +x /etc/mediatomb/mediatomb-transcode-ffmpeg-video
$ sudo vi /etc/mediatomb/mediatomb-transcode-ffmpeg-video 
 
#!/bin/bash
 
FFMPEG_PATH="/usr/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="4096k"
VIDEO_FRAMERATE="25"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="192k"
AUDIO_SAMPLERATE="44100"
AUDIO_CHANNELS="2"
FORMAT="dvd"
exec "${FFMPEG_PATH}" -threads 4 -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \
-r ${VIDEO_FRAMERATE} -acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} \
-ac ${AUDIO_CHANNELS} -f ${FORMAT} - > "${OUTPUT}" 2>/dev/null


※-threads 4 はCPU搭載数が4なので4にしてみた
※CPU搭載数は $ cat /proc/cpuinfo | grep processor で確認
 
$ sudo /etc/init.d/mediatomb restart
これで完了!PS3で見てみると、今まで未対応の形式と言われていたファイルが閲覧できるようになりました。 



UbuntuでDLNAサーバー(2/3)

ここから具体的なインストールです。

1.MeidaTombインストール

認証キーを取得(?)
$ wget -q http://apt.mediatomb.cc/key.asc -O- | sudo apt-key add -

mediatombのリポジトリを追加(?)
$ sudo vi /etc/apt/sources.list.d/mediatomb.list
deb http://apt.mediatomb.cc/ etch main

mediatombのインストール
$ sudo apt-get update
$ sudo apt-get install mediatomb

2.MeidaTomb自動起動化
$ sudo vi /etc/default/mediatomb

NO_START="no"""


2.設定ファイル編集
最初にバックアップをとっておく
$ sudo cp -p /etc/mediatomb/config.xml /etc/mediatomb/config.xml.org

編集する(※アヤシイので注意)
$ sudo vi /etc/mediatomb/config.xml

<server>の下を変更
<protocolInfo extend="no"/>"yes"

<import hidden-files="no">の下に追加
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>CP932</metadata-charset>


<extension-mimetype ignore-unknown="no">の下に追加

<map from="jpg" to="image/jpeg"/>
<map from="jpeg" to="image/jpeg"/>
<map from="m4v" to="video/mp4"/>
<map from="mp4" to="video/mp4"/>
<map from="m4a" to="audio/mp4"/>
<map from="mpg" to="video/mpeg"/>
<map from="mpeg" to="video/mpeg"/>
<map from="avi" to="video/divx"/>
<map from="divx" to="video/divx"/>
<map from="asf" to="video/x-ms-wmv"/>
<map from="ts" to="video/mpeg"/>
<map from="mts" to="video/mpeg"/>
<map from="m2ts" to="video/mpeg"/>
<map from="mov" to="video/x-quicktime"/>
<map from="vob" to="video/mpeg"/>
<map from="oma" to="audio/x-sony-oma"/>
<map from="aa3" to="audio/x-sony-oma"/>

<mimetype-contenttype>の下に追加

<treat mimetype="video/quicktime" as="mov"/>
<treat mimetype="video/x-quicktime" as="mov"/>
サーバー再起動
$ sudo /etc/init.d/mediatomb restart

これでログにエラーが出力されていなければOKです
$ more /var/log/mediatomb.log


3.公開ディレクトリ作成

mediaディレクトリ作成
※アクセス権がよくわからないので弱めに設定しています

$ sudo mkdir /home/media
$ sudo chown mediatomb /home/media
$ sudo chmod 775 /home/media

いろいろ試したところ、公開するフォルダ・ファイルにはotherに対してR権限が必要っぽいです。
/home/mediaは今回はsambaで公開することにしたので、
/etc/samba/smb.confに/home/mediaの記述をして、"create mask"と"directory mask"をそれぞれ755にしました。

mediaフォルダにwindowsで再生できる動画・画像ファイルなんかをコピーしておきます。


4.公開ディレクトリ指定
今回はWindows機のブラウザを使って指定します。
マイネットワークに"MediaTomb"が表示されているのでそれを右クリックして"デバイスのWEBページを表示"を選択。そうするとブラウザが立ち上がってMediaTombの設定画面に入ります。

>Filesystemクリック
>/home/mediaディレクトリをクリックして右上の"○に+"のボタンをクリック
※この時パーミッションエラーが出る場合はmediaディレクトリの権限がおかしい

>Scan設定をする
Scan Mode: Timed
Scan Level: Full
recursiveチェック

>setボタン

※アクセス権の変更はscanされ直すまで反映されないっぽいので
試行錯誤する際はいったん公開を削除して追加しなおしたほうが早い

>Databaseクリック
追加したmediaフォルダを含むツリーが表示されていればOK。
mediaフォルダにファイルを置いたファイルが右ペインに表示され、かつ、クリックして404エラーが表示されなければOKです。404が表示されるようであればアクセス権に問題があるでしょう。いちど777にでもしてみて、mediaフォルダの登録を削除、再度Filesystemから登録して確認してみましょう。


以上でインストール完了です。



5.確認(Windows)
今回はRDLNAを使います。
RDLNAを立ち上げ「接続先」にUbuntuサーバーのホスト名かIPを入力し、「接続」。
ツリーが表示されたら成功です。

この時点でRDLNAにVLCパスを指定しておけば動画再生も可能です。
先ほどmediaフォルダに入れた動画ファイルを再生してみましょう。

RDLNAはVLCが対応したファイルのみが再生可能なので、例えば画像なんかは一旦ダウンロードしないと見られません。こういうファイルはWindows Media Playerで閲覧します。
というかそもそもsambaで公開しているので共有フォルダから(ry

ちなみにうちの環境ではMediaTombのWEBUIはポート49152でした。RDLNAも49152に対して通信をしようとしていると思います。もしポートが違う場合はprofile.iniを変更すればOKです。
RDLNAを一度起動して接続に失敗したあと終了させると、同じフォルダにprofile.iniというファイルが作成されるはずです。
通信が成功した後に保存されるフォーマットは↓
RDHOST=ホスト名
RDMAC=XX:XX:XX:XX:XX:XX  MACアドレス
VLCPATH=C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
RDPORT=49152
となっています。失敗した場合はちょっと足りませんので設定変更ができません。
なので↑のフォーマットをprofile.iniに貼りつけ、RDHOST/RDMAC/RDPORTを今回の環境に合わせればポート指定して通信できます。


5.確認(MAC)

VLCをインストールして立ち上げます。
メニューのメディア->サービスの検出で"Universal Plug'n'Play"をチェック。
これでプレイリストに?が現れますので、その左の三角ボタンを押して展開すると、"MediaTomb"というサーバーが見えます。
先ほどmediaフォルダに入れた動画ファイルを再生してみましょう。
まぁこちらも、共有フォルダから(ry

6.確認(PS3)

PS3のXBM(?)のビデオに"MediaTomb"というサーバーが見えます。
これを辿ればmediaフォルダがあり、動画ファイルを再生できます。
ただしPS3は再生できる形式に制限がありますので、その場合は「非対応の形式です」?のようなアイコンが現れることになります。


参考:
http://mediatomb.cc/
http://mediatomb.cc/pages/documentation
http://www.ps3wiki.net/index.php?%E7%8E%84%E7%AE%B1PRO%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FPS3%E7%94%A8DLNA%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86
http://www.ps3wiki.net/index.php?%E7%8E%84%E7%AE%B1PRO%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FPS3%E7%94%A8DLNA%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86