2004 г
Проект Русской Документации FreeBSD
содержание
Бинарная совместимость с Linux не включена по умолчанию. Простейший способ включения
этой функциональности заключается в загрузке KLD объекта linux
(``Kernel LoaDable object''). Вы можете загрузить этот модуль, просто набрав linux в командной строке.
Если вы хотите, чтобы совместимость с Linux была включена постоянно, необходимо
добавить в /etc/rc.conf следующую строку:
linux_enable="YES"
Для проверки того, загружен ли KLD, может быть использована команда kldstat(8):
% kldstat
Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko
Если по какой-либо причине вы не хотите или не можете загрузить KLD, то вы можете
статически включить поддержку Linux в ядро посредством опции options
COMPAT_LINUX в файле конфигурации ядра. Затем соберите и проинсталлируйте новое
ядро, следуя описанию в Гл. 8.
Установить все требуемые библиотеки можно двумя путями: либо используя порт linux_base, либо установив их вручную.
Этот метод является самым простым, и мы рекомендуем воспользоваться именно им. Процесс
аналогичен установке любого другого порта из коллекции портов. Просто выполните следующие команды:
# cd /usr/ports/emulators/linux_base
# make install distclean
Теперь Вы можете работать с приложениями для Linux. Некоторые программы, возможно,
будут сообщать о несоответствии подверсий некоторых системных библиотек. Однако,
практически, это не вызывает каких-либо неудобств.
Замечание: Возможно наличие нескольких версий порта emulators/linux_base, соответствующих различным версиям разных
дистрибутивов Linux. Вы должны установить порт, наиболее близко соответствующий
требованиям приложений Linux, которые будут установлены.
Если у вас нет установленной коллекции портов, можно установить требуемые библиотеки
вручную. Вам понадобятся разделяемые библиотеки для Linux, которые нужны программам, и
runtime-компоновщик. Вам также потребуется создать ``теневой корень'': директорию /compat/linux, где будут расположены Linux библиотеки. Если нужно
загрузить какую-либо разделяемую библиотеку, FreeBSD сперва будет пытаться найти ее в
этом дереве. Так, если программа загружает, например, /lib/libc.so, FreeBSD попытается открыть /compat/linux/lib/libc.so, и если такого файла не существует, будет
пытаться открыть /lib/libc.so. Разделяемые библиотеки должны
находиться в теневом дереве, а не в пути, сообщаемым командой Linux ld.so.
По мере работы с различными Linux программами, у вас будет накапливаться некий базовый
набор библиотек, которого будет достаточно для большинства существующих Linux
приложений.
Что, если при установленном linux_base порте ваше приложение
все равно сообщает об отсутствии необходимой библиотеки? Как узнать, какая именно нужна
библиотека и где ее взять? В принципе, есть два способа. Вам необходимо иметь привилегии
суперпользователя для их осуществления.
Если у вас есть доступ к машине, на которой установлен Linux, узнайте, какие
библиотеки использует Linux приложение, и просто скопируйте из на свою машину.
Например:
Для ELF программ иногда требуется сделать так называемый ``branding''. Если при
попытке запустить ELF-файл, Вы получаете следующее сообщение об ошибке:
% ./linux-elf-программа
ELF binary type not known
Abort
то нужно изменить тип исполняемого файла, чтобы ядро FreeBSD правильно определило, что
это Linux программа. Это можно сделать при помощи утилиты brandelf(1):
% brandelf -t Linux linux-elf-программа
В настоящее время GNU toolchain помещает необходимую информацию в исполняемые файлы
ELF автоматически, поэтому необходимость в этом действии случается все реже и реже, и в
недалеком будущем вы вряд ли прибегнете к нему вообще.
Если DNS не настроен или недоступен, или вы получаете это сообщение:
resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword
то вам нужно создать (модифицировать) файл /compat/linux/etc/host.conf, содержащий:
order hosts, bind
multi on
Таким образом, вы указываете, то сначала производится поиск в файле /etc/hosts, а только затем запрашивается DNS. Когда файл /compat/linux/etc/host.conf отсутствует, Linux приложения находят
файл /etc/host.conf для FreeBSD и сообщают о несовместимом
синтаксисе. Если вы не настраивали сервер имен (/etc/resolv.conf), уберите bind из файла
/compat/linux/etc/host.conf.
|
|