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 />

Эмулятор Sony PlayStation во FreeBSD Добавляем необходимые строки в конфигурационный файл ядра<br />

Пространство ядра<br />

Для того чтобы научить ядро FreeBSD понимать исполняемые файлы<br />

Linux, достаточно подгрузить модуль linux.ko (kldload linux), содержащий<br />

все необходимые обработчики и альтернативную таблицу системных<br />

вызовов. После этого операционная система фактически будет готова к<br />

принятию «чужого» кода. Для закрепления результата следует добавить<br />

строку «linux_load="YES"» в /boot/loader.conf (загрузка одновременно<br />

с ядром), либо «linux_enable="YES"» в /etc/rc.conf (загрузка во время<br />

инициализации системы).<br />

Поклонники монолитной модели ядра могут избежать необходимости<br />

ручной загрузки модуля, просто включив код совместимости в ядро. Конфигурационный<br />

файл ядра должен содержать следующие строки:<br />

# vi /sys/i386/conf/GENERIC<br />

option COMPAT_LINUX<br />

option PSEUDOFS<br />

option LINPROCFS<br />

option LINSYSFS<br />

Если сборка будет происходить для архитектуры amd64, то вместо<br />

COMPAT_LINUX следует указать строку COMPAT_LINUX32. Последние две<br />

строки указывают на то, что код Linux-реализаций файловых систем proc и<br />

sys также должен быть включен в ядро. Делать это не обязательно, каждая<br />

из них может быть собрана модулем.<br />

На этом настройка ядра заканчивается, и мы переходим к конфигурированию<br />

Linux-окружения.<br />

Пространство пользователя<br />

Как уже было сказано ранее, исполнение бинарных файлов Linux происходит<br />

в изолированном окружении, которое располагается в каталоге<br />

/compat/linux. Чтобы программы могли работать в таком окружении, им<br />

требуется доступ ко всем необходимым библиотекам, конфигурационным<br />

файлам и специальным файлам, вроде тех, что находятся в каталоге /proc.<br />

Есть несколько способов обеспечить наличие этих файлов, мы рассмотрим<br />

их все.<br />

Вариант первый. Классический<br />

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

FreeBSD, заключается в установке окружения через коллекцию портов.<br />

Существует несколько портов, воссоздающих окружение времени исполнения<br />

различных дистрибутивов Linux. В современных версиях FreeBSD<br />

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

Fedora Core 4 (emulators/linux_base-fc4), также доступны коллекции<br />

пакетов из дистрибутива Gentoo 2006.0 (linux_base-gentoo-stage1,<br />

Переменные sysctl<br />

Существует три переменные ядра, напрямую относящихся к уровню совместимости<br />

с Linux: compat.linux.osname — имя имитируемой операционной<br />

системы; compat.linux.osrelease — версия ядра Linux, стабильные<br />

версии FreeBSD поддерживают только совместимость с ядром версии<br />

2.4.2 (во FreeBSD 7 была добавлена поддержка ядра 2.6.19); compat.linux.<br />

oss_version — версия интерфейса OSS (Open Sound System).<br />

linux_base-gentoo-stage2 и linux_base-gentoo-stage3). По большому<br />

счету неважно, какой из них использовать. Необходимость в переключении<br />

на окружение другого дистрибутива может возникнуть только в<br />

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

данный момент.<br />

В случае если Linux-окружение не было установлено во время инсталляции<br />

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

pkg_add /cdrom/packages/All/linux_base-fc-4_9.tbz (имя пакета может<br />

отличаться в зависимости от версии FreeBSD), либо пройти в каталог<br />

/usr/ports/emulators/linux_base-fc4 и набрать «make install clean». После<br />

того как одна из этих операций будет проделана, каталог /compat/linux<br />

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

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

без этого действия некоторые программы Linux откажутся работать.<br />

Открываем файл /etc/fstab и добавляем в него следующие строки:<br />

# vi /etc/fstab<br />

none /compat/linux/proc linprocfs rw 0 0<br />

none /compat/linux/sys linsysfs rw 0 0<br />

none /compat/linux/dev devfs rw 0 0<br />

Первые две строки указывают на то, что к каталогам proc и sys, находящимся<br />

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

файловых систем procfs и sysfs. Последняя же строка говорит о том, что<br />

к каталогу dev также должна быть примонтирована родная файловая<br />

система devfs. Это может показаться абсурдом, так как практически ни<br />

один специальный файл этого каталога не совпадает по имени у FreeBSD<br />

и Linux. На самом деле, файловая система devfs нужна только для того,<br />

чтобы Linux-программы смогли выводить звук, ведь интерфейс OSS,<br />

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

одинаков в Linux и FreeBSD.<br />

После того как операция по модификации файла /etc/fstab будет закончена,<br />

набираем «mount-a», чтобы изменения вступили в силу. Это все, теперь<br />

внутри твоей FreeBSD поселился самый настоящий Linux. Ты даже можешь<br />

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

xàêåð 05 /101/ 07<br />

/<br />

117

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

Saved successfully!

Ooh no, something went wrong!