CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
19.09.2019

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Дистрибутивы :: BSD :: FreeBSD

FreeBSD: монтирование сменных устройств и механизм HAL

CITKIT.ru

В одном из комментариев к Саге о FreeBSD мне попалась такая фраза от некоего анонима:

бсдшники настолько суровы, что флешки вручную монтируют.

Что на это можно ответить? Да, фришники — народ суровый, и монтируют флешки вручную. Более того, делают это только от root'а. И поступают так же с компактами, сменными дисками и носителями цифровых камер. Правда, только тогда, когда им этого хочется.

А когда им это становится лениво, они настраивают возможность монтирования сменных устройств от лица пользователя. И, дабы уж до конца испугать анонимов своей суровостью, подчас не брезгуют даже автоматическим монтированием.

Давеча как раз этим мне и пришлось заниматься на одной дружественной машине, так что я решил вкратце описать последовательность действий — поскольку собственно в Саге о FreeBSD речь до этого дойдёт ещё не скоро, а нервы анонимов надо беречь — иначе кто же будет комментировать материалы в таких количествах?

Начнём с вопроса о монтировании с правами юзера.

Начинающих пользователей FreeBSD, имеющих некоторый опыт работы в современных дистрибутивах Linux'а, часто раздражает необходимость получать права администратора для монтирования сменных накопителей (компакт-дисков, флэшек, носителей цифровых камер и тому подобных). И по умолчанию это действительно так, а попытки решить эту задачу простым редактированием файла /etc/fstab по образу и подобию Linux'ового успеха иметь не будут — опция user, обеспечивающая эту функцию в последней ОС, командой mount из FreeBSD не поддерживается.

И тем не менее необходимость административных прав для монтирования сменных устройств во FreeBSD — кажущаяся. Вот только для реализации права юзера на монтирование потребуются несколько иные действия, нежели в Linux'е.

Для начала необходимо обеспечить пользователю права доступа к файлам устройств, соответствующих сменным носителям — напомню, что это файлы вида /dev/acd# для компакт-дисков и /dev/da0 для любых носителей с USB-интерфейсом. Поскольку, начиная с ветки 5, во FreeBSD используется файловая система устройств devfs, прямое изменение атрибутов доступа командой типа chown ничего не даст: она, как известно, пересоздаётся при каждом рестарте машины. А потому пойдём иным путём: получив привилегии root'а, устанавливаем необходимые права доступа к файлам сменных устройств в файле /etc/devfs.conf, отвечающем за поведение файловой системы devfs, вписав в него такие строки:

perm    /dev/acd0    0666
perm    /dev/xpt0    0666
perm    /dev/pass0   0666
perm    /dev/da0	 0666
perm    /dev/da0s1   0666
...

и так далее.

Заодно тут же снимаем символ комментария со строки

#link    acd0    cdrom

Благодаря этому при воссоздании devfs перечисленные выше файлы не только получат нужные атрибуты доступа (чтение и запись для владельца, группы и прочих) , но будет устанавливаться также символическая ссылка для файла /dev/cdrom -> /dev/acd0: такое имя привода компакт-диска желают видеть некоторые программы, например, mplayer.

Затем в файле /ect/sysctl.conf разрешаем монтирование VFS от имени обычного пользователя:

vfs.usermount=1

Теперь возвращаем себе права обычного пользователя и от его имени создаём в домашнем каталоге точки монтирования для сменных устройств:

% mkdir ~/cdrom ~/usb [что ещё нужно]

Проверяем правильность настроек командами:

% /sbin/mount -t msdosfs /dev/da0s1 ~/usb
% /sbin/mount -t cd9660 -o ro /dev/da0s1 ~/cdrom

Если монтирование проходит нормально, то вносим в файл /etc/fstab соответствующие строки:

/dev/acd0 /home/username/cdrom cd9660 ro,noauto 0 0
/dev/da0s1 /home/username/usb msdosfs rw,noauto 0 0

Однако возможно, что после всех предпринятых шагов флэшка или компакт откажутся монтироваться от лица пользователя, выдав предупреждение, что

Operation not permitted

Почему — тайна сия велика есть, но такой результат не исключён. Однако и тут есть решение, даже два, правда, оба — на уровне шаманских рецептов.

Первое решение — это (от лица суперпользователя) присвоить командам /sbin/mount и /sbin/umount так называемый бит суидности:

# chmod a+s /sbin/mount /sbin/umount

Не очень изящно, но, говорят, работает.

Второе же решение — вообще попахивает колдовством: произвести монтирование и размонтирование устройства от имени администратора в процессе инициализации системы. Проще всего это сделать посредством скрипта следующего содержания:

#!/bin/sh
mount /cdrom;  umount /cdrom
mount /mnt; umount /mnt

который поместить в каталог /usr/local/etc/rc.d/ под именем, например, mount_umount.sh. Наличие компакта в приводе или флэшки, подсоединённой к USB-порту, не обязательно.

Мне с такой ситуацией сталкиваться не пришлось, но, говорят, что и это тоже работает: по окончании загрузки сменные устройства монтируются пользователем без всяких проблем.

Однако есть и более радикальный метод настройки монтирования сменных носителей от лица пользователя — использование механизма HAL (Hardware Abstraction Level). Правда, насколько мне известно, работает он только в Иксах, точно — в интегрированных средах KDE, GNOME и Xfce, за менеджеры окон не скажу по незнанию. Хотя, судя по тому, что порт hal идёт в качестве зависимости X-сервера, вероятно, и в некоторых из них этот механизм также поддерживается.

Итак, для начала необходимо установить соответствующий порт — /usr/ports/sysutils/hal. Правда, как только что было сказано, при установке Иксов и какой-либо из интегрированных сред он уже будет инсталлирован как зависимость, причём вместе с графическим фронт-эндом к нему (в случае с GNOME и Xfce это будет порт /usr/ports/sysutils/gnome-mount).

Далее, надо обеспечить запуск соответствующих демонов при старте системы. Собственно, демон, отвечающий за механизм HAL, так и называется — hald. Однако он зависит еще от нескольких стартовых служб — devd, usbd, dbus. Некоторые из них могут быть уже запущены — например, devd запускается по умолчанию (как это установлено в файле /etc/defaults/rc.conf). Определить, какие демоны уже функционируют можно, например, командой

# ps ux

Просматриваем её вывод и вписываем в файл /etc/rc.conf все недостающие строки из следующего набора:

usbd_enable="YES"
dbus_enable="YES"
hald_enable="YES"

Подчеркну, что никакой необходимости в установке прав доступа к файлам устройств или редактировании /etc/fstab, что требовалось при настройке описанного выше пользовательского монтировании вручную, при использовании механизма HAL не возникает. Хотя она (настройка) и ничему не мешает.

Теперь — собственно настройка. Она проста как грабли: отправляемся в каталог /usr/local/etc/PolicyKit и обнаруживаем там файл PolicyKit.conf. По умолчанию содержимое его следующее:

<config version="0.1">
    <match user="root">
	<return result="yes"/>
    </match>
    <define_admin_auth group="wheel"/>
</config>

Что предваряется следующей фразой:

<!-- See the manual page PolicyKit.conf(5) for file format -->

Руководствуясь man (5) PolicyKit.conf, между строками

    <define_admin_auth group="wheel"/>

и

</config>

дописываем следующие строки:

	<match action="org.freedesktop.hal.storage.mount-removable">
              <return result="yes"/>
	</match>
    <match action="org.freedesktop.hal.storage.mount-fixed">
               <return result="yes"/>
	</match>

разрешающие членам группы wheel монтирование сменных и внутренних носителей, соответственно. Мы ведь не забыли ранее включить нашего главного пользователя в эту группу, не так ли?

И после реинициализации системы (например, посредством временного перехода в однопользовательский режим или полного рестарта) получаем возможность автоматического монтирования сменных устройств сразу вслед за их помещением в привод или подсоединением к USB-порту.

По собственному опыту, через HAL нормально монтируется всё, что способно монтироваться: CD- и DVD-диски, флэшки, внешние винчестеры с USB-интерфейсом, носители внутри фотокамер и они же, подключённые через кард-ридер. Единственная проблема возникла с флэшкой, переформатированной через штатную опцию Windows умолчально, то есть с файловой системой VFAT не на разделе, а непосредственно на raw-устройстве. В чём дело - пока не понял, руками эта же флэшка монтируется как устройство /dev/da0, хотя и со второго пинка.

Конечно, в отличие от современных дистрибутивов Linux, где HAL, как правило, работает "из коробки", во FreeBSD подключение этого механизма требует некоторых телодвижений. Но, как мы только что видели, совсем не сложных. А для совсем уж ленивых существует PC-BSD — там HAL задействуется по умолчанию, точно так же, как и в любом Linux'е (о чем вкратце сказано здесь).




Комментарии

Страницы комментариев: предыдущая :: 1 :: 2 :: 3 :: 4 :: следующая

Алексей Федорчук, Wed Nov 19 19:32:57 2008:
2 VISiTER
Если не прочитали - то, конечно, комментировать совершенно нечего :)
аноним, Wed Nov 19 19:19:01 2008:
ps: пардон, тут более подходящий fuser, а не лсоф, чтоб сразу прибить процесс
VISiTER, Wed Nov 19 19:17:48 2008:
Прямо со старта сразу "666"... Что тут еще комментировать?!
аноним, Wed Nov 19 19:17:36 2008:
>>а я вот не повесил :)

да,да, очень известная решение опенсурса, "у меня работает, значит проблемы нету, у тебя проблема сам и решай"=)

про обскакивание окон в поисках, наверное предлагаете пользовацца lsof, но подумайте, что удобнее, просто дёрнуть флешку, или заюзать lsof, прибив процесс удерживающий файл, после чего переключиться на мышу гоняя её для отмонтирования, или нажать заветный хоткей для отмонтирования, если юзер был не ленивый и забиндил?

когда кстати знакомился с юниксом и тогда не мог понять глупости, почему нет простого и действительного метода для автомонтирования устройств?
ведь все эти ныне соверменные udev&&dbus&&hald такие аццкие костыли. для примитивного действия монтирования мы используем множество мегабайт кода. раньше были ещё более глючные костыли вроде supermount, uwd, etc. или вообще ручное монтирование. понимаю про многопользовательскую систему и безопасность, но наверняка можно было сделать что-то, которое бы просто проверяло права, примерно как это делают devd && udevd.
даже жуткий дос, не к ночи помянутый, отлично монтировал девайсы вроде дискет и сд.
Алексей Федорчук, Wed Nov 19 18:58:48 2008:
2 аноним
А чтобы все окна не обскакивать, почитайте статью Лукаса, есть на этом сайте в русском переводе.
Там всё написано :)
Алексей Федорчук, Wed Nov 19 18:57:13 2008:
2 аноним
а я вот не повесил :)
Я то-то сделал не так? Не стукнул по флэке кувалдой?
аноним, Wed Nov 19 18:54:42 2008:
гыгы, только что в подтверждение своих же слов повесил фряху выдернув карточку на лету=) да, виснет, причём сейчас упала так, что система не грузится, хочет чтоб руками прочекал=) в линуксе конечно такой же hald && dbus, но там нет проблемы с хотплагом усб устройств, а значит никто не мешает дёргать флешку не отмонтировав. если использован был ключ монтирования sync, то бед с выдергиванием когда нет записи быть не может, а геморрой "закройте приложение, а то не отмонтирую" достаёт очень сильно, когда вынужден обскакать все окна консолей смотря где же не вышел из каталога? у венды 2000 можно было нажить проблем выдернув флешку не отмонтировав, у хр походу уже идёт при монтировании sync. в макосе тоже никто не запрещает дёргать флешку не отмонтировав, и у солярки небыло проблем, или я их не видел, а вот у фри раз на раз не приходится, но шанс повесить ось очень велик=) даже разработчики это признают.

да и про картридер я прав, проверил, правда не опзнаёт смену карточки, что недопустимо для десктопа или ноутбука, где картридер встроенный.

в общем-то, не самая радужная картина при использовании фри в качестве десктопа.
Алексей Федорчук, Wed Nov 19 18:28:32 2008:
2 последний аноним, вдогонку
Только что выдрал из порта подключённу описанным в заметке методом флэшку, и не отключённу, и не отмонтированну, и даже с содержимым, открытым в Тунаре. Вреда ни малейшего.

А указанная бага бывает, когда монтируешь флэшку от рута руками
Алексей Федорчук, Wed Nov 19 18:26:03 2008:
2 аноним, среда, 19 ноября 2008 г. 17:52:37:
> да и размонтирование через "отсоединить том" совсем не прельщает
____
А что, в Линуксе иначе? HAL, между прочим, один и тот же
И настраивается одинаково.
И даже в вынь-де, не к ночи будь помянута, выдирание флэшки без отключения тоже чревато потерей данных.

А с карточками и кард-ридером - это Вы идею подкинули, спасибо. Только пока не реализуемую - в отличие от флэшек, которых прошло через мои руки вагонами, карточка у меня только одна, что в моей мыловарке, и я даже не помню, как она называется :)
аноним, Wed Nov 19 17:52:37 2008:
чмоке дядько федорчуг! прийатно што на моей фразе про суровых бсдшников основал обзор монтирования во фре=) однако метод в бсд всё равно выглядит "черезжопно". по слухам с (lissyara.su) у кед будут проблемы с русскими символами. да, я помню что вы их считаете злом, но как-то не повернётся язык послать нах приятеля, который принесёт файло на флешке, на олбанскам с просьбой распечатать.
да и размонтирование через "отсоединить том" совсем не прельщает, куда удобнее просто выдернуть флешку, тем более когда она монтируется sync. а во фре у нас что будет если мы её выдернем? с огромной вероятностью мы словим кернел паник. проблема известна много лет, но до сих пор не решается, хотя о чудо, про неё заметили и неделю назад кто то из девелоперов сказал "будем решать"=)
ещё почти уверен, что если воткнём не флешеку, а карточку в многоформатный карт-ридер, то при смене карточки придётся выдернуть и воткнуть заново картридер, иначе карточка не будет перечитана на новую, хотя может быть этой беды нету=)

Страницы комментариев: предыдущая :: 1 :: 2 :: 3 :: 4 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds