Как выполнить сценарии оболочки из 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
работать.