SmallStyle


2011-05-04

_ ネットワークが有効になったら pogoplugfs を起動する

pogoplugfs

先日の日記で,pogoplugfs をスタートアップに登録すれば起動時に pogoplug がドライブとして mount されると書いたけど,これはデスクトップ PC で有線 LAN 環境でのこと.これがノート PC などで無線 LAN 環境になると,スタートアップ時にはまだネットワークに接続できていないため,pogoplugfs の起動に失敗してしまいました.必要なときにコマンドラインで呼び出すなり,起動用のスクリプトを用意してもいいのですが,ネットワークがアクティブになったら自動的に mount されて利用できるほうがやっぱりいい.うまく呼び出す方法として何がいいか.

autofs とかどうかなと思ったけど,これはネットワークに繋がっているかどうかまでは見ていなさそう.特定のフォルダへのアクセスがあったときに自動的に mount する 仕組みは使えそうだけど.それよりも autofs から pogoplugfs の呼び出しがうまくできなさそうだったので却下.

次に考えたのがネットワークの起動時にスクリプトが呼び出せる /etc/network/if-up.d 配下に起動スクリプトを置くこと.解決策としてはもっともいいものだと思ったけど,スクリプトの起動が root ユーザーとなってしまっているからか,マウントはできるけどファイルシステムにアクセスできない.ログインユーザー名の取得も環境変数などにはなさそうだったので,これも却下.

もうひとつ思いついたのは pogoplug と同じようなストレージ系のアプリケーションとして,Dropbox や UbuntuOne のような nautilus と連携させる方法.nautilus actions などでコンテキストメニューなどを独自に追加できるようだけど,フォルダアクセス時にマウントするとかそういった類のことはできなさそうなので却下.

ここまでやって,やっぱり無理か,手動でコマンドたたくなりするかなと思ったのですが,if-up.d に配置するスクリプトで,現在 mount しているファイルシステムから gvfs-fuse-daemon を探して,そこから user をひっぱってはこれないかと思いついた.ということで,ひとまずなんとか動いた感じの起動スクリプトが以下.ちなみに,このスクリプトは Ubuntu 11.04 の環境で動作することを確認しています.

まずはネットワークがアクティブになったときに呼び出されるスクリプト./etc/network/if-up.d において利用することを想定.

#!/bin/sh

[ "$IFACE" != "lo" ] || exit 0

mount|while read fs on mp type fstype opts
do
  if echo $fs | grep -q "gvfs-fuse-daemon"; then
    username=`echo $opts | sed -E "s/.*user=([^,]+).*\)/\1/g"`
    if [ "$username" ]; then
      sudo -u "$username" sh -c "pogoplugfs --mountpoint /media/pogoplug &"
    fi
  fi
done

ネットワークが停止するときは umount する.こちらは /etc/network/if-down.d において利用する.

#!/bin/sh

[ "$IFACE" != "lo" ] || exit 0

mount | while read fs on mp type fstype opts
do
  if [ "$mp" = "/media/pogoplug" ];then
    umount /media/pogoplug
  fi
done

上記のコードは gist でも参照できます.

これでネットワークの接続,切断時に,pogoplugfs の mount や unmount を実行できるようになりました.ユーザーをどこからとってくるか,who コマンドとかでもよかったのかもしれませんが,他にいい方法はあるのかな.ひとまずより快適に pogoplug を利用できる環境にはなりました.

Pogoplug ブラック POGO-P25

Cloud Engines
¥ 3,480


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|