2014年9月28日日曜日

Raspberry Piセットアップ日記(13)UFW BLOCKメッセージ


気づいたら、/var/log/messagesに以下のようなメッセージが頻発していた。(1分に1回)

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
Sep 28 08:09:20 raspberrypi kernel: [1807898.640777] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

どうもブロードバンドルーターからの何らかのブロードキャストメッセージをブロックしている模様。
denyすることでログに吐かなくなるようだが、せっかくなのでどんなメッセージが飛んでいるのか
解析してみる。

1、syslogの見方

●参考
Linux LPIC - /var/log/messages
システムログの読み方を理解しよう
Raspberry Pi as a Syslog Server



以下のような読み方になるもよう

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=..
+- timestamp -+ +- host --+ +-src-+ +-- msg body ..

カーネルが、[1807838...というメッセージを出力している、ということになる
"[1807838.540815]"という表記は、なんとなくタイムスタンプ(の別表現)のような感じなので、意味のある情報は
[UFW BLOCK]..以降だろう。

2、ufwの動作確認

ここで一度ufwの動作設定がどうなっているのかを確認する
ufwの動作状態確認

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
...以下略

3、UFW BLOCK以降のログの見方

[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁(2)> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

INは入力デバイスだろう。
OUTはoutgoingのメッセージではないので出ないのだろう。
MACは通常のMACアドレスにしては長い気がするのと、最後の2オクテットの値が違うのでただのMACアドレスではなさそうだが、とりあえず保留。
SRC以降は、IPヘッダの情報くさい。

IPパケットの基本構造

SRC=送信元IP ルータIP
DST=宛先IP 224.0.0.1
LEN=データグラム長、IPパケット全体の大きさ 32 理論的なIPパケットの最小は20bytes
TOS=サービスタイプ 0x00、指定なし
PREC=? 0xA0 とりあえず保留
TTL=寿命 1
ID=IPフラグメント(分割)が起こった時の識別子、通常ランダム 同じフラグメント(分割)されたパケットは同じ値になる 2006
PROTO=プロトコル番号 2 /etc/protocolsファイルによると「igmp(Internet Group Management)」

どうも、IGMPパケットのようだ。

4、IGMPとは?
Internet Group Management Protocol

Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、
マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。

LEN=32であることから、おそらくMembership Queryパケットである可能性が高い。
Membership Query (Type 0x11)
ホストがマルチキャストのグループへ参加するときにルータに送信される。参加しているグループの最新の状態を知りたいときにも送信される。

ただ、内容的には「ホストからルータへ投げられるパケット」であり、
今回のように「ルータからブロードキャストへ」投げられるパケットでは無い様に見受けられるので、解せない。

一方こちらでは
マルチキャスト編<第2回> IGMPを知る

どうも「グループの維持」のために、クエリパケットを60秒に1回投げられるらしい。
意味的にはルータが投げてもおかしくない(というかグループを管理するのはルータらしいのでルータが投げるのが正論だろう)、おそらくこいつだろう。

4、解決策
結論として、IGMPをallowにしてみようと思う。

●参考
Ubuntu で ufw を利用して ping を拒否する設定
KVMのインストールと設定
Question about UFW log entries

IGMPプロトコルそのものに設定することはできなさそう。
公式サイトでバグ報告上がってるがwishlistになっており
マルチキャスト設定で対応する旨書かれている

https://bugs.launchpad.net/ufw/+bug/946322


というわけで、以下のように実行し、ログが増えないことを確認して終了。

$ sudo ufw allow in from ルータIP to 224.0.0.0/8 
Rule added
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
..中略..
224.0.0.0/8                ALLOW IN    ルータIP

5、おまけ

ufwのヘルプ
$ ufw help


2014年9月23日火曜日

Raspberry Piセットアップ日記(12)repository.wolfram.com


●repository.wolfram.com
apt-updateするとrepository.wolfram.comがいないと言われ怒られる。

$ sudo apt-get update
...略...
ヒット http://mirrordirector.raspbian.org wheezy/rpi armhf Packages            
エラー http://repository.wolfram.com stable Release.gpg                        
  repository.wolfram.com:80 (140.177.204.60) へ接続できませんでした。 - connect (113: ホストへの経路がありません)
無視 http://repository.wolfram.com stable Release                              
エラー http://repository.wolfram.com stable/non-free armhf Packages            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja_JP         
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-en            
  repository.wolfram.com:http へ接続できません:
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-ja_JP             
...略...

raspberry piのフォーラムによると、最新のrespbianディストリではrepository.wolfram.comは
含まれていないとのこと
http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=87501

workaroundに従い、wolfram.listをmv

$ cd /etc/apt/sources.list.d/
$ sudo mv wolfram.list wolfram.list.20140923bk1
$ sudo apt-get update
ヒット http://raspberrypi.collabora.com wheezy Release.gpg
ヒット http://mirrordirector.raspbian.org wheezy Release.gpg
...略...
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-en
パッケージリストを読み込んでいます... 完了
N: ディレクトリ '/etc/apt/sources.list.d/' の 'wolfram.list.20140923bk1' が無効なファイル名拡張子を持っているため、無視します

余計なメッセージが出ているようだが、いったん気にしないことにする

Raspberry Piセットアップ日記(11)自動更新

パッチの自動更新

●参考
apt-get/自動アップデートがしたい

cron-apt で自動アップデート

●手順
1.cron-aptをインストール

$ sudo apt-get install cron-apt

2./etc/cron-apt/config を編集

インストール直後のファイルには何もかかれてないので、
/usr/share/doc/cron-apt/README.gzを参考に記述する。

# Configuration for cron-apt. For further information about the possible
# configuration settings see /usr/share/doc/cron-apt/README.gz.

APTCOMMAND=/usr/bin/apt-get
OPTIONS="-o quiet=1"
MAILON="changes"
MAILTO="myaddress@hogehoge.com"

3./etc/cron-apt/action.d/3-download を編集

-dオプションを削る

autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true

4./etc/cron.d/cron-apt を編集

週1実行に設定

0 4     * * thu root    test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt

5.動作確認

$ sudo /usr/sbin/cron-apt

2014年9月14日日曜日

MySQLのバックアップ

mysqlのバックアップにはmysqldumpを使うことにした

●参考
mysqldump に必要な権限
http://blog.enjoitech.jp/article/200

●権限設定
create user 'dbuser'@'localhost';
grant file on *.* to 'dbuser'@'localhost';
grant select,lock tables,show view on dbname.* to 'dbuser'@'localhost';
grant select on mysql.proc to 'dbuser'@'localhost';

●以下のようなシェルを作成
ファイル名にタイムスタンプを持たせ世代管理
なおかつ古いファイルは削除するようにした
#!/bin/bash

dttm=`date +%Y%m%d_%H%M%S`
filename=mydb_${dttm}.dmp.gz
outdir=~/out/dir/to/bkup/

echo mysqldump to ${outdir}/${filename} start

mysqldump mydb | gzip >${outdir}/${filename}

echo mysqldump end

echo delete old archive start
list=`find ${outdir} -mtime +30`
rm -v -f ${list}
echo delete old archive end

2014年9月6日土曜日

Raspberry Piセットアップ日記(10)バックアップ

●バックアップ
いろいろ調べた結果ddを使うことにする
(dumpを使おうと思ったが、raspbianには標準では入っていないようなので避けてみた)

実験
$ sudo dd if=/dev/root of=/mnt/usbdisk1/rbp-backup/rootdd.img
28243968+0 レコード入力
28243968+0 レコード出力
14460911616 バイト (14 GB) コピーされました、 6889.95 秒、 2.1 MB/秒

6800秒=約2時間か。ddは空き領域を含むすべてのブロックをダンプする(はず)なので、
まあ遅いというか無駄が多いが仕方がないか。

最終的には以下のようなシェルをcronに仕込んで終了。

#!/bin/bash

#sudo dd if=/dev/root of=/mnt/usbdisk1/rbp-backup/rootdd.img
sudo dd bs=1M if=/dev/root | gzip >/mnt/usbdisk1/rbp-backup/rootdd.img.gz

Androidアプリ開発 - 電卓(1)

●開発環境構築
android studioを使用
https://developer.android.com/sdk/installing/studio.html

インストール後、SDKマネージャーから
・必要なバージョンのSDK
・Intel用のエミュレーションアクセラレータ
を追加インストール


仮想マシンにGenymotionを使用
http://qiita.com/Sam/items/8d551f575b617fa0be7e

とりあえず、hello worldを作ってみた。

電卓はとりあえずガワだけ。
作り方はこの辺を参考に。
http://www.macs123.dtdns.net/algo/android/android009.html