Как запустить программное обеспечение, которое не предлагается через менеджеры пакетов, требующее ia32-libs

Как запустить программное обеспечение, которое не предлагается через менеджеры пакетов, требующее ia32-libs

Я пытаюсь установить выделенный сервер Arma 2 OA на виртуальную машину Virtualbox, чтобы я мог тестировать свои собственные миссии в среде-песочнице таким образом, чтобы я мог выгружать их на другой компьютер в моей сети. (Другой компьютер работает под управлением виртуальной машины, но это машина с Windows, и я не хотел возиться с ее установкой.) Для этого требуется не менее 2, а лучше 4 ГБ оперативной памяти, поэтому я подумал, что установлю версию AMD64 Ubuntu 13.10, чтобы все заработало.

'Как запустить 32-битную программу в 64-битной версии Ubuntu?' уже объяснил, как установить 32-битное программное обеспечение с помощью apt-get и/или dpkg, но в данном случае это не применимо.

Сервер предлагается в виде сжатой загрузки на сайте BI Studio, разработчика игр Arma. Его инструкции по установке, очевидно, немного устарели по сравнению с текущим состоянием дел. (вероятно, потому что состояние дел было обновлено совсем недавно :) ) В нем говорится, что мне нужно установить ia32-libs, который теперь, по-видимому, устарел. Теперь мне нужно выяснить, как установить нужные пакеты, чтобы убедиться, что он запустится.

Мой уровень опыта в этих вопросах — новичок-средний. Я установил много пакетов через apt-get; в прошлом я решал проблемы с зависимостями; я не устанавливал много программного обеспечения без использования менеджеров пакетов. Я могу справиться сам с базовой административной работой, например, с редактированием файлов conf и т. д.

Я только что пошел дальше и попытался установить его без установки ia32-libs через apt-get, но установить gcc, чтобы получить библиотеки в конце концов. Я рассуждаю так: gcc включит файлы для кодирования обратной совместимости, а на Linux все библиотеки (насколько я могу судить) установлены на системном уровне в /libs. Пока что он, кажется, запускается. (Я могу подключиться к игровому серверу через свой внутриигровой сетевой браузер, так что он взаимодействует). Я не уверен, происходит ли какая-либо проверка зависимостей при запуске программы игрового сервера, поэтому у меня осталось несколько вопросов:

  • Перехватывает ли 13.10 какие-либо вызовы библиотек ia32libs и транслирует ли вызовы в правильный код на amd64?
  • Если он запускается, означает ли это, что все необходимые библиотеки загружены правильно, или есть вероятность, что он позже даст сбой, когда нужная библиотека все-таки будет отсутствовать?
  • Необходимо ли использовать обходной путь, например, установку gcc? (вместе с его библиотеками i386)
  • Как узнать, какие библиотеки мне могут понадобиться для запуска этого программного обеспечения? (или любого другого 32-разрядного программного обеспечения, которое не предлагается через менеджер пакетов)

  • решение1

    В основном это зависит от программного обеспечения и того, как оно было написано. В таких случаях я бы выбрал 32-битный Debian (если доступен) или скомпилированный 32-битный двоичный файл. Это уже было объяснено в моем ответеКак запустить 32-битную программу в 64-битной версии Ubuntu?и даже продемонстрировали работу 64-битной версии 32-битной системы (что было невозможно несколько лет назад).На самом деле запускать 32-битные приложения в 64-битных системах проще.

    Обычно при запуске двоичного файла он сообщает об отсутствующих библиотеках, которые можно посмотреть в репозиториях.

    Перехватывает ли 13.10 какие-либо вызовы библиотек ia32libs и транслирует ли вызовы в правильный код на amd64?

    Нет. Разработчики должны это сделать. Система показывает только библиотеки, использующие GNU Linker ld. Если программное обеспечение пытается использовать "жестко закодированные" библиотеки, то вам придется обмануть его и указать им правильные библиотеки. Современное, хорошо написанное программное обеспечение не нуждается в этом.

    Если он запускается, означает ли это, что все необходимые библиотеки загружены правильно, или же он может дать сбой позже, когда нужная библиотека все-таки отсутствует?

    Если он запускается, то это идеально. Через библиотеки, загруженные в начале исполняемого файла, и без них (т. е. некоторые из них отсутствуют) он не запустится, но даже если они присутствуют, не все вызовы вызываются в начале, поэтому, возможно, определенный вызов определенной функции изменил способ его поведения, а приложение не поддерживает это, что приводит к сбою. Это сценарии пограничных случаев, но они возможны. Так что вы, вероятно, заметите, если он имеет несовместимости с более новыми библиотеками. Однако это совсем другая проблема. Чтобы исправить это, вам придется либо адаптироваться к новым библиотекам, либо понизить версию уже установленных.

    Необходимо ли использовать обходной путь, например, установку gcc?

    gccэто компилятор. Только если вы будете компилировать код с использованием C или C++, вам нужно установить его. В других случаях может потребоваться обходной путь, но я не видел «бинарного» (уже скомпилированного исполняемого файла), которому нужен компилятор gccдля запуска.

    Как узнать, какие библиотеки мне могут понадобиться для запуска этого программного обеспечения? (или любого другого 32-разрядного программного обеспечения, которое не предлагается через менеджер пакетов)

    Немного грубовато, но если в инструкции не сказано, какие именно библиотеки вам нужны, или используйте команду ld-linux.so --list. Пример:

    $ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
        linux-vdso.so.1 =>  (0x00007fffd479f000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
    

    ( lddбинарный файл выдает тот же результат, спасибо @ubfan)

    Как вы можете видеть, bashиспользует linux-vdso, libtinfo.so, libdl.so и libc.so. Если эти библиотеки правильные, то bashон доволен ими. Это длядинамически связанные двоичные файлы. Вместо этого вы можете использовать , --verifyчтобы проверить, действительно ли двоичный файл динамически связан.

    Затем вы берете название библиотек, скажем,libtinfo.so.5, который был включен в пакеты:

    File                                Packages
    /lib/i386-linux-gnu/libtinfo.so.5   libtinfo5 [not amd64]
    /lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
    /lib32/libtinfo.so.5                lib32tinfo5 [not i386]
    /lib64/libtinfo.so.5                lib64tinfo5 [not amd64]
    /usr/lib/debug/libtinfo.so.5        libtinfo5-dbg
    /usr/libx32/libtinfo.so.5           libx32tinfo5
    

    Итак, нам просто нужно установить правильный пакет для архитектуры двоичного файла (если он 32-битный, добавьте :i386к имени пакета 64-битный :amd64), и все будет готово.

    Само собой разумеется, что для запуска 64-битных двоичных файлов на 32-битной платформе ваш процессор должен поддерживать 64-битную архитектуру (большинство систем, выпущенных в 2008 году и позже, поддерживают ее) и, скорее всего, потребует установки 64-битного ядра.

    Связанный контент