Вопрос или проблема
Мне нужно монтировать 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
:
-
Установите необходимые пакеты, если они не установлены. Для большинства дистрибутивов на базе Debian или Ubuntu можно использовать следующую команду:
sudo apt-get install libguestfs-tools
Для Arch Linux:
sudo pacman -S libguestfs
-
Убедитесь, что установлен
virt-filesystems
, который позволяет вам найти, какие устройства содержатся в ISO-образе:virt-filesystems -a "STALKERSOUP Game Install.iso"
-
Теперь вы можете смонтировать ISO-образ с помощью
guestmount
. Выполните следующую команду:guestmount -a 'STALKERSOUP Game Install.iso' -m /dev/sda mnt/
Здесь
mnt/
— это точка монтирования, где вы хотите увидеть файлы.
Вариант 2: Использование udisks
udisks
— это утилита, которая предоставляет интерфейс к системам управления дисками в Linux и позволяет монтировать ISO-образы с помощью командной строки.
Как использовать udisks
:
-
Опять же, убедитесь, что утилита
udisks
установлена. В большинстве дистрибутивов Linux она обычно установлена по умолчанию. -
Запустите следующую команду для настройки петли:
udisksctl loop-setup --file "STALKERSOUP Game Install.iso"
Эта команда создаст петлю, которая будет представлять ваш ISO-образ.
-
Найдите создаваемый блок-устройств, обычно это
/dev/loop0
, и выполните монтирование:bdev="/dev/loop0" # можете изменить на другое, если необходимо udisksctl mount --block-device "$bdev"
-
В большинстве систем ваши файлы будут доступны по пути, например,
/media/STALKERSOUP Game Install
, но путь может варьироваться.
Заключение
Использование guestmount
или udisks
позволяет вам сохранить исходные имена файлов при монтировании ISO-образов. Эти варианты соответствуют вашим требованиям по работе в качестве непользователя и не требуют вмешательства в структуру файлов внутри ISO. Это делает их подходящими и эффективными решениями для вашего сценария.
Если у вас есть дополнительные вопросы или необходима поддержка в процессе выполнения данных шагов, не стесняйтесь обращаться. Удачи в ваших проектах по созданию пакетов!