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 :: следующая

гы, Thu Nov 20 23:57:10 2008:
Я так мыслю - в параллельный мир ввалился.
Гы!
V, Thu Nov 20 19:57:00 2008:
Ну, короче говоря, если я правильно понял, то после выдергивания флэшки про конструкции типа grep -r "blablabla" / придется забыть...
Алексей Федорчук, Thu Nov 20 19:35:03 2008:
2 аноним, четверг, 20 ноября 2008 г. 19:03:32:
> система просто обязана корректно реагировать на подобные мелкие "ошибки"
____
Кому обязана? И кто её обязал? Партия и правительство?

А вообще здорово сказано: система просто обязана корректно реагировать на некорретные действия альтернативно одарённого пользователя
Заберу к себе в цитатник, не против?
аноним, Thu Nov 20 19:03:32 2008:
ну погнал;) палец, человек... причём здесь это? система просто обязана корректно реагировать на подобные мелкие "ошибки", собственно все системы кроме фри отлично справляются с этим. дело в том, что это хотплаг, знаете ли, а втыкание/вытыкание девайсов в хотплаг непредсказуемо с точки зрения системы, и зависать она не имеет права по такому пустяку;) конечно, если бы это была pci шина, меня бы не удивила зависшая система если выреднуть из неё девайс, но _USB_, которая и планировалась как шина горячего подключения вешает систему наглухо, это перебор=)

боюсь даже спросить работает ли на вашем железе acpi, зная что у него тоже не всё хорошо и гладко и проблемы с непросыпанием системы из s3 очень часты, хотя предвижу ваш ответ, "я не пользуюсь, т.к. это не тру", а знаете ли очень удобно когда ноут просыпаецца за несколько секунд, с открытми где бросил приложениями. правда это уже тут оффтопик=)
Алексей Федорчук, Thu Nov 20 10:18:58 2008:
2 V
Ничего не происходит - его содержимое по прежнему якобы видно (говорят, что у людей, которым ампутировали конечность, она ещё долго болит).
Можно выйти из каталога и вернуться в него - содержимое по прежнему выводится.
А вот при попытке считать оттуда файл - да, действительно, происходит мёртвый зависон. Что и понятно - палец ведь у человека тоже сам собой не вырастет :)

PS попросил прощения у системы за издевательства - типа они на благо науки были, как над собачками Павлова...
Алексей Федорчук, Thu Nov 20 10:03:38 2008:
аноним
> да,да, очень известная решение опенсурса, "у меня работает, значит проблемы нету, у тебя проблема сам и решай"=)
____
У меня действительно нет этой проблемы. Знаете, почему? Потому что я _никогда_ не выдергиваю никакие носители, не размонтировав их. И ведь этому учат на первых же страницах любой книжки по Unix/Linux/etc.
Вас ведь не удивляет, что, если у человека выдернуть палец, он тоже немного зависнет. Вплоть до смерти от болевого шока - только вот кнопки Reset у человека нету :)
Так почему Вас удивляет то, что система не любит, когда из её живого работающего организма что-то выдирают?
Анекдот про двух аглицих джентльменов (из Оксфорда и Кембриджа) знаете?
Так может быть, лучше, чем мыть руки после туалета, не справлять малую нужду на руки?
V, Thu Nov 20 00:16:26 2008:
вопрос тов. Федорчуку - что делает hal с каталогом, куда была смонтирована флэшка, если ее выдернуть?
аноним, Wed Nov 19 19:41:03 2008:
зависон у меня наступил при выдергивании, когда пользователь рут занял флешку. так же зависон usb хотплага может наступить при выдергивании усб-модема, усб вай-фай, етк, етк, когда устройство используется
аноним, Wed Nov 19 19:39:21 2008:
>>А про СВ в DOS сказки-то не рассказывайте :)

что не так? загрузка из config.sys драйвера типа cdrom.sys и в autoexec'e mscdex, полностью решали проблему монтирования в досе, к тому же дискетка с драйверами, автоматически прописывающая всё что надо, шла в комплекте с почти любым не oem приводом. 2 файла против кучи систем.
Алексей Федорчук, Wed Nov 19 19:34:49 2008:
2 аноним
Вы же меня не просветили, как надо повесить :)
Навреное, табуретку из под виселицы выбить?

А про СВ в DOS сказки-то не рассказывайте :)

Страницы комментариев: предыдущая :: 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