Назад | Перейти на главную страницу

Ubuntu - Запуск 32-битного программного обеспечения на 64-битном сервере

Я планирую разместить веб-приложение на 64-разрядном сервере Dell с 32 ГБ оперативной памяти. Планирую поставить туда Ubuntu 10.04 LTS. Проблема в том, что наше веб-приложение использует симулятор, который можно скомпилировать и запустить только в 32-битном режиме. Итак, сейчас я думаю о двух возможных решениях:

  1. Установите 32-разрядную версию Ubuntu - симулятор будет работать нормально, но использование ресурсов может быть неоптимальным.
  2. Установить 64-битную ОС; установить еще одну 32-битную виртуальную машину Ubuntu. Сделайте перенаправление Apache с основного сервера на «виртуальный» сервер.

Я хотел бы знать о плюсах и минусах этих двух методов. Если есть альтернатива получше, я был бы рад это услышать.

Я уже искал здесь похожие темы и обнаружил, что это тесно связано: Следует ли мне запускать 32-битные и 64-битные производственные приложения на 64-битном сервере Debian?

Однако представленные там решения не могли меня полностью удовлетворить.

Наконец, должен признаться, что ничего не знаю о виртуализации. Вариант № 2, представленный выше, основан на том, что я знаю о системе. Однако я более чем хочу узнать о виртуализации.

В ia32-libs Пакет содержит большую коллекцию библиотек x86_32. Если ваша программа может работать только с этими библиотеками, все готово. Есть также 32-битные инструменты разработки в gcc-multilib и binutils-multiarch пакеты.

Если вам нужно выйти за рамки этого, запустите 32-битную систему в chroot. Debian и Ubuntu поставляются с инструментами, которые упрощают эту задачу, в первую очередь шрот, и debootstrap для установки. Настройте шрот и установите в него свою 32-битную систему. Вызов schroot заботится о звонке setpersonality(), что, в частности, делает uname() возвращение i686 и нет x86_64. Имея uname Возврат неожиданного значения - это, вероятно, то, что смутило ваше приложение, когда вы попытались запустить его непосредственно в 64-битной системе. Не забудьте отключить службы в chroot (руководство, на которое я ссылаюсь, объясняет, как это сделать) и выполнить обновления безопасности в chroot (вы не собираетесь запускать там какие-либо службы, но в библиотеках могут быть ошибки).

Виртуальная машина здесь бесполезна. У вас будут все проблемы обслуживания chroot, плюс проблемы с виртуальной машиной, плюс проблемы разделения (использование памяти, использование диска, ...), плюс отдельный экземпляр Apache в виртуальной машине, плюс перенаправление на хосте, плюс возможно проблемы с производительностью.

На вашем месте я бы запустил PV xen (таким образом минимизируя «штраф» для виртуальной машины) с 32-битной версией (что проще, чем возиться с 32-битными библиотеками в 64-битной системе). И я бы использовал для этой цели машину на базе AMD-Opteron (Intel эмулирует 32-битную версию, AMD выполняет ее изначально).