平林孝太@東京大学研究のはなし、個人的なメモ書きなどのページになる予定です。。。 |
研究室マシン設定メモ:その3
前にリモートのファイルシステムを sshfs + autofs の合わせ技でローカルマシンにマウントするメモを書いた気がする。
これ。
このままでもよかったんだけど、ローカルデバイスのマウントは /etc/fstab に設定を書いて、
リモートのマウントは /etc/auto.sshfs に設定を書く、というのがスマートじゃない。なんかきもい。
そもそもローカル端末の root からログインしなきゃいけないので一般ユーザとして使うには微妙。
といっても自分のPCではユーザは自分一人だし root 権限もあるし、なんでもいいんだけどね。
そんなわけで今回は、リモートもローカルも /etc/fstab に設定を一本化して自動マウントすることを目指す。
autofs とさよならの準備
autofs のサービスを停止して、自動起動も切っとく。もう不要ならそっと remove。
$ sudo service autofs stop
$ sudo vi /etc/init/autofs.conf
#start on runlevel [2345] # ここをコメントアウト
念のため設定ファイルもコメントアウトしとく。
/etc/auto.master と /etc/auto.sshfs を必要に応じていじる。
/etc/fstab の記述
これでハマった。
目標は root ではなく一般ユーザの鍵ペアでログインできるようすることと、起動時に自動でマウントさせること。
必要な情報はそんなに多くなかった。
マウント元、マウント先、リモートにログインするためのユーザ情報と、秘密鍵の位置。
基本的にはこれらを fstab, sshfs の書式に従って並べていけばいい。
自分の場合のコマンド行全部をフルで書くと、
hirako@dio:/home/hirako /mnt/hirako fuse.sshfs delay_connect,idmap=user,uid=1000,gid=1000,IdentityFile=/home/hirako/.ssh/id_rsa,follow_symlinks,allow_other 0 0
ざっとこんな感じになる。UID, GID, 秘密鍵のパスなど適宜変更。
最初のフィールドがマウント元となるリモートディレクトリ。2つめがマウント先のローカルディレクトリ(autofs と違ってあらかじめ作っておく)。
3番目のフィールドはファイルシステムを書くところで、fuse.sshfs と書いておく。先頭フィールドに
sshfs#hirako@dio:/home/hirako
と書いた場合には fuse のみでOK。4番目のフィールドには fstab と sshfs のオプションを書く。ユーザ情報は id コマンドで取得できる。
秘密鍵のパスは ~/.ssh/config で設定していたとしてもきちんと書かないとダメっぽい。
follow_symlinks を入れるとリモートのシンボリックリンクを追跡するようになって幸せ。
allow_other を入れないと root とか他のユーザからアクセスできなくなる。場合によっては allow_root の方がいいかも。
終わりの2つのフィールドは普通の fstab の書式といっしょ。
他にも大量のオプションがあるが、まとまった情報はなかなか見つからない。
ユーザ情報と鍵パスの指定が1つ目の目標の肝だとすると、 2つ目の目標の肝は delay_connect オプションでした。 ネットワークが確立する前に自動でログインしようとすると当然エラーになるので、本来は _netdev オプションで便宜を図るそうなのだけれど、 これがうまく機能せず。 フォーラムにも同様の報告がいくつか上がっているけど原因は(僕の理解できる範囲では)不明。 代わりに delay_connect オプションを指定するといいとの助言があり、これがとりあえずの正解らしい。
おつかれさまでした
再起動して無事マウントできてたらホームディレクトリにでも適当にリンクを貼っておしまい。
近いうちにシステムファイルを SSD に引越して爆速 Ubuntu を誕生させる予定があるので、 今度はその話の備忘録を書きます。