Я пытаюсь установить выделенный сервер 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
. Пока что он, кажется, запускается. (Я могу подключиться к игровому серверу через свой внутриигровой сетевой браузер, так что он взаимодействует). Я не уверен, происходит ли какая-либо проверка зависимостей при запуске программы игрового сервера, поэтому у меня осталось несколько вопросов:
решение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-битного ядра.