もくじ

Firefoxをcifs(smb)マウントされたホームで使う(2010/4/27)

概要

FirefoxをDebianでスタンドアロンのコンピュータで使用するのはまったく問題ないが、ユーザーホームをcifs(smb)マウントされた環境で使おうとすると戻る・進むボタンが使えなくなりアドレスを記入しての移動もできないなど様々な問題が起こる。

これはFirefoxが内部で利用しているsqliteがファイルをロックできない環境では機能しなくなることが原因。firefox(iceweasel)はプロファイルをユーザーホームに作るが、cifs(smb)マウントをしているのでlockのやり方が異なるらしい。firefoxがsqliteを使うようになった3.0.xあたりからこのトラブルが生じる様になった。

mount.cifsにnobrlオプションを加えることで一応解決した。

Firefoxの戻る・進むボタンが使えない

戻る・進むボタンが押せない。ホームのボタンも押せない。URLを記入しても移動できない(従ってabout:configは使えない)。ページ内のリンクをたどれるがアドレスバーにアドレスが出ない。履歴が使えない。設定の詳細メニューでクラッシュする。1年前の作業ではウインドウの大きさが最小になる(ツールバーの下の表示部分がほとんどなくすぐにステータスバーがくる)という症状もあった。

実習室のDebianは2007年に導入した時はtesting状態にあったLennyというバージョン。Firefoxのバージョンは 2.0.0.6でこの時は問題がなかった。testingは不具合が見つかったり、パッケージのバージョンが上がったりするので随時入れ替えていく予定だったがFirefoxが3.0.6になったあたりでこの症状となり更新が止まっている。今回はその再々挑戦である。

試行錯誤

DebianではFirefoxをIceweaselと呼び、アイコンのデザインも別のものになっている。

端末から -ProfileManager オプションをつけて起動するとプロファイルマネージャ経由で起動する。

Iceweasel -ProfileManager 

ここで新しいプロファイルを作成するとデフォルト設定のプロファイルを作ることができる。これで新しいプロファイルをホームに作っても同じ症状だが、/tmp/firefox などローカルなHDDで構成される場所(もちろんユーザーが書き込み権限を持つ場所)にすると問題は解消する。

Firefoxはユーザーホームに .mozilla/firefox/ というフォルダ(Linuxでは.で始まるフォルダ・ファイルは隠しファイルとなる)の中に profile.ini というファイルをおき、そこにプロファイルを格納する場所を記載してある。デフォルトで1つプロファイルが作られるが、それは profile.ini とおなじ場所に乱数で始まるフォルダに格納される。

Linuxではユーザーの書き込み可能な場所はユーザーホームと/tmpしかない。だからCacheもこのプロファイル内に存在する。ユーザーホームをサーバーに置きcifs(smb)やnfsでマウントしている環境ではネットワークを通してgetしたウェブページのデータのキャッシュを、再びネットワークを通してファイルサーバーに書き込んでいることになり、ちょっと不本意ではある。

ウェブ検索はこの様な時に頼りになる情報源だ。cifs(smb)でマウントしたホームを使うのはあまり一般的ではないので、より一般的なnfsマウントでさがすと少し手がかりがあった(firefox nfs back forward で検索)。「Mozilla-Launcher Failed on NFS-Mounted Home Directories」とか「Firefox 3.0.3 not working when profile is over a NFSv4 share.」などよくあることのようだ。

ファイルのlock機構がからんでいることが見えてきた。確かに別のPCで動いているFirefoxがサーバー上の同じキャッシュなどを使うのはトラブルの元だろう。それでも1つ目のFirefoxが起動しないということはないはず。

lockとの関係で調べるうち、sqliteがlockができない環境では動かないということ、Firefoxが3.0.xあたりでsqliteを内部で使用していること、nfsではlockの設定で回避できることが分かってきた。

mount.cifsのnobrlで解決

can not run sqlite on directory whitch can not lock files ということがわかって来たので、sqliteとsmb,cifsマウントの組み合わせで検索するとかなり引っかかってきた。

cannot use sqlite3 on cifs mount (Debian のバグレポートより)

Just to follow up here: this current problem seems to be associated with CIFS's byte-range locking, which behaves in unexpected ways. If i use the "nobrl" option during the CIFS mount, i can cleanly use sqlite (this comes at the cost of not having advisory locks propagate across the network, though, so it is probably not an acceptable workaround to every situation). I reported the bug against debian's smbfs package, if you want to follow it there: http://bugs.debian.org/483507 <http://bugs.debian.org/483507>

副作用があるかもしれないが、このオプションだけでいいのならば、クライアント側のpam_mount.conf.xmlに指定すればよい。今回書き加えた所とデフォルトから変えているところのみ記載。

<!-- adachi default
<smbmount>smbmount //%(SERVER)/%(VOLUME) %(MNTPT) -o
    "username=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</smbmount>
-->
<!-- adachi -->
<smbmount>mount.cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o
    "nobrl,user=%(USER)%(before=\",\" OPTIONS)"</smbmount>
<!-- adachi -->
<smbumount>umount.cifs -l %(MNTPT)</smbumount>

<!-- adachi -->
<volume user="*" fstype="smbfs" server="jonah" 
        path="%(USER)" mountpoint="/home/%(USER)" />

一度ログアウトして、再マウントさせると、Firefox(Iceweasel)は正常に動き出した。

マウントコマンドの表示は

brfore

//jonah/c1a09 on /home/c1a09 type cifs (rw,mand)

after

//jonah/c1a09 on /home/c1a09 type cifs (rw)

前よりも条件を減らしたように見える。

The nobrl option

nobrlで探せば他にも情報は見つかる。No Byte Range Lockということらしい。例によってマニュアルには一応書いてはあるのね。

NettoWa-Ku.Netより

From the mount.cifs man page: "nobrl" Do not send byte range lock requests to the server. This is necessary for certain applications that break with cifs style mandatory byte range locks (and most cifs servers do not yet support requesting advisory byte range locks).

Added the option to my pam_mount.conf.xml and Firefox 3 and Evolution now run happily from my CIFS mounted home directory. With FF3 it was SQLite that was being tiresome and with Evolution I had to symlink my outgoing mail directory to a directory on my harddrive. Both solved with the nobrl option.

今後の課題

サーバーの方にlockをかけたと通知しないので、同一ユーザーが複数のログインを同時にして(これはUNIXの習慣上よくあることなので許したい)おなじファイルにアクセスする場合、問題になることが考えられる。

マウントオプションはFirefoxのプロファイルだけでなくユーザーホーム全体に及ぶので注意する必要がある。

いままでのrw,mandで問題がなかったわけではない。エディタで内容を書き換えたあと保存しようとすると「他のソフトで書き換えられている」と警告があったり、javacでコンパイルしただけなのに「他のソフトが使用中」などと警告が出たり。このような警告は出なくなるのではないかと予想される。


Linuxクライアント/サーバ運用
聖愛中学高等学校
安達 順一
http://www.seiai.ed.jp/
2010-05-02