Монтирование ISO с помощью fuseiso производит имена файлов, отличающиеся от mount. Как изменить это поведение?

Вопрос или проблема

Мне нужно монтировать ISO как нестандартный пользователь. Имена файлов внутри смонтированного ISO важны. Поскольку я “нестандартный пользователь”, fuseiso является самым логичным выбором, но он не производит “правильные имена файлов”, тогда как mount делает это. В fuseiso пробелы заменяются на нижние подчеркивания, а заглавные буквы становятся строчными. Есть ли способ изменить поведение fuseiso, чтобы оно соответствовало mount?

Корректное содержимое ISO с использованием mount:
[me@pc stalkersoup]$ sudo mount ‘STALKERSOUP Game Install.iso’ mnt
[me@pc stalkersoup]$ ls mnt
‘STALKERSOUP game setup-10.bin’ ‘STALKERSOUP game setup-4.bin’ ‘STALKERSOUP game setup-8.bin’
‘STALKERSOUP game setup-1.bin’ ‘STALKERSOUP game setup-5.bin’ ‘STALKERSOUP game setup-9.bin’
‘STALKERSOUP game setup-2.bin’ ‘STALKERSOUP game setup-6.bin’ ‘STALKERSOUP game setup.exe’
‘STALKERSOUP game setup-3.bin’ ‘STALKERSOUP game setup-7.bin’

Некорректное содержимое ISO с использованием fuseiso:
[me@pc stalkersoup]$ fuseiso ‘STALKERSOUP Game Install.iso’ mnt/
[me@pc stalkersoup]$ ls mnt/
stalkersoup_game_setup_10.bin stalkersoup_game_setup_4.bin stalkersoup_game_setup_8.bin
stalkersoup_game_setup_1.bin stalkersoup_game_setup_5.bin stalkersoup_game_setup_9.bin
stalkersoup_game_setup_2.bin stalkersoup_game_setup_6.bin stalkersoup_game_setup.exe
stalkersoup_game_setup_3.bin stalkersoup_game_setup_7.bin

Контекст, чтобы избежать ситуации с проблемой XYZ:

Имя файла важно, потому что я хочу извлечь содержимое setup.exe с помощью innoextract, а все файлы bin содержат данные, необходимые для извлечения, и их путь жестко закодирован.
Я делаю это, потому что пишу PKGBUILD (bash-скрипт для сборки пакетов для Arch). Это bash-скрипт, который должен выполняться как нестандартный пользователь. Поэтому я ограничен инструментами командной строки как нестандартный пользователь.
Я делаю это для личного использования, и это законно, так как игра свободно распространяется.
Переименование не является вариантом, так как смонтированное ISO является только для чтения.
Я могу извлечь содержимое ISO с помощью p7zip, например, что я в данный момент и делаю.
Это не хорошее решение, так как это отнимает время и память.
Я не могу изменить архив, так как должен использовать его “как опубликовано автором”.

Заранее спасибо за вашу помощь и expertise 🙂

Нашел ответ с помощью reddit. Я кратко обобщу здесь, но вы можете обратиться к этой теме на reddit.
Вариант 1: с использованием guestmount
guestmount -a ‘STALKERSOUP Game Install.iso’ -m /dev/sda mnt/

Где вы находите /dev/sda с помощью:
virt-filesystems -a “STALKERSOUP Game Install.iso”

Вариант 2: с использованием udisks
# Настройка файла цикла с помощью udisksctl
udisksctl loop-setup –file “STALKERSOUP Game Install.iso”
bdev=”/dev/loop0″ # можно изменить
udisksctl mount –block-device “$bdev”
mpoint=”/media/STALKERSOUP Game Install” # можно изменить

Ответ или решение

Подробное руководство по монтированию ISO-образов без изменений имен файлов с использованием guestmount и udisks

Ваша проблема заключается в том, что при использовании fuseiso для монтирования ISO-образа изменяются имена файлов: пробелы заменяются на подчеркивания, а заглавные буквы становятся строчными. Это может стать значительной помехой, особенно если вы используете эти файлы для целей, требующих точного соответствия исходным именам, как в вашем случае с утилитой innoextract.

К сожалению, из-за ограничений fuseiso вы не сможете изменить это поведение, но существуют альтернативные методы монтирования, которые не требуют прав root и сохраняют оригинальные имена файлов. Ниже рассмотрены две такие альтернативы: guestmount и udisks.

Вариант 1: Использование guestmount

guestmount — это утилита, которая позволяет монтировать образы дисков, сохраняя структуру файловой системы. Она подходит для работы с ISO-образами и может быть полезна в вашей ситуации.

Как использовать guestmount:

  1. Установите необходимые пакеты, если они не установлены. Для большинства дистрибутивов на базе Debian или Ubuntu можно использовать следующую команду:

    sudo apt-get install libguestfs-tools

    Для Arch Linux:

    sudo pacman -S libguestfs
  2. Убедитесь, что установлен virt-filesystems, который позволяет вам найти, какие устройства содержатся в ISO-образе:

    virt-filesystems -a "STALKERSOUP Game Install.iso"
  3. Теперь вы можете смонтировать ISO-образ с помощью guestmount. Выполните следующую команду:

    guestmount -a 'STALKERSOUP Game Install.iso' -m /dev/sda mnt/

    Здесь mnt/ — это точка монтирования, где вы хотите увидеть файлы.

Вариант 2: Использование udisks

udisks — это утилита, которая предоставляет интерфейс к системам управления дисками в Linux и позволяет монтировать ISO-образы с помощью командной строки.

Как использовать udisks:

  1. Опять же, убедитесь, что утилита udisks установлена. В большинстве дистрибутивов Linux она обычно установлена по умолчанию.

  2. Запустите следующую команду для настройки петли:

    udisksctl loop-setup --file "STALKERSOUP Game Install.iso"

    Эта команда создаст петлю, которая будет представлять ваш ISO-образ.

  3. Найдите создаваемый блок-устройств, обычно это /dev/loop0, и выполните монтирование:

    bdev="/dev/loop0"        # можете изменить на другое, если необходимо
    udisksctl mount --block-device "$bdev"
  4. В большинстве систем ваши файлы будут доступны по пути, например, /media/STALKERSOUP Game Install, но путь может варьироваться.

Заключение

Использование guestmount или udisks позволяет вам сохранить исходные имена файлов при монтировании ISO-образов. Эти варианты соответствуют вашим требованиям по работе в качестве непользователя и не требуют вмешательства в структуру файлов внутри ISO. Это делает их подходящими и эффективными решениями для вашего сценария.

Если у вас есть дополнительные вопросы или необходима поддержка в процессе выполнения данных шагов, не стесняйтесь обращаться. Удачи в ваших проектах по созданию пакетов!

Оцените материал
Добавить комментарий

Капча загружается...