<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - AltLinux/Sisyphus/admin/IvmanAutomount/subfs</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/admin/IvmanAutomount/subfs</link>
<description>History/revisions of FreeSource/AltLinux/Sisyphus/admin/IvmanAutomount/subfs</description>
<language>en-us</language>
<item>
<title>2007-08-07 04:48:40</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/admin/IvmanAutomount/subfs/show?time=2007-08-07+04%3A48%3A40</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".altlinux.sisyphus.admin.ivmanautomount.subfs" href="http://freesource.info/wiki/AltLinux/Sisyphus/admin/IvmanAutomount/subfs&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;admin&amp;nbsp;/&amp;nbsp;Ivman&amp;nbsp;Automount&amp;nbsp;/&amp;nbsp;subfs&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/admin/IvmanAutomount/subfs?time=2007-08-07+04%3A48%3A40">2007-08-07 04:48:40&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/admin/IvmanAutomount/subfs">2007-09-01 01:59:47&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="action" style="float:right; width:250px">&lt;div class="action-content">Эта&amp;nbsp;страница была перенесена на&amp;nbsp;&lt;a href="http://altlinux.org/IvmanAutomount/subfs" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;br />
Система предназначена для&amp;nbsp;работы с&amp;nbsp;системным экземпляром демона &lt;strong>ivman&lt;/strong>. Чтобы не&amp;nbsp;портить конфигурационные файлы самого &lt;strong>ivman&lt;/strong>а, мы&amp;nbsp;используем для&amp;nbsp;хранения модифицированных xml-конфигов собственую директорию &lt;tt>/etc/ivman-mount-subfs&lt;/tt>. Суть их&amp;nbsp;модификации &amp;ndash; наши собственные команды монтирования/размонтирования, отключение задержки монтирования (так как&amp;nbsp;не&amp;nbsp;предполагается использования пользовательского варианта &lt;strong>Ivman&lt;/strong>), и&amp;nbsp;включение обнаружения подключенных устройств при&amp;nbsp;старте демона. Соответственно, для&amp;nbsp;старта &lt;strong>ivman&lt;/strong>а с&amp;nbsp;использованием нашего варианта конфигов, используется отдельный init-скрипт &lt;tt>/etc/rc.d/init.d/ivman-mount-subfs&lt;/tt>.&lt;br />
По&amp;nbsp;умолчанию, &lt;strong>ivman&lt;/strong> работает от&amp;nbsp;имени непривилегированного пользователя &lt;strong>ivman&lt;/strong>. Чтобы он&amp;nbsp;мог без&amp;nbsp;проблем выполнять команды монтирования/размонтирования, мы&amp;nbsp;должны или&amp;nbsp;ставить на&amp;nbsp;эти команды &lt;strong>SUID&lt;/strong>, или&amp;nbsp;делать вызовы через &lt;strong>sudo&lt;/strong>. Сам&amp;nbsp;&lt;strong>ivman&lt;/strong> рекомендует в&amp;nbsp;отладочных логах второй вариант. Так&amp;nbsp;и&amp;nbsp;сделано &amp;ndash; в&amp;nbsp;файле &lt;tt>/etc/sudo.d/ivman-mount-subfs&lt;/tt> пользователю &lt;strong>ivman&lt;/strong> разрешено безпарольно вызывать наши скрипты для&amp;nbsp;монтирования и&amp;nbsp;размонтирования.&lt;br />
Вызов этих скриптов в&amp;nbsp;качестве программ монтирования/размонтирования добавлен в&amp;nbsp;системный конфиг &lt;strong>ivman&lt;/strong>'а &lt;tt>&lt;span class="missingpage">Ivm&amp;nbsp;Config&amp;nbsp;Base&lt;/span>&lt;a href="http://freesource.info/wiki/IvmConfigBase/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>.xml&lt;/tt>:&lt;br />
&amp;lt;ivm:Option name="mountcommand" value="/usr/bin/sudo /usr/bin/mount-device-subfs '$hal.info.udi$'" /&amp;gt;&lt;br />
&amp;lt;ivm:Option name="umountcommand" value="/usr/bin/sudo /usr/bin/umount-device-subfs '$hal.block.device$'" /&amp;gt;&lt;br />
Кроме того, используется файл &lt;tt>95-ivman-mount-subfs-storage-policy.fdi&lt;/tt>, позаимствованный из&amp;nbsp;пакета &lt;strong>hal-fstab-sync&lt;/strong>. Это&amp;nbsp;даёт нам&amp;nbsp;как минимум двух мёртвых зайцев:&lt;a name="h8015-1">&lt;/a>&lt;h3>Установка и&amp;nbsp;использование&lt;/h3>
Вся&amp;nbsp;система опакечена (скачать &lt;a href="http://users.rsmu.ru/mak/ALTLinux/ivman-mount-subfs-0.0.1-alt1.noarch.rpm" target="_blank" title="" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/file.gif" alt="" border="0" />RPM&lt;/a>, &lt;a href="http://users.rsmu.ru/mak/ALTLinux/ivman-mount-subfs-0.0.1-alt1.src.rpm" target="_blank" title="" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/file.gif" alt="" border="0" />src.rpm&lt;/a>). Устанавливаем пакет, редактируем &lt;tt>/etc/sysconfig/subfs_mount_options&lt;/tt> в&amp;nbsp;своё удовольствие. Отключаем базовую версию &lt;strong>ivman&lt;/strong>а (если запущена):&lt;br />
# service ivman stop&lt;br />
# chkconfig ivman off&lt;br />
# killall ivman &lt;br />
(последнее &amp;ndash; для&amp;nbsp;пользовательских вариантов &lt;strong>ivman&lt;/strong>'a, если они&amp;nbsp;есть. Тогда нужно так&amp;nbsp;же&amp;nbsp;отключить их&amp;nbsp;автозапуск).&lt;br />
Конфигурируем автозапуск нашей системы: &lt;br />
# chkconfig ivman-mount-subfs on&lt;br />
# service ivman-mount-subfs start&lt;br />
Если есть необходимость заставить нашу систему работать с&amp;nbsp;пользовательским вариантом &lt;strong>ivman&lt;/strong>а, нужно вручную прописать в&amp;nbsp;пользовательский конфиг вызов команд монтирования/размонтирования и&amp;nbsp;добавить пользователя в&amp;nbsp;sudoers.&lt;a name="h8015-2">&lt;/a>&lt;h3>Земеченные глюки&lt;/h3>
У&amp;nbsp;меня есть USB-HDD с&amp;nbsp;четыремя разделами. И&amp;nbsp;при монтировании &lt;strong>ivman&lt;/strong>'ом один из&amp;nbsp;разделов, не&amp;nbsp;обязательно один и&amp;nbsp;тот же, постоянно монтировался &amp;laquo;как бы&amp;nbsp;дважды&amp;raquo;: в&amp;nbsp;выводе команды &lt;tt>mount&lt;/tt> он&amp;nbsp;был перечислен только один раз, однако, команду &lt;tt>umount&lt;/tt> приходилось выполнять &lt;strong>дважды&lt;/strong>, чтобы точка монтирования освободилась. При&amp;nbsp;монтировании &lt;strong>ivman&lt;/strong> ругался в&amp;nbsp;логи вот&amp;nbsp;так:&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;tt>/usr/local/bin/mount-device-subfs&lt;/tt>:&lt;br />
#!/bin/bash&lt;br />
[ -f /etc/sysconfig/subfs_mount_options ] &amp;&amp; . /etc/sysconfig/subfs_mount_options&lt;br />
OBLIGATORY_MOUNT_OPTIONS="nodev,nosuid,noexec,noatime"&lt;br />
#LOCK_FILE="/var/lock/subfsmounter.lock"&lt;br />
#HAL_UDI=`hal-find-by-property --key block.device --string "$DEVICE" | head -1`&lt;br />
HAL_UDI="$1"&lt;br />
logger &amp;laquo;Running as $0 $1&amp;raquo;&lt;br />
if&amp;nbsp;[ "$HAL_UDI" = &lt;!--notypo--> ] ; then exit 1 ; fi&lt;br />#function exit_handler() {&lt;br />#       trap - EXIT&lt;br />#       [ -f &amp;quot;$LOCK_FILE&amp;quot; ] &amp;amp;&amp;amp; rm -f $LOCK_FILE&lt;br />#}&lt;br />function ask_hal() {&lt;br />        [ -n &amp;quot;$1&amp;quot; ] &amp;amp;&amp;amp; {&lt;br />                hal-get-property --key &amp;quot;$1&amp;quot; --udi &amp;quot;$HAL_UDI&amp;quot; 2&amp;gt;/dev/null&lt;br />        }&lt;br />}&lt;br />function get_hal_label {&lt;br />    CUR_UDI=$1&lt;br />    LABEL=&lt;!--/notypo-->&lt;br />
&lt;div class="indent">&lt;div class="indent">COUNTER=0;&lt;br />
while [ -z "$LABEL" -a $COUNTER -lt 4 ]; do&lt;br />
&lt;div class="indent">&lt;div class="indent">LABEL=`ask_hal volume.label`&lt;br />
if&amp;nbsp;[ -z "$LABEL" ]; then&lt;br />
&lt;div class="indent">&lt;div class="indent">LABEL=`ask_hal storage.serial`&lt;br />
&lt;/div>&lt;/div>fi&lt;br />
CUR_UDI=`ask_hal info.parent`&lt;br />
let&amp;nbsp;COUNTER=COUNTER+1&lt;br />
&lt;/div>&lt;/div>done&lt;br />
if&amp;nbsp;[ -z "$LABEL" ]; then&lt;br />
&lt;div class="indent">&lt;div class="indent">LABEL=${DEVICE##/dev/}&lt;br />
&lt;/div>&lt;/div>fi&lt;/div>&lt;/div>
}&lt;br />
function get_mount_point {&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">DESIRED_MOUNT_POINT=`ask_hal volume.policy.desired_mount_point`&lt;br />
[ -z "$DESIRED_MOUNT_POINT" ] &amp;&amp; DESIRED_MOUNT_POINT=$LABEL&lt;br />
while [ -e &amp;laquo;/media/$DESIRED_MOUNT_POINT&amp;raquo; ]; do&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">tail_mp=${DESIRED_MOUNT_POINT##*_}&lt;br />
echo "$tail_mp" | grep -qvE "[^[:digit:]]" &amp;&amp; \&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">DESIRED_MOUNT_POINT="${DESIRED_MOUNT_POINT%_*}_$+ 1" || \
                        DESIRED_MOUNT_POINT=&amp;quot;${DESIRED_MOUNT_POINT}_1&amp;quot;
        done
}
if&amp;nbsp;[ -z &amp;quot;$HAL_UDI&amp;quot; ]; then # can't find device in&amp;nbsp;hal db&amp;nbsp;logger &amp;quot;hald didn't know about $DEVICE&amp;quot;
# WTF?
    LABEL=${DEVICE##/dev/}
    FS_TYPE=&amp;quot;auto&amp;quot;
    DESIRED_MOUNT_POINT=&amp;quot;$LABEL&amp;quot;
else # device found in&amp;nbsp;hal db.
    is_ignore=`ask_hal volume.ignore`
    [ &amp;quot;$is_ignore&amp;quot; == &amp;quot;true&amp;quot; ] &amp;amp;&amp;amp; {
        logger &amp;quot;Device &amp;quot;$HAL_UDI&amp;quot; is&amp;nbsp;ignored, will not&amp;nbsp;be&amp;nbsp;mounted.&amp;quot;
        exit 1
    }
    is_mounted=`ask_hal volume.is_mounted`
    [ &amp;quot;$is_mounted&amp;quot; == &amp;quot;true&amp;quot; ] &amp;amp;&amp;amp; {
        logger &amp;quot;Device &amp;quot;$HAL_UDI&amp;quot; already mounted.&amp;quot;
        exit 1
    }
    DEVICE=`ask_hal block.device`
    [ -z &amp;quot;$DEVICE&amp;quot; ] &amp;amp;&amp;amp; {
        logger &amp;quot;Can't recognize block device for&amp;nbsp;&amp;quot;$HAL_UDI&amp;quot;, abort mounting.&amp;quot;
        exit 1
    }
    FS_TYPE=`ask_hal volume.fstype`
    [ -z &amp;quot;$FS_TYPE&amp;quot; ] &amp;amp;&amp;amp; {
        logger &amp;quot;${DEVICE}: No&amp;nbsp;FS found. Skip mounting.&amp;quot;
        exit 1
    }
    get_hal_label
    get_mount_point
    CONFIG_MOUNT_OPTIONS=${!FS_TYPE}
fi&amp;nbsp;logger &amp;quot;Mounting HAL_UDI $HAL_UDI as $DEVICE to $DESIRED_MOUNT_POINT (label=${LABEL}, fs=${FS_TYPE}, options:${CONFIG_MOUNT_OPTIONS})&amp;quot;
SYNC_OPT=&lt;!--notypo-->&lt;br />[ -n &amp;quot;$CONFIG_MOUNT_OPTIONS&amp;quot; ] &amp;amp;&amp;amp; CONFIG_MOUNT_OPTIONS=&amp;quot;,$CONFIG_MOUNT_OPTIONS&amp;quot;&lt;br />#for counter in 1 2 3 4 5 6 7 8 9 10; do&lt;br />#       [ -f $LOCK_FILE ] || break&lt;br />#       logger &amp;quot;$$ wait...&amp;quot;&lt;br />#       sleep 1&lt;br />#done&lt;br />#[ -f $LOCK_FILE ] &amp;amp;&amp;amp; {&lt;br />#       logger &amp;quot;Endlessly mount locking, quit.&amp;quot;&lt;br />#       exit 1&lt;br />#}&lt;br />#trap exit_handler HUP PIPE INT QUIT TERM EXIT&lt;br />#touch $LOCK_FILE&lt;br />#sleep &amp;quot;1.${RANDOM}s&amp;quot;&lt;br />MOUNTPOINT=&amp;quot;/media/${DESIRED_MOUNT_POINT}&amp;quot;&lt;br />mkdir -p &amp;quot;$MOUNTPOINT&amp;quot; || {&lt;br />        logger &amp;quot;Error creating mount point&amp;quot;&lt;br />        exit 1&lt;br />}&lt;br />echo &amp;quot;$DESIRED_MOUNT_POINT&amp;quot; |md5sum |cut -f1 -d' ' &amp;gt; $MOUNTPOINT/.auto_managed_mount_point&lt;br />mount -t subfs &amp;quot;$DEVICE&amp;quot; &amp;quot;$MOUNTPOINT&amp;quot; -o fs=${FS_TYPE},${OBLIGATORY_MOUNT_OPTIONS}${CONFIG_MOUNT_OPTIONS} || {&lt;br />        logger &amp;quot;Mounting failure&amp;quot;;&lt;br />        exit 1&lt;br />}&lt;br />logger &amp;quot;Success.&amp;quot;&lt;br />Закомментированые участки кода добавляют (при разкомментировании ;) функцию задержки монтирования при одновременном старте нескольких экземпляров скрипта. Пока не сильно понятно, нужно ли оно. От проблем с &amp;quot;двойным монтированием&amp;quot; (((#doublemount см. ниже))) не спасает, а тормозов прибавляет.&lt;br />##/usr/local/bin/umount-device-subfs##:&lt;br />#! /bin/bash&lt;br />logger &amp;quot;$0 $1&amp;quot;&lt;br />POINT_FOR_UMOUNT=$1&lt;br />if [ &amp;quot;$POINT_FOR_UMOUNT&amp;quot; = &lt;!--/notypo--> ] ; then exit 1 ; fi&amp;nbsp;do_umount() {
                  logger &amp;quot;Trying to&amp;nbsp;umount $1&amp;quot;
                  MOUNT_POINT=&amp;quot;$1&amp;quot;
                  [ -d &amp;quot;$MOUNT_POINT&amp;quot; ] || {&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">logger &amp;laquo;Mount point $MOUNT_POINT not&amp;nbsp;found&amp;raquo;&lt;br />
return&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>}&lt;br />
if&amp;nbsp;umount "$MOUNT_POINT"; then&lt;br />
&lt;div class="indent">[ -e "$MOUNT_POINT/.auto_managed_mount_point" ] &amp;&amp; rm&amp;nbsp;-rf "$MOUNT_POINT" || {
                                  #Double mounting?
                                  count=1
                                  while umount &amp;quot;$MOUNT_POINT&amp;quot; &amp;amp;&amp;amp; [ $count -lt 10 ] ; do&amp;nbsp;logger &amp;quot;Dublicate!&amp;quot;;
                                          count=$(($count + 1));
                                  done
                                  [ -e &amp;quot;$MOUNT_POINT/.auto_managed_mount_point&amp;quot; ] &amp;amp;&amp;amp; rm&amp;nbsp;-rf &amp;quot;$MOUNT_POINT&amp;quot;
                          }
                          logger &amp;quot;Successfully umounted $MOUNT_POINT&amp;quot;
                  else
                          logger &amp;quot;Umount fault! Mount point will not&amp;nbsp;be&amp;nbsp;removed.&amp;quot;
                  fi&amp;nbsp;}
[ &amp;quot;`expr substr $POINT_FOR_UMOUNT 1 1`&amp;quot; == &amp;quot;/&amp;quot; ] || POINT_FOR_UMOUNT="`pwd`/$POINT_FOR_UMOUNT"&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
MOUNT_POINT_TYPE=`echo $POINT_FOR_UMOUNT |cut -f2 -d /`&lt;br />
case "$MOUNT_POINT_TYPE" in&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">media)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">do_umount "$POINT_FOR_UMOUNT"&lt;br />
;;&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>dev)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">mount | grep "^$POINT_FOR_UMOUNT " |while read MOUNT_LINE; do&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>do_umount "`echo $MOUNT_LINE |cut -f 3 -d' '`"&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">done&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">;;&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>org)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">do_umount "`hal-get-property --key volume.mount_point --udi $POINT_FOR_UMOUNT`"&lt;br />
;;&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/li>&lt;li>)
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">logger &amp;laquo;Unknown mount point type ($POINT_FOR_UMOUNT)"&lt;br />
;;&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
esac&lt;br />
По&amp;nbsp;умолчанию, &lt;strong>ivman&lt;/strong> работает от&amp;nbsp;имени непривилегированного пользователя &lt;strong>ivman&lt;/strong>. Чтобы он&amp;nbsp;мог без&amp;nbsp;проблем выполнять команды монтирования/размонтирования, мы&amp;nbsp;должны или&amp;nbsp;ставить на&amp;nbsp;эти команды &lt;strong>SUID&lt;/strong>, или&amp;nbsp;делать вызовы через &lt;strong>sudo&lt;/strong>. Сам&amp;nbsp;&lt;strong>ivman&lt;/strong> рекомендует в&amp;nbsp;отладочных логах второй вариант. Так&amp;nbsp;мы&amp;nbsp;и поступим. &lt;!--notypo-->{{anchor name="sudoers"}}&lt;!--/notypo-->Запустим &lt;tt>visudo&lt;/tt> и&amp;nbsp;добавим разрешение пользователю &lt;strong>ivman&lt;/strong> безпарольно вызывать наши скрипты для&amp;nbsp;монтирования и&amp;nbsp;размонтирования:&lt;br />
Cmnd_Alias  IVMAN_COMMANDS = /usr/local/bin/mount-device-subfs, /usr/local/bin/umount-device-subfs&lt;br />
ivman   ALL&amp;nbsp;= NOPASSWD: IVMAN_COMMANDS&lt;br />
Далее, добавляем вызов этих скриптов в&amp;nbsp;качестве программ монтирования/размонтирования в&amp;nbsp;системный конфиг &lt;strong>ivman&lt;/strong>'а &lt;tt>/etc/ivman/IvmConfigBase.xml&lt;/tt>:&lt;br />
&amp;lt;ivm:Option name="mountcommand" value="sudo /usr/local/bin/mount-device-subfs '$hal.info.udi$'" /&amp;gt;&lt;br />
&amp;lt;ivm:Option name="umountcommand" value="sudo /usr/local/bin/umount-device-subfs '$hal.block.device$'" /&amp;gt;&lt;br />
Кроме того, очень рекомендуется поставить файл &lt;tt>10-fstab-sync-storage-policy.fdi&lt;/tt> из&amp;nbsp;пакета &lt;strong>hal-fstab-sync&lt;/strong>. Это&amp;nbsp;даёт нам&amp;nbsp;как минимум двух мёртвых зайцев:&lt;br />
Запишите этот файл в&amp;nbsp;&lt;tt>/etc/hal/fdi/policy/&lt;/tt>.&lt;a name="h8015-1">&lt;/a>&lt;h3>Монтирование пользовательским экземпляром ivman'а&lt;/h3>
Системный &lt;strong>ivman&lt;/strong> работает без&amp;nbsp;проблем, только вот&amp;nbsp;задержки при&amp;nbsp;монтировании несколько нервируют (он даёт некоторый временной шанс смонтировать раздел пользовательскому экземпляру программы), и&amp;nbsp;не обрабатываются уже&amp;nbsp;подсоединённые устройства (хотя, возможно, я&amp;nbsp;не досмотрел документацию). Поэтому, если на&amp;nbsp;компьютере одномоментно работает только один пользователь, монтирование устройств можно отдать на&amp;nbsp;откуп и&amp;nbsp;пользовательскому экземпляру &lt;strong>ivman&lt;/strong>'а. Для&amp;nbsp;этого добавим в&amp;nbsp;&lt;tt>/etc/sudoers&lt;/tt> пользователю, который будет запускать свой экземпляр программы, разрешения на&amp;nbsp;запуск скриптов монтирования/размонтирования, как&amp;nbsp;это было описано &lt;a href="#sudoers" name="osudoers">выше&lt;/a>. Так&amp;nbsp;же&amp;nbsp;пропишем в&amp;nbsp;пользовательский конфиг &lt;tt>~/.ivman/IvmConfigBase.xml&lt;/tt> вызовы этих скриптов в&amp;nbsp;качестве программ монтирования и&amp;nbsp;размонтирования. Сконфигурируем запуск пользовательского экземпляра любым описанным в&amp;nbsp;документации методом и&amp;nbsp;наслаждаемся.&lt;br />
&lt;!--notypo-->{{anchor name="doublemount"}}&lt;!--/notypo-->&lt;span class="cite">Однако&lt;/span>: вот&amp;nbsp;здесь я&amp;nbsp;поймал интересную ошибку. У&amp;nbsp;меня есть USB-HDD с&amp;nbsp;четыремя разделами. И&amp;nbsp;при монтировании пользовательским &lt;strong>ivman&lt;/strong>'ом один из&amp;nbsp;разделов, не&amp;nbsp;обязательно один и&amp;nbsp;тот же, постоянно монтировался &amp;laquo;как бы&amp;nbsp;дважды&amp;raquo;: в&amp;nbsp;выводе команды &lt;tt>mount&lt;/tt> раздел был&amp;nbsp;перечислен только один раз, однако, команду &lt;tt>umount&lt;/tt> приходилось выполнять &lt;strong>дважды&lt;/strong>, чтобы точка монтирования освободилась. При&amp;nbsp;монтировании пользовательский &lt;strong>ivman&lt;/strong> ругался в&amp;nbsp;логи вот&amp;nbsp;так:&lt;a name="h8015-2">&lt;/a>&lt;h3>Конспективное пошаговое мини-хау-ту&lt;/h3>
Предположим, что&amp;nbsp;&lt;strong>ivman&lt;/strong> уже&amp;nbsp;установлен, и&amp;nbsp;конфиги его&amp;nbsp;созданы (создаются при&amp;nbsp;первом запуске).&lt;br />
&lt;ul>&lt;li> записываем скрипты &lt;tt>mount-device-subfs&lt;/tt> и&amp;nbsp;&lt;tt>umount-device-subfs&lt;/tt> в&amp;nbsp;&lt;tt>/usr/local/bin/&lt;/tt>;
&lt;/li>&lt;li> подкладываем &lt;tt>10-fstab-sync-storage-policy.fdi&lt;/tt> из&amp;nbsp;пакета &lt;strong>hal-fstab-sync&lt;/strong> в&amp;nbsp;&lt;tt>/etc/hal/fdi/policy/&lt;/tt>;
&lt;/li>&lt;li> редактируем &lt;tt>/etc/sysconfig/subfs_mount_options&lt;/tt> в&amp;nbsp;своё удовольствие;
&lt;/li>&lt;li> запускаем &lt;tt>visudo&lt;/tt> и&amp;nbsp;добавляем права на&amp;nbsp;скрипты пользователю &lt;strong>ivman&lt;/strong> и&amp;nbsp;любым нужным пользователям;
&lt;/li>&lt;li> добавляем вызовы наших скриптов в&amp;nbsp;системный конфиг &lt;tt>/etc/ivman/IvmConfigBase.xml&lt;/tt> и&amp;nbsp;пользовательские &lt;tt>~/.ivman/IvmConfigBase.xml&lt;/tt> по&amp;nbsp;потребности;
&lt;/li>&lt;li> (пере)стартуем сервис &lt;strong>ivman&lt;/strong>; или&amp;nbsp;запускаем пользовательский экземпляр программы, или&amp;nbsp;и&amp;nbsp;то и&amp;nbsp;другое.
&lt;/li>&lt;li> тестируем, наслаждаемся, материмся.
&lt;/li>&lt;li> если это&amp;nbsp;будет еще&amp;nbsp;кому-то нужно, кроме меня :) &amp;ndash; постараться опакетить.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
