Как выполнить сценарии оболочки из 32-битного Wine на 64-битном Linux?

Мое 32-разрядное приложение работает под Wine, и для лучшей интеграции с окружающей средой оно запускает некоторые сценарии оболочки. Я только что тестировал 64-битную версию Ubuntu 14.04, и моя программа упала с этой ошибкой:

err:process:create_process starting 64-bit process L"Z:\\bin\\sh" not supported in 32-bit wineprefix

Я пытался найти 32-битную сборку "sh" в моей системе, но не смог ее найти. Любые креативные идеи о том, как я могу обойти эту проблему?

1 ответ

Решение

Я являюсь пользователем рассматриваемой программы и провел некоторые эксперименты с ней.

Не 32-битный или 64-битный, а "общий объект" и "исполняемый"?

Бег file /bin/dash это печатает:

/bin/dash: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), ...

Бег file /bin/bash однако печатает:

/bin/bash: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), ...

dash является "общим объектом" в то время как bash это "исполняемый файл". очевидно /bin/dash кажется, работает как исполняемый файл в некотором роде (я не знаю технических деталей здесь), но кажется, что это различие имеет значение для Wine.

Я получил ту же ошибку, что вы сообщили (не могу запустить 64-битный процесс) для Wine 1.4, но ошибка, которую я получил на более новых версиях Wine, была wine: Bad EXE format for Z:\bin\sh..

Если вы на самом деле просто заменить /bin/sh с /bin/bash (хотя это 64-битный двоичный файл) он будет работать. Wine также, похоже, не любит запускать символическую ссылку, но копирует /bin/bash работал.

Итак, сначала сделайте резервную копию существующего (символическая ссылка) /bin/sh с:

sudo cp /bin/sh /bin/sh_orig

Затем скопируйте bash в sh:

sudo cp /bin/bash /bin/sh

Затем, когда я запустил Wine с программой и ее вызовами /bin/sh отлично работает

Кроме того, вы загружаете 32-битную оболочку напрямую

Разверните файл.deb для 32-битной оболочки bash:

 wget http://us.archive.ubuntu.com/ubuntu/pool/main/b/bash/bash_4.3-6ubuntu1_i386.deb

Я ваш домашний каталог, распакуйте его в папку:

mkdir ~/bash_4.3-6ubuntu1_i386
dpkg -x bash_4.3-6ubuntu1_i386.deb ~/bash_4.3-6ubuntu1_i386

Скопируйте скрипт bash в / bin / sh:

sudo mv /bin/sh /bin/sh64original
sudo cp ~/bash_4.3-6ubuntu1_i386/bin/bash /bin/sh
sudo chown root:root /bin/sh

Или беги schroot, но все равно необходимо скопировать / bin / bash в / bin / sh

Басиле Старинкевич упомянул выше о настройке 32-битной оболочки в schroot среда. Я сделал это с 32-битной средой Ubuntu 14.04 и столкнулся с той же проблемой с dash против bash "общий объект" против "исполняемого файла" (но когда я скопировал /bin/bash в /bin/sh это сработало), так что это помогло мне понять, что различие не в разнице между 32-разрядной и 64-разрядной версиями, а в формате исполняемых файлов оболочки, которые имели значение для Wine.

Если вы хотите, я могу опубликовать детали для настройки schroot evnironment, но в основном я следовал инструкциям на https://help.ubuntu.com/community/DebootstrapChroot но мне нужно было настроить /etc/apt/sources.list иметь полный список пакетов (которые установлены в моей хост-системе по умолчанию) для apt-get install wine работать.

Другие вопросы по тегам