| Эта совместимость позволяет пользователям pcBSD
работать с 90% приложений для Linux без каких-либо модификаций
последних. Среди этих приложений: StarOffice?, Linux-версия Netscape?,
Adobe? Acrobat?, RealPlayer?, VMware?, Oracle?, WordPerfect?, Doom,
Quake, и многие другие. Есть сведения, что в некоторых ситуациях эти
Linux-программы показывали более высокую производительность при работе
под pcBSD, чем под Linux.
При чтении этой статьи вы узнаете:
Как включить двоичную совместимость с Linux в вашей системе.
Как установить дополнительные совместно используемые (shared)
библиотеки Linux.
Как установить приложения Linux в систему pcBSD.
Детали реализации совместимости с Linux в ОС pcBSD.
Двоичная совместимость с Linux не включена
по умолчанию. Простейший способ включения этой функциональности
заключается в загрузке KLD-объекта linux (''Kernel LoaDable object'').
Вы можете загрузить этот модуль, набрав следующее, как пользователь
root:
# kldload linux
Если вы хотите, чтобы совместимость с
Linux была включена постоянно, необходимо добавить в /etc/rc.conf
следующую строку:
linux_enable="YES"
Для проверки того, загружен ли модуль,
может быть использована команда kldstat:
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
Если по какой-либо причине вы не хотите
или не можете загрузить KLD, вы можете статически включить поддержку
Linux в ядро, добавив опцию options COMPAT_LINUX в файл конфигурации
ядра. Затем соберите и установите новое ядро.
Установка с помощью порта linux_base
# cd /usr/ports/emulators/linux_base-fc4 # make install distclean
Теперь вы можете работать с приложениями
для Linux. Некоторые программы, возможно, будут сообщать о
несоответствии подверсий некоторых системных библиотек. Однако обычно
это не вызывает каких-либо неудобств.
Замечание: Возможно наличие нескольких версий порта
emulators/linux_base, соответствующих различным версиям разных
дистрибутивов Linux. Вы должны установить порт, наиболее близко
соответствующий требованиям приложений Linux, которые будут установлены.
Как установить дополнительные совместно используемые
библиотеки
Что, если при установленном linux_base
порте ваше приложение все равно сообщает об отсутствии необходимой
библиотеки? Как узнать, какая именно нужна библиотека и где ее взять? В
принципе, есть два способа. Вам необходимо иметь привилегии пользователя
root для их осуществления.
Если у вас есть доступ к машине, на
которой установлен Linux, узнайте, какие библиотеки использует
Linux-приложение, и просто скопируйте из на свою машину. Рассмотрим
следующий пример:
Допустим, вы скачали по FTP Linux-версию
Doom и установили ее на Linux-машине. Вы можете узнать, какие совместно
используемые библиотеки нужны Doom, с помощью команды ldd linuxdoom:
% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
Вам потребуются все файлы, перечисленные в
последнем столбце. Скопируйте их в дерево /compat/linux на вашей
системе, а также создайте символические ссылки на эти файлы с именами из
первого столбца, соответственно. В итоге, у вас в системе pcBSD должны
быть следующие файлы:
/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Замечание: Учтите, что если у вас уже
есть совместно используемая библиотека Linux с соответствующим первому
столбцу результатов ldd основным номером версии, вам не обязательно
копировать файл, указанный в последнем столбце, в вашу систему. Уже
существующий файл должен подойти. Рекомендуется, однако, все равно
скопировать совместно используемую библиотеку, если ее версия новее.
Предыдущую версию библиотеки можно удалить, если вы создали
символическую ссылку на новую. Итак, если у вас в системе есть следующие
библиотеки:
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
и какое-либо приложение требует библиотеку более
поздней версии, судя по результатам команды ldd:
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
Если версии немного отличаются в последней
цифре, копировать /lib/libc.so.4.6.29 необязательно, так как программа,
скорее всего, будет нормально работать и с немного устаревшей версией.
Тем не менее, вы можете заменить libc.so:
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Замечание: Символические ссылки важны только для
Linux-программ. Runtime-компоновщик pcBSD самостоятельно подберет
правильные номера версий библиотек, и вам не нужно об этом беспокоиться.
Установка двоичных файлов Linux ELF
Для ELF-файлов иногда требуется сделать
так называемый ''branding'' (маркировать его). Если попытаться запустить
не маркированный ELF-файл, вы получите следующее сообщение об ошибке:
% ./моя-linux-elf-программа
ELF binary type not known
Abort
Чтобы помочь ядру pcBSD отличить ELF-файл
pcBSD от двоичного файла Linux, используется утилита brandelf:
% brandelf -t Linux моя-linux-elf-программа
В настоящее время набор инструментальных
средств GNU (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 для pcBSD и сообщают о несовместимом
синтаксисе. Если вы не настраивали сервер имен с помощью файла
/etc/resolv.conf, уберите bind из файла /compat/linux/etc/host.conf.
(FreeBSD Foundation)
можете поставить традиционным способом : |