Авто-монтирование CIFS акций на ноутбуке

8

Я видел вопросы, подобные этим, которые задавались ранее в нескольких вариантах, но мне еще предстоит найти удовлетворительный ответ.

Вот что у меня есть:

  • Высокомобильный ноутбук Debian, который часто переключает сети.
  • Домашний сервер FreeNAS с кучей общих ресурсов CIFS.

Вот что я хочу:

  • Если я получаю доступ к каталогу общего ресурса CIFS, находясь дома, автоматически смонтируйте общий ресурс CIFS.
  • Если я получаю доступ к общему ресурсу CIFS, когда нахожусь где-то еще, немедленно возвращаю ошибку (т. Е. Не рассматриваю сеть в течение пяти минут, пока не выясню, что NAS там нет).
  • Когда я приостанавливаю или переводю компьютер в спящий режим, аккуратно отсоединяйте общий ресурс, чтобы крепление не указывало на разреженный воздух, когда машина снова включается. Если общий ресурс не может быть чисто размонтирован (процесс использует каталог), либо:
    • Прервите приостановку / спящий режим и скажите мне, кто находится на горе; или
    • В любом случае форсируйте размонтирование и переходите в режим ожидания / гибернации.
  • Дополнительный кредит. Когда сетевое соединение обрывается (отключите или потеряете связь с WAP), попытайтесь аккуратно размонтировать общий ресурс.
  • Дополнительные кредиты: эта магия должна быть независимой от используемого сетевого менеджера.

Ни один из вариантов, о которых я читал, не подходит:

  • autofs кажется надежным, но, похоже, не знает о приостановке / гибернации.
  • _netdevВариант в mountи /etc/fstabвыглядит интересно, но , как представляется , применяются только к акциям NFS.
  • Я еще не смог добраться gvfsдо работы, но тогда я не очень старался.

Любые предложения о том, как подойти к этому?

ДОПОЛНЕНИЕ:

Вот краткая версия того, что я до сих пор делал. Я установил autofsи написал небольшой сценарий оболочки для принудительного истечения срока действия всех автоматически монтируемых томов, который вызывается при выходе из строя сетевого интерфейса.

Я создал карту автомонтирования для своего сервера CIFS с учетными данными, хранящимися во внешнем файле (хм). Затем я написал следующий скрипт:

#!/bin/sh -e

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

Отправка сигнала USR1 демону автомонтирования приводит к принудительному истечению срока действия всех неиспользуемых монтирований. Затем я поместил этот скрипт /etc/network/if-down.d/autofs, с мягкой ссылкой /etc/network/if-post-down.d/autofs. NetworkManager вызывает все сценарии в последнем каталоге, когда соединение разрывается, поэтому любые автоматически монтируемые файловые системы должны быть размонтированы.

Однако я не очень доволен аранжировкой. Для начала autofsне делает различий между автоматически монтируемыми томами и, получив USR1, размонтирует все неактивные тома, включая не сетевые тома, что довольно сложно.

Кроме того, пароль для входа на сервер CIFS должен храниться в файле. Я бы предпочел, чтобы меня об этом попросили.

Во всяком случае, это то, что я до сих пор вместе. Это работает, но я буду рад использовать что-то лучше ...

ewhac
источник
Возможно, вы захотите взглянуть на инструмент Gigolo: uvena.de/gigolo/index.html . Я использую его для управления восстановлением SMB-монтировок дома и работой на моем ноутбуке.
SLM
@slm: Gigolo выглядит интересно, но, похоже, нет способа изменить параметры монтирования. Как следствие, общий ресурс появляется в том, что я называю «тупым FAT» режимом, где все файлы и каталоги имеют разрешения 0700. Напротив, монтирование одного и того же общего ресурса с использованием sudo mount -t cifs ...дает предпочтительные результаты. Я немного поиграюсь с этим, но я не думаю, что Жиголо - это то, что я ищу.
Ewhac

Ответы:

2

Если вы используете NetworkManager, вы можете писать сценарии, которые выполняются на сетевом интерфейсе, который запускается или выключается.

NetworkManager выполнит сценарии в каталоге /etc/NetworkManager/dispatcher.d в алфавитном порядке в ответ на сетевые события. Каждый сценарий должен быть (а) обычным файлом, (б) владельцем root, (в) недоступным для записи группой или другим пользователем, (г) не set-uid, (д) ​​и исполняемым владельцем. Каждый сценарий получает два аргумента, первый - имя интерфейса только что активированного устройства, а второй - действие.

Определите вашу собственную сеть, например, из поискового домена, а затем подключите или размонтируйте его, когда интерфейс подключится к сети:

#!/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
HBruijn
источник
Выше предполагается, что монтирование cifs определено /etc/fstabс помощью noautoопции
HBruijn
Пожалуйста, добавьте это предположение в ответ.
Кровоточащие пальцы