Обеспечить совместную работу вызовов командной строки Wine и Mono в Debian?
Я использую Debian 12 (Книжный червь). У меня установлен Mono (с https://download.mono-project.com/repo/debian , для запуска программного обеспечения для резервного копирования Duplicati) уже много лет. Я пытаюсь заставить Wine работать гладко.
Wine работает достаточно хорошо при прямом вызове:wine hello.exe
делает правильные вещи. Но я не могу бежатьhello.exe
прямо из командной строки.
Я сделалsudo apt install wine-binfmt
чтобы установить обработчики двоичного формата Wine. Но все равно:
$ ./hello.exe
Cannot open assembly './hello.exe': File does not contain a valid CIL image.
Я думаю, это потому, что у меня зарегистрировано два обработчика для MS-DOS (исполняемые файлы MZ "4d5a"):
$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
$ cat /proc/sys/fs/binfmt_misc/wine
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
О, но они оба указывают наrun-detectors
в качестве обработчика, который... хранит свои конфигурационные файлы в /usr/share/binfmts/... и у меня там есть два перекрывающихся обработчика:
$ cat /usr/share/binfmts/cli
package mono-runtime
detector /usr/lib/cli/binfmt-detector-cli
interpreter /usr/bin/cli
magic MZ
$ cat /usr/share/binfmts/wine
package wine
interpreter /usr/bin/wine
magic MZ
Команда Моно (readlink -f /usr/bin/cli
=>/usr/bin/mono-sgen
). Я предполагаю, что «двоичные файлы» Monocli
ожидает, что упакованный байт-код .NET будет выглядеть как двоичный файл MS-DOS? Могу ли я установить какой-нибудь «детектор», который отличает двоичный файл Mono от «обычного» двоичного файла MS-DOS и отправляет один вид в Mono, а другой — в Wine?
1 ответ
Электрический ток/usr/lib/cli/binfmt-detector-cli
имеет ошибку и классифицирует большинство двоичных файлов PE32+ как «CLR» (т. е. для Mono). До мая 2022 года в классификаторе была ошибка, из-за которой все двоичные файлы PE32+ классифицировались как нативные. См. https://github.com/mono/linux-packaging-mono/pull/38.
Исправление классификатора для правильной классификации двоичных файлов PE32+ как CLR или нет устраняет мою проблему (остальная часть стека Wine/Mono и Wine-binfmt работают по назначению).