IvmanAutomount (notes): различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
[[Category:Admin]]
[[Категория:Admin]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/admin/IvmanAutomount/notes}}
{{викифицировать}}
{{викифицировать}}
{{merge|IvmanAutomount}}


kde 3.5.2: если стартует при незапущенном hal, показывает в /media устройства в виде:
kde 3.5.2: если стартует при незапущенном hal, показывает в /media устройства в виде:
Строка 9: Строка 9:
<pre>жесткий диск (amp:/net)</pre>
<pre>жесткий диск (amp:/net)</pre>


это fstab бэкэнд. если служба "управление подключаемыми устройствами" стартует при запущенном hal, то используется hal бэкэнд:
это fstab бэкэнд. если служба «управление подключаемыми устройствами» стартует при запущенном hal, то используется hal бэкэнд:
<pre>носитель 1.2 Gb
<pre>носитель 1.2 Gb
носитель 4.1 Gb
носитель 4.1 Gb
USB DISK</pre>
USB DISK</pre>
причем, имя устройства все еще можно увидеть в поле "ссылка". ссылки ведут в виртуальные url (media kioslave) вида system:/media/devname: в system:/media/hda2 открывается /, а usb disk (system:/media/sdb1) смонтирован вовсе не в /media/sdb1, и даже не в /media/disk. то ли media:/ сам лезет к устройству, то ли открывает в соответствии с /proc/mounts. больше похоже на второе, т.к. при открытии устройство автоматически монтируется, если было отмонтировано.
причем, имя устройства все еще можно увидеть в поле «ссылка». ссылки ведут в виртуальные url (media kioslave) вида system:/media/devname: в system:/media/hda2 открывается /, а usb disk (system:/media/sdb1) смонтирован вовсе не в /media/sdb1, и даже не в /media/disk. то ли media:/ сам лезет к устройству, то ли открывает в соответствии с /proc/mounts. больше похоже на второе, так как при открытии устройство автоматически монтируется, если было отмонтировано.




При втыкании кде монтирует разделы флэшек в /media/disk???. (говорят, с помощью pmount - сомневаюсь, т.к. при control pmount restricted все равно монтирует, из чего я делаю вывод, что pmount тут почти совсем ни при чем). при этом
При втыкании кде монтирует разделы флэшек в /media/disk???. (говорят, с помощью pmount — сомневаюсь, так как при control pmount restricted все равно монтирует, из чего я делаю вывод, что pmount тут почти совсем ни при чем). при этом
<pre>$ grep sdb /proc/mounts
<pre>$ grep sdb /proc/mounts
/dev/sda1 /media/disk vfat rw,nosuid,nodev,noexec,noatime,uid=502,fmask=0077,dmask=0077,codepage=cp866,iocharset=koi8-r,utf8 0 0</pre>
/dev/sda1 /media/disk vfat rw,nosuid,nodev,noexec,noatime,uid=502,fmask=0077,dmask=0077,codepage=cp866,iocharset=koi8-r,utf8 0 0</pre>
Строка 63: Строка 63:
   linux.sysfs_path_device = '/sys/block/sda/sda1'  (string)
   linux.sysfs_path_device = '/sys/block/sda/sda1'  (string)
   linux.sysfs_path = '/sys/block/sda/sda1'  (string)</pre>
   linux.sysfs_path = '/sys/block/sda/sda1'  (string)</pre>
"безопасно извлечь" соответственно нормально отмонтирует флэшку, получая
«безопасно извлечь» соответственно нормально отмонтирует флэшку, получая
<pre>root@pad /etc/hal/policy # lshal -l --show /org/freedesktop/Hal/devices/volume_uuid_3087_3C40 > lshal.2
<pre>root@pad /etc/hal/policy # lshal -l --show /org/freedesktop/Hal/devices/volume_uuid_3087_3C40 > lshal.2
root@pad /etc/hal/policy # diff -Naur lshal.1 lshal.2
root@pad /etc/hal/policy # diff -Naur lshal.1 lshal.2
Строка 112: Строка 112:
   volume.fsversion = 'FAT16'  (string)</pre>
   volume.fsversion = 'FAT16'  (string)</pre>


но кто и зачем добавляет эти info.hal_mount.mounted_by_uid - неясно. если KDE монтирование делает через hal method - это многое объясняет. или hal добавляет сам после вызова callout, что логично. Либо добавляет сам KDE - это было бы бессмысленно, имхо.  
но кто и зачем добавляет эти info.hal_mount.mounted_by_uid — неясно. если KDE монтирование делает через hal method — это многое объясняет. или hal добавляет сам после вызова callout, что логично. Либо добавляет сам KDE — это было бы бессмысленно, имхо.


Из вышесказанного следует, что при использовании ivman 0.6.12 / pmount 0.9.9 про размонтирование из КДЕ можно забыть.  
Из вышесказанного следует, что при использовании ivman 0.6.12 / pmount 0.9.9 про размонтирование из КДЕ можно забыть.


предположим, мы научим ivman (скорее, pmount-hal) работать через вызов mount method. тогда надо выяснить, как заставить его использовать тот mount_point что я скажу вместо /media/disk. KDE вроде бы как-то это делает, ecли задать в свойствах /media/canyon  - монтируется в /media/canyon-1 (возможно - добавляется номер раздела).  
предположим, мы научим ivman (скорее, pmount-hal) работать через вызов mount method. тогда надо выяснить, как заставить его использовать тот mount_point что я скажу вместо /media/disk. KDE вроде бы как-то это делает, ecли задать в свойствах /media/canyon — монтируется в /media/canyon-1 (возможно — добавляется номер раздела).


hal policy враги выкинули вместе с desired_mount_point :( поэтому выбор точки монтирования придется реализовывать в конфигах ivman.
hal policy враги выкинули вместе с desired_mount_point :(поэтому выбор точки монтирования придется реализовывать в конфигах ivman.


<pre>[root@nirvana bin]# grep hal_mount *
<pre>[root@nirvana bin]# grep hal_mount *
Строка 135: Строка 135:


Параметры:
Параметры:
* ''<tt>$UDI</tt>'' -- идентификатор объекта HAL.
* ''<tt>$UDI</tt>'' — идентификатор объекта HAL.
* ''<tt>$MOUNT_POINT</tt>'' -- требуемое имя для точки монтирования (без <tt>/media/</tt> -- эту часть изменить нельзя). Можно указать пустую строку, тогда по умолчанию будет использована метка тома. Если имя уже занято, к нему автоматически добавляется номер, делающий его уникальным (<tt>''name''-1</tt>, <tt>''name''-2</tt>, ...).
* ''<tt>$MOUNT_POINT</tt>'' — требуемое имя для точки монтирования (без <tt>/media/</tt> — эту часть изменить нельзя). Можно указать пустую строку, тогда по умолчанию будет использована метка тома. Если имя уже занято, к нему автоматически добавляется номер, делающий его уникальным (<tt>''name''-1</tt>, <tt>''name''-2</tt>, ).
* ''<tt>$MOUNT_OPTIONS</tt>'' -- опции монтирования в обычном виде (через запятую). Опции можно указывать только из набора, указанного в свойстве <tt>volume.mount.valid_options</tt>, причём на опцию <tt>uid=</tt> налагаются дополнительные ограничения -- можно указывать только идентификатор пользователя, вызывающего эту команду, в виде числа (т.е., <tt>uid=`id -u`</tt>). Опции <tt>noexec,nosuid,nodev</tt> устанавливаются принудительно. Никакие другие опции автоматически не добавляются -- в частности, опции <tt>codepage=...</tt> и <tt>iocharset=...</tt>, если они требуются для монтируемой ФС, нужно указывать явно.
* ''<tt>$MOUNT_OPTIONS</tt>'' — опции монтирования в обычном виде (через запятую). Опции можно указывать только из набора, указанного в свойстве <tt>volume.mount.valid_options</tt>, причём на опцию <tt>uid=</tt> налагаются дополнительные ограничения — можно указывать только идентификатор пользователя, вызывающего эту команду, в виде числа (то есть, <tt>uid=`id -u`</tt>). Опции <tt>noexec,nosuid,nodev</tt> устанавливаются принудительно. Никакие другие опции автоматически не добавляются — в частности, опции <tt>codepage=...</tt> и <tt>iocharset=...</tt>, если они требуются для монтируемой ФС, нужно указывать явно.


Отмонтировать смонтированное таким образом устройство можно командой:
Отмонтировать смонтированное таким образом устройство можно командой:
Строка 143: Строка 143:
<pre>dbus-send --system --print-reply --dest=org.freedesktop.Hal "$UDI" org.freedesktop.Hal.Device.Volume.Unmount array:string:</pre>
<pre>dbus-send --system --print-reply --dest=org.freedesktop.Hal "$UDI" org.freedesktop.Hal.Device.Volume.Unmount array:string:</pre>


Реализацию этих методов можно посмотреть в скриптах <tt>/usr/share/hal/scripts/hal-system-storage-mount</tt>, <tt>/usr/share/hal/scripts/hal-system-storage-unmount</tt>.
Реализацию этих методов можно посмотреть в скриптах <tt>/usr/share/hal/scripts/hal-system-storage-mount</tt>, <tt>/usr/share/hal/scripts/hal-system-storage-unmount</tt>.

Версия от 20:06, 3 августа 2008

42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.
Merge-arrow.svg
Необходимо перенести содержимое этой статьи в статью IvmanAutomount
Вы можете помочь проекту, объединив их.


kde 3.5.2: если стартует при незапущенном hal, показывает в /media устройства в виде:

жесткий диск (hda2)
жесткий диск (hda5)

и даже для смонтированных nfs:

жесткий диск (amp:/net)

это fstab бэкэнд. если служба «управление подключаемыми устройствами» стартует при запущенном hal, то используется hal бэкэнд:

носитель 1.2 Gb
носитель 4.1 Gb
USB DISK

причем, имя устройства все еще можно увидеть в поле «ссылка». ссылки ведут в виртуальные url (media kioslave) вида system:/media/devname: в system:/media/hda2 открывается /, а usb disk (system:/media/sdb1) смонтирован вовсе не в /media/sdb1, и даже не в /media/disk. то ли media:/ сам лезет к устройству, то ли открывает в соответствии с /proc/mounts. больше похоже на второе, так как при открытии устройство автоматически монтируется, если было отмонтировано.


При втыкании кде монтирует разделы флэшек в /media/disk???. (говорят, с помощью pmount — сомневаюсь, так как при control pmount restricted все равно монтирует, из чего я делаю вывод, что pmount тут почти совсем ни при чем). при этом

$ grep sdb /proc/mounts
/dev/sda1 /media/disk vfat rw,nosuid,nodev,noexec,noatime,uid=502,fmask=0077,dmask=0077,codepage=cp866,iocharset=koi8-r,utf8 0 0
root@pad /etc/hal/policy # hal-find-by-property --key block.device --string /dev/sda1
/org/freedesktop/Hal/devices/volume_uuid_3087_3C40
root@pad /etc/hal/policy # lshal -l --show /org/freedesktop/Hal/devices/volume_uuid_3087_3C40 > lshal.1
root@pad /etc/hal/policy # cat lshal.1
udi = '/org/freedesktop/Hal/devices/volume_uuid_3087_3C40'
  info.hal_mount.mounted_by_uid = 502  (0x1f6)  (int)
  info.hal_mount.created_mount_point = '/media/disk'  (string)
  wmvolman.should_mount = true  (bool)
  wmvolman.should_display = true  (bool)
  volume.unmount.valid_options = {'lazy'} (string list)
  volume.mount.valid_options = {'ro', 'sync', 'dirsync', 'noatime', 'nodiratime', 'noexec', 'quiet', 'utf8', 'shortname=', 'codepage=', 'iocharset=', 'umask=', 'dmask=', 'fmask=', 'uid='} (string list)
  org.freedesktop.Hal.Device.Volume.method_execpaths = {'hal-system-storage-mount', 'hal-system-storage-unmount', 'hal-system-storage-eject'} (string list)
  org.freedesktop.Hal.Device.Volume.method_signatures = {'ssas', 'as', 'as'} (string list)
  org.freedesktop.Hal.Device.Volume.method_names = {'Mount', 'Unmount', 'Eject'} (string list)
  info.interfaces = {'org.freedesktop.Hal.Device.Volume'} (string list)
  volume.ignore = false  (bool)
  info.udi = '/org/freedesktop/Hal/devices/volume_uuid_3087_3C40'  (string)
  volume.partition.msdos_part_table_type = 6  (0x6)  (int)
  info.product = 'USB DISK'  (string)
  volume.size = 254263296  (0xf27c000)  (uint64)
  volume.num_blocks = 496608  (0x793e0)  (int)
  volume.block_size = 512  (0x200)  (int)
  volume.partition.number = 1  (0x1)  (int)
  info.capabilities = {'volume', 'block'} (string list)
  info.category = 'volume'  (string)
  volume.is_partition = true  (bool)
  volume.is_disc = false  (bool)
  volume.is_mounted = true  (bool)
  volume.mount_point = '/media/disk'  (string)
  volume.label = 'USB DISK'  (string)
  volume.uuid = '3087-3C40'  (string)
  volume.fsversion = 'FAT16'  (string)
  volume.fsusage = 'filesystem'  (string)
  volume.fstype = 'vfat'  (string)
  storage.model = ''  (string)
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_CANYON_CN_USB20EFD0256A_ccb3380364035e'  (string)
  block.is_volume = true  (bool)
  block.minor = 1  (0x1)  (int)
  block.major = 8  (0x8)  (int)
  block.device = '/dev/sda1'  (string)
  linux.hotplug_type = 3  (0x3)  (int)
  info.parent = '/org/freedesktop/Hal/devices/storage_serial_CANYON_CN_USB20EFD0256A_ccb3380364035e'  (string)
  linux.sysfs_path_device = '/sys/block/sda/sda1'  (string)
  linux.sysfs_path = '/sys/block/sda/sda1'  (string)

«безопасно извлечь» соответственно нормально отмонтирует флэшку, получая

root@pad /etc/hal/policy # lshal -l --show /org/freedesktop/Hal/devices/volume_uuid_3087_3C40 > lshal.2
root@pad /etc/hal/policy # diff -Naur lshal.1 lshal.2
@@ -1,6 +1,4 @@
 udi = '/org/freedesktop/Hal/devices/volume_uuid_3087_3C40'
-  info.hal_mount.mounted_by_uid = 502  (0x1f6)  (int)
-  info.hal_mount.created_mount_point = '/media/disk'  (string)
   wmvolman.should_mount = true  (bool)
   wmvolman.should_display = true  (bool)
   volume.unmount.valid_options = {'lazy'} (string list)
@@ -21,8 +19,8 @@
   info.category = 'volume'  (string)
   volume.is_partition = true  (bool)
   volume.is_disc = false  (bool)
-  volume.is_mounted = true  (bool)
-  volume.mount_point = '/media/disk'  (string)
+  volume.is_mounted = false  (bool)
+  volume.mount_point = ''  (string)
   volume.label = 'USB DISK'  (string)
   volume.uuid = '3087-3C40'  (string)
   volume.fsversion = 'FAT16'  (string)

однако, если после этого смонтировать ее вручную:

$ id
uid=502(gns) gid=502(gns) группы=10(wheel),108(xgrp),502(gns)
$ pmount /dev/sdb1
$ grep sdb /proc/mounts
/dev/sdb1 /media/sdb1 vfat rw,nosuid,nodev,noexec,uid=502,gid=502,fmask=0077,dmask=0077,codepage=cp866,iocharset=utf8,shortname=mixed,quiet 0 0

то КДЕ ee открывает (даже при нестандартном mount_point), но не может отмонтировать с руганью:

kio_media_mounthelper: volume mounted by uid unknown cannot be unmounted by uid 502.

что похоже связано с:

root@pad /etc/hal/policy # lshal -l --show /org/freedesktop/Hal/devices/volume_uuid_3087_3C40 > lshal.3
root@pad /etc/hal/policy # diff -Naur lshal.1 lshal.3
 udi = '/org/freedesktop/Hal/devices/volume_uuid_3087_3C40'
-  info.hal_mount.mounted_by_uid = 502  (0x1f6)  (int)
-  info.hal_mount.created_mount_point = '/media/disk'  (string)
   wmvolman.should_mount = true  (bool)
   wmvolman.should_display = true  (bool)
   volume.unmount.valid_options = {'lazy'} (string list)
@@ -22,7 +20,7 @@
   volume.is_partition = true  (bool)
   volume.is_disc = false  (bool)
   volume.is_mounted = true  (bool)
-  volume.mount_point = '/media/disk'  (string)
+  volume.mount_point = '/media/sda1'  (string)
   volume.label = 'USB DISK'  (string)
   volume.uuid = '3087-3C40'  (string)
   volume.fsversion = 'FAT16'  (string)

но кто и зачем добавляет эти info.hal_mount.mounted_by_uid — неясно. если KDE монтирование делает через hal method — это многое объясняет. или hal добавляет сам после вызова callout, что логично. Либо добавляет сам KDE — это было бы бессмысленно, имхо.

Из вышесказанного следует, что при использовании ivman 0.6.12 / pmount 0.9.9 про размонтирование из КДЕ можно забыть.

предположим, мы научим ivman (скорее, pmount-hal) работать через вызов mount method. тогда надо выяснить, как заставить его использовать тот mount_point что я скажу вместо /media/disk. KDE вроде бы как-то это делает, ecли задать в свойствах /media/canyon — монтируется в /media/canyon-1 (возможно — добавляется номер раздела).

hal policy враги выкинули вместе с desired_mount_point :(поэтому выбор точки монтирования придется реализовывать в конфигах ivman.

[root@nirvana bin]# grep hal_mount *
[root@nirvana bin]# cd /usr/X11R6/bin/
[root@nirvana bin]# grep hal_mount *
[root@nirvana bin]# cd /usr/sbin/
[root@nirvana sbin]# grep hal_mount *
Binary file hald matches

Вызывать HAL method для монтирования можно, например, таким способом:

dbus-send --system --print-reply --dest=org.freedesktop.Hal "$UDI" org.freedesktop.Hal.Device.Volume.Mount string:"$MOUNT_POINT" string: array:string:"$MOUNT_OPTIONS"

Параметры:

  • $UDI — идентификатор объекта HAL.
  • $MOUNT_POINT — требуемое имя для точки монтирования (без /media/ — эту часть изменить нельзя). Можно указать пустую строку, тогда по умолчанию будет использована метка тома. Если имя уже занято, к нему автоматически добавляется номер, делающий его уникальным (name-1, name-2, …).
  • $MOUNT_OPTIONS — опции монтирования в обычном виде (через запятую). Опции можно указывать только из набора, указанного в свойстве volume.mount.valid_options, причём на опцию uid= налагаются дополнительные ограничения — можно указывать только идентификатор пользователя, вызывающего эту команду, в виде числа (то есть, uid=`id -u`). Опции noexec,nosuid,nodev устанавливаются принудительно. Никакие другие опции автоматически не добавляются — в частности, опции codepage=... и iocharset=..., если они требуются для монтируемой ФС, нужно указывать явно.

Отмонтировать смонтированное таким образом устройство можно командой:

dbus-send --system --print-reply --dest=org.freedesktop.Hal "$UDI" org.freedesktop.Hal.Device.Volume.Unmount array:string:

Реализацию этих методов можно посмотреть в скриптах /usr/share/hal/scripts/hal-system-storage-mount, /usr/share/hal/scripts/hal-system-storage-unmount.