FreeBSDのUTF-8化
- 公開日: 2012/01/20(金) 07:17[JST]
以前書いたように、うちのFreeBSDクライアント機(今このエントリを書いているPC)は、Sambaサーバとの相性からエンコーディングをEUC-JPにしている訳だが、先日ウィンドウマネージャのfluxboxを更新したところ不具合が発生した。具体的には、エンコーディングがEUC-JPの場合、メニュー中の二バイト文字の文字列が半分しか表示され無い。例えば本当は「インターネット」と表示されてほしいのに、「インター」しか表示され無い。
と、いうことで、文字エンコーディングをUTF-8に変えようと思った次第。
ここでネックになるのが、「どうやったらSambaサーバのボリュームをマウントして日本語ファイル名をちゃんと表示できるようにするか」という問題。ぐぐってみると、「fusefs-smbnetfs」を使うと良さそう、ということだ。fusefsというのは、ユーザ権限で動作させることができるファイルシステムで、サブシステムと組み合わせることによって様々なボリューム(smbとかntfsとか)をマウントできるもののようだ。
で、入れてみたけどうちの環境ではOUT。fusefs-smbnetfsというのは、Windowsでいうところの「ネットワークコンピュータ」相当のものを特定のディレクトリにマウントするものらしく、Sambaサーバが自らの存在をブロードキャストしていないとサーバにアクセスすることが出来無いようだ。うちのメインのファイルサーバはJailの下で動いているため、自らの存在をブロードキャストしていない(Samba的に言うと、nmbdが動作していない)為だ。
じゃあどうしよう、ということで、fusefsの別のサブシステムであるsshfsを試してみることにする。これは、その名のとおりsshで接続したサーバの任意のディレクトリをマウントする、というものだ。
sshfsのインストールは、portsの sysutils/fusefs-sshfs からインストールする。設定は、ブログ「ゴミ箱の中の雑記帳」に書かれている通りにやってみた。なお、下記の1~7はrootで実行のこと。
/etc/rc.conf に fusefs_enable="YES" を追加
/usr/local/etc/rc.d/fusefs start 実行
/dev/fuse* に一般ユーザからアクセスできるように /etc/devfs.rules に下記を追加
[devfsrules_world_writable=10] add path 'fuse*' mode 666
/etc/rc.conf に devfs_system_ruleset="devfsrules_world_writable" を追加
/etc/rc.d/devfs restart 実行
sysctl vfs.usermount=1 実行
/etc//sysctl.conf に vfs.usermount=1 を追加
これで、コマンド sshfs でsshサーバの任意のディレクトリをマウント出来るようになった。典型的なsshfsのコマンドは下記の通り。
sshfs ユーザ名@SSHサーバ名:マウントするSSHサーバのフォルダ マウントポイント -o idmap=user
さて、後はパスフレーズの入力を省略出来るといいわけだが、 gnome-keyring を使えばよいのかな?
(追記)
別にパスフレーズの入力がめんどい、というわけでは(あまり)ないわけで、それよりも、mount.appなんかのGUIアプリから間接的にssh-fs→sshを起動したときにちゃんとパスフレーズを入力できる状態にできることが肝要。それでパスフレーズの入力頻度を下げられるなら言うことなし。
ちと調べてみたところでは、環境変数 SSH_ASKPATH に適切なパスワード/パスフレーズ入力プログラム(例えばgnome-ssh-askpass)を設定すれば前者はOK。後者は ssh-agent を使うのがよさげ。
(1/21追記)
FreeBSDのportsに入っているaskpassアプリケーションは"security/openssh-askpass"、"security/gnome-ssh-askpass"、"security/ssh_askpass_gtk2"の3種類。openssh-askpass(x11-ssh-askpass)は90年代テイストの(Windows95あたりの)ちと野暮ったいウインドウが表示されるもの。gnome-ssh-askpass(gnome-ssh-askpass2)はいわゆるgnome2風のウインドウ。ssh_askpass_gtk2(ssh-askpass-fullscreen)は画面全体がグレーの半透明のフルスクリーン画面に被われてそこでパスフレーズの入力を促されるもの。個人的にはssh_askpass_gtk2が気に入った。
で、 /etc/fstab の設定。FreeBSD-users-jp MLによれば、mountprogオプションを指定してやればよいとのこと。つまり、
ユーザ名@サーバ名:サーバ上のパス マウントポイント fuse rw,noauto,mountprog=/usr/local/bin/sshfs,idmap=user 0 0
とすればOK。
次はssh-agent、と思っていろいろ試してみたが、うまく動かないので断念。
acroread(8、9共)のメニュー操作では、sshfsでマウントしたボリューム内のPDFファイルを開けない。コマンドラインからacroreadの引数としてPDFファイルを指定すると開けるんだけど。