К связке ivman&pmount у меня (лично) всегда было несколько претензий:
Поведение же пакетов hal-fstab-sync&hal-mount-subfs меня всегда более, чем устраивало. Поэтому, после того, как в последних версиях hal был поставлен конфликт на hal-fstab-sync, и волей-неволей пришлось перейти на ivman, мне очень захотелось воссоздать старую привычную функциональность.
hal детектит событие появления или пропадания устройств. Ivman принимает решение, что в связи с этим событием сделать с устройством – смонтировать, размонтировать, или какую-нибудь программу запустить. Мы прописываем ivmanу наши собственные команды монтирования/размонтирования – скрипты, которые и делают всю остальную работу.
Итак, по порядку:
Скрипт, занимающийся монтированием, является художественно переработанным примером с Gentoo Wiki.
Он выясняет желаемую точку монтирования, опции монтирования в зависимости от файловой системы устройства, создаёт уникальную точку монтирования и, собственно, монтирует устройство.
/usr/local/bin/mount-device-subfs:
Закомментированые участки кода добавляют (при разкомментировании ;) функцию задержки монтирования при одновременном старте нескольких экземпляров скрипта. Пока не сильно понятно, нужно ли оно. От проблем с «двойным монтированием» (см. ниже) не спасает, а тормозов прибавляет.
Скрипт размонтирования пытается размонтировать устройство, и, при успехе, изничтожает точку монтирования.
/usr/local/bin/umount-device-subfs:
По умолчанию, ivman работает от имени непривилегированного пользователя ivman. Чтобы он мог без проблем выполнять команды монтирования/размонтирования, мы должны или ставить на эти команды SUID, или делать вызовы через sudo. Сам ivman рекомендует в отладочных логах второй вариант. Так мы и поступим.
Запустим visudo и добавим разрешение пользователю ivman безпарольно вызывать наши скрипты для монтирования и размонтирования:
Далее, добавляем вызов этих скриптов в качестве программ монтирования/размонтирования в системный конфиг ivman'а /etc/ivman/IvmConfigBase.xml:
монтирование мы вызываем с UDI, по которому скрипт определяет все нужные для монтирования свойства устройства. А когда запускается скрипт размонтирования, устройство уже скорее всего удалено, и hal о нём может ничего не знать. Поэтому в качестве параметра передаётся извлеченное устройство. Проще было бы использовать точку монтирования, но иногда ivman наотрез отказывается её передавать.
Скрипт монтирования использует конфигурационный файл /etc/sysconfig/subfs_mount_options, в котором хранятся опции монтирования для разных файловых систем:
Внимание: Формат и наполнение этого конфига, скорее всего, будет изменено и дополнено.
Кроме того, очень рекомендуется поставить файл 10-fstab-sync-storage-policy.fdi из пакета hal-fstab-sync. Это даёт нам как минимум двух мёртвых зайцев:
Запишите этот файл в /etc/hal/fdi/policy/.
Системный ivman работает без проблем, только вот задержки при монтировании несколько нервируют (он даёт некоторый временной шанс смонтировать раздел пользовательскому экземпляру программы), и не обрабатываются уже подсоединённые устройства (хотя, возможно, я не досмотрел документацию). Поэтому, если на компьютере одномоментно работает только один пользователь, монтирование устройств можно отдать на откуп и пользовательскому экземпляру ivman'а. Для этого добавим в /etc/sudoers пользователю, который будет запускать свой экземпляр программы, разрешения на запуск скриптов монтирования/размонтирования, как это было описано выше. Так же пропишем в пользовательский конфиг ~/.ivman/IvmConfigBase.xml вызовы этих скриптов в качестве программ монтирования и размонтирования. Сконфигурируем запуск пользовательского экземпляра любым описанным в документации методом и наслаждаемся.
Однако: вот здесь я поймал интересную ошибку. У меня есть USB-HDD с четыремя разделами. И при монтировании пользовательским ivman'ом один из разделов, не обязательно один и тот же, постоянно монтировался «как бы дважды»: в выводе команды mount раздел был перечислен только один раз, однако, команду umount приходилось выполнять дважды, чтобы точка монтирования освободилась. При монтировании пользовательский ivman ругался в логи вот так:
Кто здесь виноват – ivman, hal, subfs – я не знаю. Пока что решил проблему некоторым хаком в скрипте размонтирования.
Предположим, что ivman уже установлен, и конфиги его созданы (создаются при первом запуске).
Пожалуйста, жду отзывов.