LINUX.ORG.RU

Монтирование съёмных носителей во FreeBSD: помогите!

 , , , ,


3

2

Всем привет! Продолжается моя эпопея по превращению FreeBSD в приличный десктоп. На этот раз я столкнулся с критической проблемой: монтирование носителей. А если быть точнее - внешних дисков с NTFS и своих линуксовых разделов. Установил я KDE 4 (после долгих раздумий), сделал всё по инструкциям, которые собирал по всему интернету и описал в своем блоге. Что мне нужно? Мне нужно чтобы я в Dolhpin кликнул по значку нужного мне диска - и он сразу смонтировался и открылся, как в Линуксе. Но вместо этого я получаю ошибку org.freedesktop.Hal.Device.Volume.UnknownFailure: mount: illegal option -- u usage: mount [-t fstype] [-o options] target_fs mount_point С помощью гуглежа проблему решить не удалось, зато наткнулся на сообщение разрабов PC-BSD, что это проблема KDE, точнее того, что оно завязано на Линукс и использует линуксоспецифичные команды монтирования дисков. Решил попробовать MATE - вообще никакой реакции на клик по диску в Caja. Собственно, вопрос очевиден: как сделать хорошо? Ибо монтирование всего подряд через консоль - это для меня уже предел извращенства.

Ответ на: комментарий от iZEN

Уточнил. mate-base использует 10-camera-ptp.fdi из hal-info-20091130, а тот уже зависит от hal.pc из пакета hal-0.5.14.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Automount напрямую взаимодействует с devd, это фактически его дополнение.

Devd это такая штука, которая запускает действия, когда в системе что-то изменится? Вставил флешку, в /dev появилось новое устройство, и devd запускает указанную программу, так?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В общем, да. Это сервис операционной системы, который рассылает нотификации программам-подписчикам на изменение аппаратной конфигурации и/или запускает команды оболочки. В принципе, в /etc/devd.conf можно написать команду автомонтирования самому, как я это делал раньше:

attach 10 {
match "device-name" "umass[0-9]+";
action "sleep 4 && mkdir -p /media/$device-name && chown -R username /media/$device-name && \
(/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0s1 /media/$device-name || \
/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0 /media/$device-name)";
};
detach 10 {
match "device-name" "umass[0-9]+";
action "/sbin/umount -f /media/$device-name && rm -r /media/$device-name";
};
Тут проблема в корректности отмонтирования - оно происходит ПОСЛЕ отсоединения девайса, это фактически «уборка мусора». Кроме того, из-за простоты реализации нет условия монтирования носителя по определённому типу ФС и разделу разметки. Automount дополняет devd определёнными условиями и действиями на них, только и всего:
> cat /usr/local/etc/devd/automount_devd.conf
notify 100 {
  match "system" "DEVFS";
  match "type" "CREATE";
  match "cdev" "(da|mmcsd)[0-9]+.*";
  action "/usr/local/sbin/automount $cdev attach";
};

notify 100 {
  match "system" "DEVFS";
  match "type" "DESTROY";
  match "cdev" "(da|mmcsd)[0-9]+.*";
  action "/usr/local/sbin/automount $cdev detach";
};
Программа /usr/local/sbin/automount написана на языке оболочки - /bin/sh и довольно увесиста, чтобы здесь приводить.

iZEN ★★★★★
()
Ответ на: комментарий от i-rinat

А монтируется само? Или можно по указке пользователя?

Чисто технически - в /media появляется каталог с именем флешки/носителя. А монтируется оно непосредственно при обращении.

можно по указке пользователя?

Можно.

anonymous
()
Ответ на: комментарий от i-rinat

UDisks выглядит адекватнее.

Только devd - это аналог udav (вернее, чисто технически - наоборот). А потом уже идет костыляние сверху - в devd прописывается «action», в котором можно дергать что угодно.
Automount из портов, показаный iZenом - простейший (но достаточно мощный) лисапед - devd тупо дергает скрипт с параметром подключенного устройства, тот дергает fstype для определения типа ФС и запускает соотв. mount_foo. Штатный automount чуть сложнее - там еще идет дровина для отлова обращений к устройству, шаре и т.д. чтобы монтировать только при необходимости.
Вся «загвоздка» в том, что на гуй оно не расчитано (хотя велосипед любой сложности прикручивается легко, есть как минимум один «линуксовсий» ФМ, умеющий это из коробки, без патчей), а udisks, как я понимаю и есть такой велосипед-посредник к которому подключаются гуевины. И нужно портировать его, чтобы не патчить 100500 разных приложений.

anonymous
()
Ответ на: комментарий от anonymous

Попробовал завести автомонтирвоание через autofs - тома определяются медленно, в Thunar надо F5 нажимать, на FAT32-флэшке файлы и папки с русскими именами не отображаются. При отсоединении носителя постоянно ошибки отмонтирования - «устройство занято».

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от anonymous

Оно и видно. Сколько раз успели замену HAL переписать? Три или уже четыре?

HAL => DeviceKit => disks => udisks => udisks2 => storaged => (финт ушами с переименованием) => udisks2

anonymous
()

Раз тема пока открыта, такой ещё вопросец. Почему бинарные пакеты не обновляются? Вот допустим в портах есть MATE 1.18, а из пакетов ставится только 1.12. Так со всеми пакетами? Система вообще никак не обновляется если их юзать?

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Понятный текстовый конфиг. А не как у лиунсоидов - всё через XML и в разных пакетиках разложено (Hal, PolicyKit, ConsoleKit).

iZEN ★★★★★
()
Ответ на: комментарий от Sunderland93

Почему бинарные пакеты не обновляются?

Правильная постановка вопроса: «Поставил версию XY [вангую: релиз] как мне ставить последние бинарные версии пакетов?» или хотя бы «почему у меня не обновляются пакеты?». Более опытный пользователь пингвина спросил бы «Товарищи, а правильные ли репы я использую?» ... но нет, в лучших традициях лапчатизма - «у вас ниработаит!».

Вот допустим в портах есть MATE 1.18, а из пакетов ставится только 1.12

% pkg rquery %n-%v mate
mate-1.18.0

Так со всеми пакетами? Система вообще никак не обновляется если их юзать?

Понимаешь, когда ты ставишь RELASE, то по умолчанию у такого пользователя предполагается тяга к некоторой стабильности и поэтому используется репа с квартальными срезами. В STABLE/CURRENT репа по умолчканию с последними версиями. Посмотри выхлоп pkg -vv, там должна быть строчка

    url             : "pkg+http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly",
Теперь берешь правильный редактор (ее), открываешь [/usr/local]/etc/pkg/freebsd.conf и заменяешь quarterly на latest.
FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
pkg update && pkg upgrade [-f] && profit!

anonymous
()
kern.sched.preempt_thresh=224

Добавь для лучшей отзывчивости еще

kern.sched.interact=10

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.