web-dev-qa-db-ja.com

ラップトップへのCIFS共有の自動マウント

以前にいくつかのバリエーションでこれに似た質問をしたことがありますが、満足のいく答えはまだ見つかりません。

これが私が持っているものです:

  • ネットワークを頻繁に切り替えるモバイル性の高いDebianラップトップ。
  • 多数のCIFS共有を備えた自宅のFreeNASサーバー。

これが私が欲しいものです:

  • 自宅にいるときにCIFS共有ディレクトリにアクセスすると、CIFS共有が自動マウントされます。
  • 他の場所にいるときにCIFS共有にアクセスした場合は、すぐにエラーを返します(つまり、NASがない)を理解する前に5分間ネットワークを検討しないでください)。
  • マシンを一時停止または休止状態にするときは、共有をきれいにアンマウントして、マシンが再びウェイクアップしたときにマウントが薄い空気を指さないようにします。共有を完全にアンマウントできない場合(プロセスがディレクトリを使用している場合)、次のいずれかを実行します。
    • サスペンド/ハイバネートを中止し、誰がマウントにキャンプしているのか教えてください。または
    • とにかくアンマウントを強制し、サスペンド/ハイバネートを続行します。
  • 追加のクレジット:ネットワーク接続が切断された場合(プラグを抜くか、WAPとの関連付けが失われた場合)、共有を完全にアンマウントしてみてください。
  • 追加クレジット:この魔法は、使用中のネットワークマネージャーから独立している必要があります。

私が読んださまざまなオプションはどれも適切ではないようです。

  • autofsは信頼できるようですが、サスペンド/ハイバネートを認識していないようです。
  • mountおよび_netdev/etc/fstabオプションは面白そうに見えますが、NFS共有にのみ適用されるようです。
  • 私はまだgvfsを機能させることができていませんが、それでも私はそれほど一生懸命に努力していません。

これにアプローチする方法について何か提案はありますか?

補遺:

これが私がこれまでにやったことの短いバージョンです。 autofsをインストールし、自動マウントされたすべてのボリュームを強制的に期限切れにする小さなシェルスクリプトを作成しました。これは、ネットワークインターフェイスがダウンするたびに呼び出されます。

CIFSサーバーのオートマウンターマップを作成し、資格情報を外部ファイル(yuck)に保存しました。次に、次のシェルスクリプトを作成しました。

#!/bin/sh -e

# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
    kill -USR1 "$(cat /var/run/autofs.pid)"
fi

USR1シグナルをautomountデーモンに送信すると、未使用のマウントがすべて強制的に期限切れになります。次に、このスクリプトを/etc/network/if-down.d/autofsに配置し、ソフトリンクを/etc/network/if-post-down.d/autofsに配置しました。 NetworkManagerは、接続が切断されると後者のディレクトリにあるすべてのスクリプトを呼び出すため、自動マウントされたファイルシステムはすべてアンマウントする必要があります。

しかし、私はその取り決めにひどく満足していません。まず、autofsは自動マウントされたボリュームを区別せず、USR1を受信すると、マウントを解除しますallネットワーク以外のボリュームを含む非アクティブなボリューム。 。

さらに、CIFSサーバーのログインパスワードをファイルに保存する必要があります。私はそれを求められることを強く望んでいます。

とにかく、それは私がこれまで一緒にまとめてきたものです。それは動作しますが、私はもっと良いものを使用して幸せになります...

8
ewhac

NetworkManagerを使用する場合は、アップまたはダウンするネットワークインターフェイスで実行するスクリプトを作成できます。

NetworkManagerは、ネットワークイベントに応答して、/ etc/NetworkManager /dispatcher.dディレクトリ内のスクリプトをアルファベット順に実行します。各スクリプトは、(a)通常のファイル、(b)rootが所有、(c)グループなどが書き込み不可、(d)set-uidが不可、(e)所有者が実行可能である必要があります。各スクリプトは2つの引数を受け取ります。1つ目はアクティブ化されたばかりのデバイスのインターフェイス名で、2つ目はアクションです。

たとえば検索ドメインから独自のネットワークを検出し、インターフェイスがオンラインになったときにマウントまたはアンマウントします。

#!/bin/bash
#/etc/NetworkManager/dispatcher.d/mount-my-cifs    
case "$2" in
  up)
    # some logic to detect if we're at home
    grep "search myhome.local" /etc/resolv.conf
    if [ "$?" != "0" ] ; then 
       exit
    else 
       mount /mnt/cifs
    fi
    ;;
  down)
       umount /mnt/cifs
    ;;
esac
2
HBruijn