Ãœðù - Xakep Online
Ãœðù - Xakep Online
Ãœðù - Xakep Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
unixoid<br />
Linux в гостях<br />
у FreeBSD<br />
Все об эмуляции Linux во FreeBSD<br />
Linux<br />
Евгений «j1m» Зобнин<br />
/ j1m@list.ru /<br />
FreeBSD<br />
Несмотря на то что современная FreeBSD достаточно популярна и хорошо подходит для применения в самых<br />
различных сферах: от высоконагруженных серверов до домашних компьютеров, она все же уступает<br />
Linux в одном немаловажном отношении — доступности программного обеспечения. Разработчики<br />
коммерческого ПО неохотно портируют свои продукты во FreeBSD, останавливаясь на ее гораздо более<br />
популярном конкуренте. К счастью, есть выход — эмуляция Linux.<br />
Как это работает<br />
Перед тем как приступать к настройке, мы посвятим несколько минут изучению<br />
внутренней структуры и механизмов работы эмулятора Linux. Это<br />
нужно для того, чтобы в случае возникновения ошибки или каких-либо<br />
трудностей ты смог правильно идентифицировать и устранить проблему.<br />
Во-первых, эмуляция Linux — это вовсе не эмуляция, а имитация, прослойка,<br />
которая позволяет FreeBSD выдавать себя за Linux. Несмотря на то что почти<br />
все серьезные UNIX-подобные операционные системы совместимы между<br />
собой на уровне API (Application Programming Interface) и следуют стандарту<br />
POSIX, бинарный интерфейс (ABI — Application Binary Interface) этих ОС в<br />
большинстве случаев не совпадает. Например, FreeBSD использует Си-конвенцию<br />
системных вызовов, которая предусматривает передачу аргументов<br />
через стек, в то время как Linux требует, чтобы аргументы системных вызовов<br />
передавались в регистрах общего назначения. Кроме того, наборы системных<br />
вызовов Linux и FreeBSD в некоторых местах не совпадают.<br />
Если исходный код программы доступен и написан с соблюдением<br />
общепринятых стандартов (в первую очередь, POSIX), то не составит<br />
труда пересобрать программу для конкретной операционной системы (о<br />
совместимости ABI позаботится компилятор и низкоуровневые библиотеки),<br />
но что делать, если доступ к исходному коду закрыт? На этот случай<br />
во FreeBSD и других BSD-системах предусмотрен уровень совместимости,<br />
позволяющий операционной системе имитировать ABI другой<br />
UNIX-подобной ОС. Благодаря этому уровню «чужие» программы даже не<br />
догадываются о том, что их исполнение происходит в другой операционной<br />
системе.<br />
/ 116<br />
Если мы рассмотрим процесс загрузки и исполнения бинарного файла<br />
Linux во FreeBSD подробнее, то увидим следующее. Прочитав заголовок<br />
исполняемого файла, FreeBSD найдет в нем специальную метку,<br />
говорящую о том, что это бинарный файл Linux, и активизирует уровень<br />
совместимости, который предоставит созданному процессу таблицу<br />
системных вызовов, совместимую с Linux. При этом сам процесс будет<br />
помещен в chroot-окружение (/compat/linux), содержащее копию среды<br />
Linux (то есть все, что может потребоваться программе во время работы, и<br />
в первую очередь библиотеки). Исполняясь в этой среде, процесс сможет<br />
обращаться к системным вызовам, загружать библиотеки, читать/писать<br />
файлы и делать все, что позволит ОС.<br />
Несколько лет назад для запуска программ Linux во FreeBSD от пользователя<br />
требовалось пометить исполняемый файл специальным флагом<br />
(команда «brandelf -t Linux файл»), чтобы ядро смогло определить, что<br />
запускается бинарный файл Linux, и активировать режим совместимости.<br />
Современные версии компиляторов выставляют такую метку самостоятельно,<br />
и необходимость в этой процедуре возникает только в том случае,<br />
если пользователь запускает очень древнюю программу.<br />
Настройка<br />
Настройку двоичной совместимости с Linux условно можно разделить на<br />
два этапа. Первый — это конфигурирование ядра таким образом, чтобы<br />
научить его правильно обрабатывать исполняемые файлы, собранные для<br />
Linux. А второй — установка Linux-окружения, в котором эти файлы смогут<br />
корректно исполняться.<br />
xàêåð 05 /101/ 07