CDEmu и все-все-все

Материал из ALT Linux Wiki

Озадачившись решить проблему с разнообразием способов монтирования образов дисков в Альт Линуксе (советовать простому смертному "mount -o loop" - не самый лучший вариант), первым делом решил глянуть на CDEmu и его оболочки, благо, для раб. столов на базе GTK она есть в репозиториях (для QT имеется тоже, правда, НЕ в репозиториях).

Установив нужные пакеты (cdemu-client, cdemu-daemon, gcdemu), я перезагружаюсь, и после входа, выбрав образ, жму по нему правой кнопкой мыши и выбираю пункт "Открыть с помощью => Клиент CDEmu". И... Ничего. То есть совсем ничего. Попробовав ещё пару раз, я полез в консоль, и попробовал примонтировать образ через cdemu оттуда. Ответ был получен незамедлительно:

ОШИБКА: Не удалось подключиться к демону CDEmu: g-dbus-error-quark: Error calling StartServiceByName for net.sf.cdemu.CDEmuDaemon: GDBus.Error:org.freedesktop.DBus.Error.Spawn.ChildExited: Process net.sf.cdemu.CDEmuDaemon exited with status 255 (25)

Сам демон выдал следующее:

> Запуск демона CDEmu со следующими параметрами:
> - количество накопителей: 4
> - управление накопителем: /dev/vhba_ctl
> - аудиодрайвер: null
> - тип шины: session
>
> cdemu0: Kernel I/O: failed to open control device /dev/vhba_ctl: Нет такого файла или каталога!
> cdemu: Daemon: failed to start device #0!
> cdemu: Daemon: failed to create device!
> Не удалось инициализировать и запустить демон!

Интересное кино - демон не может найти нужное устройство - виртуальный привод, то есть программе чего-то не хватает, а именно виртуального блочного устройства /dev/vhba_ctl. Причём во время установки система молчала, программа молчала, а недовольство высказала лишь после того, как установилась...

Ладно, мы народ не гордый, лезем в Интернет... Решение нашлось довольно быстро - не установлен модуль ядра vhba. Итак, начинаем решать задачу.

Алгоритм действий

0. Обновляем систему до актуального состояния, включая ядро (это очень важно, почему - поймёте позже).

apt-get update && apt-get dist-upgrade && update-kernel -yy

1. Устанавливаем пакет с модулем (ВНИМАНИЕ! Если модуль собран для самой последней версии ядра, он потянет и его - не пугаемся и соглашаемся на установку новой версии ядра).

apt-get install kernel-modules-vhba-std-def

2. Устанавливаем модули ядра видеокарты для новой версии ядра - если установилось последнее ядро, ставим для него, смотря на версию пакета.

NVIDIA

apt-get install kernel-modules-nvidia-std-def#<версия_драйвера>-<версия пакета>

AMD

kernel-modules-drm-radeon-std-def#<версия_драйвера>-<версия пакета>

3. Перезагружаемся.

Если не обновить ядро заранее, может так статься, что рабочий стол вы не увидите - ядро будет новое, а модули для видеокарты - старые.

4. Запускаем модуль ядра от рута:

modprobe vhba

5. Прописываем модуль в автозапуск (от рута)

sh -c "echo 'vhba' >> /etc/modules"

Проверяем работоспособность.

Обходные пути

Можно ли обойтись без CDEmu? Да, можно. Для основных сред рабочего стола имеются скрипты и рецепты упрощения работы с образами, правда, придётся поколдовать в терминале :)

XFCE

Пользователь Коля Щетинин предложил следующий метод

KDE

apt-get install fuseiso

cd Загрузки

git clone https://github.com/Arbars/-FuseISOMenu-.git fuseisomount

cd fuseisomount

cp fuseisomenu.* ~/.local/share/kservices5/ServiceMenus/

MATE

Для 8-й и 9-й платформы

0. Устанавливаем пакет mate-file-manager-actions

apt-get install mate-file-manager-actions

1. Создаём каталог для наших команд:

mkdir -p ~/.local/share/caja/actions

2. Создаём desktop-файл нашего пункта меню:

nano ~/.local/share/caja/actions/Mount_Image.desktop

3. Вставляем содержимое

[Desktop Entry]
Type=Action
Tooltip=Mount Image
Name=Mount Disk Image
Name[ru]=Примонтировать образ диска
Profiles=profile-zero;
Icon=application-x-cd-image

[X-Action-Profile profile-zero]
MimeTypes=all/all;
Exec=gksu "mount -o loop %f" /media/iso # каталог "iso" должен быть предварительно создан
Name=Mount Image
Name[ru]=Примонтировать образ диска

4. Выходим из файлового менеджера и снова входим. В контекстном меню должна появиться строка "Caja-Actions actions", а в ней - наш пункт меню.

Альтернативный вариант

В случае отсутствия [1] вышеуказанного пакета можно обойтись bash-скриптом, который нужно положить по пути ~/.config/caja/scripts

0. Создаём файл по указанному адресу

1. Открываем любым текстовым блокнотом

2. Вставляем следующее содержимое:

#!/bin/bash
#script via TheeMahn
gksu umount /media/ISO
for I in `echo $*`
do
  foo=`gkgksu -u root -k -m "enter your password for root terminal
access" /bin/echo "got r00t?"`
gksu mkdir /media/ISO
gksu "mount -o loop -t iso9660 $I" /media/ISO
done

3. Даём права на исполнение через свойства файла или командой в терминале:

chmod +x ~/.config/caja/scripts/MountISO

Доп. материалы

Добавление модуля vhba в список доп. пакетов

Примечания

  1. https://bugzilla.altlinux.org/show_bug.cgi?id=37221 Сборка пакета для 9-й платформы. Статус: Исправлено.