Запуск 32-розрядного виконуваного файлу на 64-розрядному Debian Jessie


5

Я намагаюся встановити Adobe Air (необхідний для макетів Balsamiq), і коли я намагаюся запустити інсталятор, я отримую:

sudo: unable to execute ./AdobeAIRInstaller.bin: No such file or directory

Я переконався, що файл є виконуваним, і, зважаючи на гугл, здається, що спроба запустити 32-бітний виконуваний файл у 64-бітній системі це зробить. Наразі всім рекомендується встановити ia32-libs, однак цього пакету більше немає в Debian Jessie (вони, як видається, відновили підтримку мультиарха).

Що мені потрібно зробити? встановлена ​​підтримка мультиарха, чи є ще щось?

Відповіді:


4

Якесь тло

Так, ia32-libsбуло застосовано обмежувальний розрив до того, як справжня мульти-арка була впроваджена - в основному, цей пакет містив лише купу 32-бітних версій деяких популярних бібліотек.

Що ти зараз робиш

  1. Увімкнути архітектуру передбачень i386 у dpkg:

    dpkg --add-architecture i386
    
  2. З’ясуйте, яких бібліотек хоче ця штука та встановіть відповідні 32-розрядні ( i386) версії, наприклад

    apt-get install libfooX.Y:i386
    

Але зверніть увагу на кілька нещасних речей:

  • Мульти-арка в Debian заснована на тому, що архівозалежні бібліотеки встановлюються в залежні від архіву каталоги, як /usr/lib/x86_64-linux-gnuдля рідних amd64бібліотек і /usr/lib/i386-linux-gnu/для тих самих i386 бібліотек в одній системі.

    Проблема тут полягає в тому, що стороннє програмне забезпечення, яке не знає про багато архів, як реалізовано в Debian, як правило, розраховує знайти бібліотеки, це залежить від використання на зразок відомих імен, таких як /usr/lib/libfoo.so.X.Y.Z, наприклад , недавно Debian версії.

    Це може бути вирішене спрощенням або LD_PRELOADзамішанням динамічного завантажувача за допомогою інших способів (наприклад, використання альтернативного файлу кешу, а не /etc/ld.so.cacheпосилання на бібліотеки, встановлені в іншому місці), але дивіться наступний пункт.

  • Робота над сумісними для Linux версіями Adobe Air була зупинена на досить тривалий час, IIRC, тому остання блока Adobe Air може залежати від досить застарілих версій бібліотек, яких немає в останніх версіях Debian. І більш новітні бібліотеки означають зміни API / ABI, і їх не можна вирішити за допомогою посилань.

Можливе рішення

Якщо позбутися цієї гидоти Adobe неможливо, я, можливо, спробую покластися на те, що API / ABI ядра Linux є досить стабільним і намагаюся створити середовище chroot або LXC спеціально для запуску цього блоку за допомогою бібліотек, витягнутих з будь-якої ОС, на яку стверджується, що бути сумісними з ним.

В основному, для chroot вам потрібно буде створити каталог, що містить мінімальний набір бібліотек (і можуть бути деякі бінарні файли, наприклад /bin/bash) з відомими іменами (наприклад /usr/lib/libfoo.so).

Це не зовсім простий спосіб (вам буде потрібно багато раундів проб і помилок, озброївшись readelf, ldd, вилучення та копіювання файлів і т.д.) , але він може працювати, тому що , врешті-решт, все бібліотеки волати до ядра з використанням системних дзвінків, і вони досить стабільні у всіх версіях ядра.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.