03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

unixoid<br />

i<br />

Для тех отважных<br />

юниксоидов,<br />

что идут в ногу<br />

с прогрессом и<br />

используют последний<br />

срез CVS<br />

седьмой версии<br />

FreeBSD, рекомендую<br />

переключить<br />

режим совместимости<br />

на имитацию<br />

ядра Linux<br />

версии 2.6.19:<br />

sysctl compat.linux.<br />

osrelease=2.6.19.<br />

Версия 2.4.2,<br />

имитируемая по<br />

умолчанию, уже<br />

не удовлетворяет<br />

потребностям<br />

современных<br />

Linux-программ.<br />

Коллекция портов<br />

FreeBSD насчитывает<br />

несколько<br />

десятков так<br />

называемых Linuxпортов.<br />

Чтобы<br />

найти их, находясь<br />

в каталоге /usr/<br />

ports, набери команду<br />

make search<br />

name=linux-.<br />

Раздел Linux подключен к каталогу /compat/linux<br />

Развеиваем миф о драйверах<br />

nVidia<br />

Среди пользователей широко распространено мнение о том, что<br />

фирменные драйверы nVidia для FreeBSD — это не что иное, как<br />

драйверы Linux, работающие в режиме совместимости с Linux.<br />

Это, конечно же, неправда, на данный момент FreeBSD способна<br />

имитировать только ABI Linux, а не постоянно изменяющийся<br />

интерфейс между ядром и драйверами. Модуль совместимости<br />

с Linux, который так «любят» драйверы nVidia, нужен только<br />

для того, чтобы позволить пользователю играть в Linux-версии<br />

коммерческих игр.<br />

/compat/linux /bin/bash. Все программы Linux теперь должны запускаться<br />

и корректно работать. Это относится не только к простым<br />

программам, вроде xcalc, но и к комплексным, вроде Quake4 или<br />

UT2004. При этом гарантируется, что программа будет работать с такой<br />

скоростью, как если бы она была запущена в настоящем Linux.<br />

Вариант второй. Грязный<br />

Второй вариант настройки среды исполнения заключается в<br />

ручном копировании необходимых файлов в каталог /compat/<br />

linux, без использования коллекции портов или пакетов.<br />

Достоинство подхода в том, что он не требует выкачивания<br />

из сети сотен мегабайт данных и позволяет использовать уже<br />

имеющееся дерево файлов Linux (например, взятое с дистрибутивного<br />

диска). Описывать способ нет смысла, потому что<br />

подробности совершаемых операций зависят от дистрибутива<br />

Linux и не универсальны. В общем случае все, что требуется<br />

сделать, — это скопировать базовый комплект дистрибутивных<br />

пакетов и распаковать их в каталог /compat/linux. Это не<br />

так трудно, как кажется на первый взгляд. Следует установить<br />

FreeBSD-версию пакетного менеджера подопытного дистрибутива<br />

(например, archivers/rpm4 или archivers/dpkg) и с его помощью<br />

накатить нужные пакеты. Впоследствии недостающие<br />

пакеты можно добавить, используя уже родные Linux-версии<br />

этих программ:<br />

Установка дополнительных пакетов<br />

Red Hat/Fedora Core<br />

# /compat/linux/bin/rpm -ihv --root=/compat/<br />

linux пакет.rpm<br />

Debian/Ubuntu<br />

# /compat/linux/usr/bin/dpkg -i --root=/compat/<br />

linux пакет.dpkg<br />

man linux<br />

Вариант третий. Простой<br />

Процесс создания среды исполнения существенно упростится,<br />

если дистрибутив Linux уже установлен на смежном разделе. В<br />

этом случае не потребуется даже копирование, останется только<br />

подключить Linux-раздел к каталогу /compat/linux, и среда исполнения<br />

готова. Конечно, чтобы использовать этот прием, придется<br />

расместить Linux на файловой системе, поддерживаемой FreeBSD<br />

хотя бы в режиме чтения.<br />

Вариант четвертый. Радикальный<br />

Четвертый и последний вариант довольно радикальный и издевательский<br />

по своей задумке. Он применим в тех случаях, когда<br />

Linux-программе необходимо обеспечить доступ к корневой<br />

файловой системе (например, если программа должна обращаться<br />

к «настоящей» версии каталога /etc). Chroot-окружение,<br />

в которое помещается любой процесс Linux, не предоставляет<br />

такой возможности (в этом и заключается смысл «песочницы»).<br />

Но есть выход: можно просто создать ссылку /compat/linux,<br />

указывающую на корень (rm -rf /compat/linux && ln -s / /compat/<br />

linux), и тогда chroot-окружение станет идентичным корню.<br />

Проблема только в том, что Linux-программы не смогут работать<br />

с библиотеками FreeBSD, им нужны их нативные версии. Просто<br />

скопировать эти библиотеки в корень не удастся по причине<br />

пересечения имен, поэтому следует переименовать их по определенной<br />

схеме (например, libc.so.6 в libc-linux.so.6). После<br />

этого в файл /etc/libmap.conf можно добавить такие строки:<br />

# vi /etc/libmap.conf<br />

[/home/username/linux]<br />

libc.so.6 libc-linux.so.6<br />

libdl.so.2 libdl-linux.so.2<br />

И так для всех библиотек, необходимых программе. Сами же Linuxпрограммы<br />

следует положить в каталог /home/username/linux,<br />

именно для него будет действовать приведенное переназначение<br />

имен. Описанный способ может показаться слишком грубым, но он<br />

действительно работает и может помочь в определенных<br />

обстоятельствах. z<br />

/ 118<br />

xàêåð 05 /101/ 07

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!