このブログを検索

2011-09-09

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-27

UPnP(仮)

UPNPとは
ユニバーサルプラグ&プレイ(Universal Plug & Play)の略。Ethernetや無線LAN、IEEE1394(over IP)ネットワーク上にある様々な機器を「接続するだけで」ネットワーク上での利用を可能とする技術の総称。

基本的には以下の機能の総称である
IPアドレス割り当て
DHCP、およびプライベートアドレスの自動割り当て技術が用いられる
名前解決
DNS、およびIPブロードキャストによる。
デバイスの発見と機能の把握
SSDP(Simple Service Discover Protocol)と呼ばれるプロトコルを用い、IPブロードキャストでデバイス同士のマッチングを行う。またLDAPサーバがある場合は、それによりネットワーク上にある機器の管理を行うこともできる



UPnPのNAT越えの仕組み

Q.
通常、外部からルータに届いたパケットはNAT設定にしたがってプライベートIPへ変換されると理解しているのですが、UPnP対応ルータとWinXP使用環境下ではポート解放していなくても外部からのアクセスが可能と聞きます。
その仕組みがどうしても理解出来ません。
ルータに届くパケットには宛先としてグローバルIPとポート番号が記述されているのが普通と思いますが、ルータに複数のクライアントがぶら下がっているとして一体どうやって目的のプライベートIPアドレスを探し出してパケットを転送するのでしょうか?

A.
UPnP環境ではまず、ルーターがブロードキャストで、UPnP対応である自分の存在をネットワーク全体に知らせます。(TCP Monitor Plusあたりのソフトで見るとわかります。ルーターのアドレスから、頻繁にブロードキャストをしています。)

そして、そのパケットを受け取ったUPnP対応のOS(WinXP等)は、自分の上で動いている、外部からのアクセスを受ける必要のあるソフト(MSN Messenger等)を検出し、自分のLAN用IPアドレスとともにUPnPルーターに通知します。

こうすることで、ルーターはWANの特定ポート宛に入ってきたトラフィックを、LAN内の特定のマシンの特定ポートに転送する仕組みをつくり、外部からのアクセスがLAN内のマシンで受けられるようになります。
本来なら手動でするはずの“ポート開け”の作業を、PCのOSとルーターが協力して、自動的にできるようにした仕組みがUPnPです。




WindowsMessengerがルーターを介すと使えない理由
(古い情報?)
 Windows Messengerでは、IPアドレスやポート番号をパケットのヘッダーだけでなく、データ本体部分にも入れ、これを使って通信を行う。ルーターはヘッダー部分しかグローバルIPに変換しない。そのため、受け取った相手が返信しようとしても、返信先が(データ本体部分にある)プライベートIPなので、通信ができなくなってしまう。

 この問題を解決するのが、ユニバーサルプラグアンドプレイ(UPnP)。
ルーターがUPnPに対応していれば、アプリケーションからルーターのグローバルIPを問い合わせることができる。送信データ内にあらかじめこのIPを入れることで、Windows Messengerは通信できるようになる


2011-08-24

XBOX360で固定IPにできないとき。

XBOX360で固定IPでのみネットワークテストが失敗することがあります。
エラーメッセージとしては
エラー: NAT タイプはストリクト (またはモデレイト)です
http://support.xbox.com/ja-jp/pages/xbox-360/troubleshoot/kb/error-your-nat-type-strict.aspx?kbid=979000
といったもの。

検索してみるとポートをあけるだとかUPnPを有効にするだとか書いていますが。それらを全部やっていたのにできない場合。
→ルーターのUPnP NAT情報消去
これで解決しました。めっちゃじかんかかった・・・。