Новости :

Запуск приложений Linux под FreeBSD

Пользователи FreeBSD долго наслаждались быстродействием и стабильностью данной операционной системы, но не смотря на это FreeBSD все же проигрывала Linux в одной области - новые прикладные программы. В то время как Linux был в центре внимания, производители программного обеспечения занимались перенесом их прикладных программ ориентированных на Linux под FreeBSD.

Для реализации этой идеи в FreeBSD была включена бинарная совместимость с Linux (Linux Binary Compatibility). Это означает, что FreeBSD может выполнять приблизительно 90% всех прикладных программ Linux не модифицируя их и не прибегая к какой либо эмуляции. Сюда входят прикладные программы типа StarOffice, Netscape, Adobe Acrobat, RealPlayer, а также такие сложные прикладные программы как VMWare и сервер баз данных Oracle. В некоторых ситуациях производительность Linux приложений в FreeBSD заметно возрастает по сравнению с Linux.


Как это работает?

Многие не знают, что бинарный формат ELF может содержать так называемый "brand", другими словами существует возможность помечать исполнимые файлы на их принадлежность для определенной операционной системы. Большинство операционных систем не нуждаются в данной маркировке своих бинарных компонентов, ибо они предназначены для выполнения в одотипной среде.

FreeBSD отлично использует эту возможность, помечая бинарные файлы в формате Linux ELF для того чтобы отличать их от бинарных файлов FreeBSD. Вам потребуется установить необходимые части системы совместимости,в состав которых входят библиотеки и утилиты, от которых зависят приложения Linux. Данные компоненты располагаются в специально отведенной части файловой системы. После этого FreeBSD сможет отличать бинарные файлы Linux от своих собственных, что заставит приложения Linux использовать другой набор библиотек вместо стандартных библиотек FreeBSD.


Инсталляция и конфигурация.

Установка FreeBSD "из коробки" по умолчанию не содержит Linux Binary Compatability. Для включения таковой поддержки вам потребуется сделать две вещи: сконфигурировать ваше ядро так, чтобы оно понимало бинарные файлы Linux и установить зависимые библиотеки среды исполнения.


Конфигурация ядра.

Решение этого вопроса весьма простое. Есть два пути, которыми Вы можете достигнуть результата. Во-первых можно загрузить модуль ядра, находящийся в базовой поставке FreeBSD, позволяющий выполнять команды linux. Чтобы быть увереным в загрузке модуля автоматически во время начальной загрузки, нужно добавить в /etc/rc.conf строку:


linux_enable=YES

Вы можете проверить, что Linux модуль был загружен командой kldstat:


$ kldstat
Id Refs Address Size Name
1 2 0xc0100000 20e8e4 kernel
2 1 0xc0f47000 10000 linux.ko



Если Вы не хотите или не можете загружать модули ядра по некоторым причинам, то нужно сгенерировать новое ядро с опцией:


options LINUX

В любом случае конфигурации ядра его размер возрастет примерно на 10КБ, так что какой то деградации эффективности не должно быть заметно.


Установка библиотек среды исполнения (run-time libraries)

После того, как ядро будет модифицировано для поддержки бинарных файлов Linux Вы должны установить библиотеки среды исполнения, от которых они будут зависеть. Это также относительно просто. Самый простой метод состоит в том, чтобы установить linux_base из портов:


# cd /usr/ports/emulators/linux_base
# make all install

Таким образом все необходимые библиотекибудут установлены в /compat/linux.


Запуск исполнимых файлов Linux в формате ELF

Если бинарный файл Linux был правильно откомпилирован, то он должен содержать маркировку "Linux". Некоторые бинарные файлы требуют дополнительных изменений. Призапуске Linux приложения Вы можете получить подобную ошибку:


$ ./some-linux-program
ELF binary type not known
Abort

Для исполнения данного приложения вам поторебуется отмаркировать его как "linux". Это позволяет селать комманда brandelf , которая является частью базовой системы FreeBSD. Например:


# brandelf -t Linux some-linux-program

После завершения вышеобозначенных шагов ваша система готова к выполнению программ откомпилированных для Linux.

Надо отметить, что есть существуют определенные особенности операционной системы Linux, которые не поддерживаются FreeBSD. Приложения откомпилированные для Linux не будут исполняться под FreeBSD, если они чрезмерно используют файловую систему Linux /proc которая отличается от файловой системы /proc используемой во FreeBSD), или используют определенные запросы, типа предоставления виртуального режима 8086.

Источник http://www.onlamp.com/pub/a/bsd/2000/03/17/linuxapps.html

Перевод s1lv3r
Комментарии: (0) | FreeBSD | 2006-07-03