2009年9月29日火曜日

halevtでマウント

仕事が暇になっちゃったので、久々にメモ

リムーバブルメディアのマウントについて色々みてみた。

S101ではpcmanfmファイラを使って、USBメモリとかSDカードをマウントしてた。

デスクトップで使っている場合、gnomeやkdeがいろいろと面倒をみてくれるし、それに乗っかってるのが楽だけれど、netbookのS101で遊ぶには、ファイラに依存したり、そもそも、Xを立ち上げてるかに関係なく、リムーバブルメディアを差したらマウントしてくれる方が便利。

ここで、整理しておくことは、システムが機器を自動的に認識する仕組みとマウントをする仕組みは別々に考えること。その上で、リムーバブルメディアのマウントについて見てみると次の様な方法がありそう。

(1)udev
 udevはデバイスファイルの作成とモジュールのロードを担当する仕組み。
 オプションの機能で外部プログラム呼び出しが出来るので、
 これでマウントをする事ができるかもしれない。

(2)hal
 halはホットプラグに関連して、デバイスの情報データベースを持って
 整理し、 これを利用してアプリケーションにデバイスの追加や削除を
 含んだ情報配信をしている。
 hal自体にオートマウントに機能は無い。(はず)
 主にX上のデスクトップアプリケーション(主にファイラ)が
 halからのD-busメッセージを経由して、自動的にマウントを行う。

(3)autofs
 autofsはそれ自体が、自動的にマウント制御をするもの。

(4)ivman
 halとD-busを利用したボリュームマネージャだったが、2007年頃から
 開発が停滞。halのアップデートに伴い、pathcが必要。
 archではAURのメンテナも撤退?
 現在、適切に動くかどうか不明(将来的にはオブソレート?)

(5)halevt
 ivmanの後継的位置づけ(?)

halを使わないなら、udevのみでも出来そうな気もする。
autofsはリムーバブルメディアよりも、ネットワークファイルシステムの
自動マウントに昔から使われている仕組みらしい。
で、結局うちで試してみたのはhalevt。

ホームページ:http://www.nongnu.org/halevt/
AURのページ:http://aur.archlinux.org/packages.php?ID=24244

ドキュメントとしては上のホームページに設定の仕方が載っているが、元のソースファイル農中にあるREADMEも参照すると分かりやすい。AURのパッケージをインストールするとその辺のドキュメントはインストールされないので、別途拾ってきて見る方がお勧め。

halevtはhalを利用してデバイスの検知を契機に、任意のアクションを起こす仕組みを提供してくれる。

とりあえず、使いたい場合は以下の設定をする。

1.パッケージインストール
 archではAURにあるので、パッケージ「halevt」をyaourt等でインストールする。

2.設定ファイル
サンプルの設定ファイルが/usr/share/halevt/examples/以下に配置されている。
examplesディレクトリにあるautomatic_sync_mount.xmlを
/etc/halevt/ディレクトリに置く

設定ファイル内のhalevt-mountの-mを000で読み書き実行全て可能

3.マウントの権限
/etc/PolicyKit/PolicyKit.confに以下を追加。

<config version="0.1">
<match user="halevt">
<return result="yes"/>
</match>
</config>


4.デーモン
halevtはhalを利用するので、rc.confのDAEMON配列にhalとhalevtを加える。

以上の設定をしておけば、とりあえず、差したらマウントしてくれる。

その他の方法としては、上の様にシステム側でのデーモンとして動かさないで、ユーザー権限で動かすこともできる。設定ファイルを書いていく上でのとっかかりとして押さえておくオプションは以下のもの。

-f オプションでフォアグラウンドで動く。
-i オプションでモニタモードで動く。
-c オプションで設定ファイルを指定する。

自分で設定ファイルhogehogeを書いて試すときは、次のコマンドでhalevtからの出力も見ることが出きるので調整しやすい。


$ halevt -f -c hogehoge


-cオプションが無い場合、以下の順番でディレクトリを検索。
(aurパッケージの場合)

$HOME/.halevt/
/etc/halevt/
/usr/share/halevt

これらのディレクトリの中で、.xmlで終わるファイルを設定ファイルと
みなして読み込んでくれる。
(同一ファイル名の場合、順序が先のディレクトリにあるものが優先)

xmlの事はあまり詳しくないけれど、設定の基本はmatch要素でデバイスを
マッチさせてそのターゲットについて、OnInit(halevt立ち上げ時),
Insertion(デバイス認識時),Removal(デバイス削除時)等に、
対応したコマンドラインを設定するらしい。

halevtパッケージにはhal経由でマウントしてくれるhalevt-mount等の
ユティリティが同梱していてこれを利用する。hal経由のマウントについては、
先の設定で紹介したように権限の問題があるので、ユーザー権限で利用する
場合は/etc/PolicyKit/PolicyKit.confにユーザーを登録する必要がある。

その他の注意というか勉強TODOとしては、halが管理する情報のコンフィグ
の仕方の情報ポインタがよく分からない、、
mountポイントの名前付けルール等はhal側の設定になってると思う。
権限の扱いに付いても、イマイチ、、、

自動でマウントは出きるようになった。
しかし、USBメモリを抜く前にumountすべきなんだろうけど、
どういう作法が良いのかよくわからない。
シンクロはしてるようなので、ファイル扱った後、
ちゃんと閉じて、暫くしたら気にせず、ぶっこ抜いとけばいいのかな?w

後はぁ、、halevtとgnome上のファイラとか機能がかぶってるとどうなるのか不明。
まぁ、そのときはhalevtデーモン切ればいいか。。