| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Запуск Linux-приложений из FreeBSD Но на каждую тетку с резьбою
Тимур Шаов Существует устоявшееся мнение о том, что применение FreeBSD в качестве настольной системы затрудняется недостаточным (по сравнению, скажем, с Linux) количеством приложений общего назначения. При этом забывают часто, что база пользовательских программ этих систем практически одинакова. И почти все приложения, доступные в исходных текстах на условиях свободных лицензий, можно найти если не в коллекции пакетов FreeBSD, то уж в системе ее портов - точно (недавно прошло сообщение, что число портированных под FreeBSD программ дошло до 9 тысяч - не каждый дистрибутив Linux может похвастаться таким числом прекомпилированных специально для него пакетов). Если же некая по зарез необходимая программа случайно не попала в этот неслабый, согласитесь, список, - ее, как правило, можно скомпилировать для работы во FreeBSD руками. Разумеется, проделать такую процедуру можно только в том случае, если исходные тексты нужной программы доступны. И тут выступает оборотная сторона медали популярности Linux, привлекшей к ней внимание производителей проприетарного софта. Каковые распространяют свои достижения, пусть подчас и бесплатно (при некоторых ограничениях), но - только в прекомпилированном специально под Linux виде (а иногда и под конкретный его дистрибутив, чаще всего - RedHat и его клоны). Однако на самое хитрое ухо всегда найдется палец с левой резьбой. И в данном случае таким инструментом оказывается режим бинарной совместимости с Linux, реализованный во FreeBSD, который позволяет запустить минимум 90% всех Linux-приложений. Он основывается, насколько я понимаю, на подмене системных вызовов ядра Linux соответствующими вызовами ядра FreeBSD. И, в отличие от большинства эмуляторов (и, тем более, виртуальных машин типа VMWare), практически не приводит к снижению производительности. Высказывается даже мнение, что Linux-программы в режиме совместимости во FreeBSD выполняются быстрее, чем в родной среде. Впрочем, количественные данные на этот предмет мне не известны. Доступ к режиму совместимости требует двух действий - установки пакета linux-base и внесения изменений в конфигурационный файл /etc/rc.conf. Самый простой путь к этому - программа sysinstall. Запустив оную, следует отправиться в меню Configure, перейти в пункт Packages и в списке доступных (на CD, ftp- или http-сервере) пакетов выбрать в разделе emulators тот, который называется linux_base (в версии 5.1 это будет linux_base-7.1_X). После установки пакета нужно будет подняться до пункта Startup в том же меню Configure и отметить опцию Linux (расшифровывающуюся как This host wants to be able to run Linux binaries). Все, теперь после перезапуска машины режим Linux-совместимости будет доступным. Можно поступить еще проще - сразу отправиться в пункт Configure->Startup и отметить опцию Linux. По выходе из него будет автоматически предложено установить пакет linux_base, с чем, естественно, следует согласиться. Другой путь - установить linux_base посредством системы портов, для чего нужно перейти в каталог /usr/ports/emulators/linux_base и дать команду $ make install clean А затем в любом текстовом редакторе добавить в файл /etc/rc.conf строку linux_enable="YES" и перезагрузить машину. Результат в любом случае будет одинаков - появление в каталоге /usr/compat подкаталога linux (и символической ссылки на него в корневом каталоге - /compat/linux. Он представляет собой обычное дерево файловой системы Linux, с подкаталогами bin, etc, libs и так далее, который может быть сделан корневым с помощью столь же обычной команды chroot. Впрочем, в режиме Linux-совместимости исполнимые файлы автоматически ищутся в соответствующих ветвях каталога /usr/compat/linux, и необходимости в смене корня в большинстве случаев не возникает. Устанавливая linux_base по умолчанию, мы получаем своего рода теневую Linux-систему, соответствующую (в текущей ветке FreeBSD) примерно RedHat 7.X. Дополнительный к чему бонус - получение возможности работы с rpm-пакетами вообще (хотя сам rpm можно установить и независимо). Однако из портов можно при необходимости установить совместимость с более старым RedHat (версий 6.X) или даже Debian (порты для них находятся в каталогах /usr/ports/emulators/linux_base-6 и /usr/ports/emulators/linux_base-debian, /соответственно. Получив доступ к режиму Linux-совместимости, дело остается за малым - установить сами Linux-программы. Делается это различными, иногда не совсем тривиальными, способами, некоторые из которых описаны во FreeBSD Handbook. Однако для некоторых Linux-программ установка во FreeBSD проста, как грабли. Примером чему - RealPlayer. Конечно, формат Real и для аудио, и для видео, - далеко не верх
совершенства, особенно учитывая его закрытый характер. Однако ничего не
поделаешь - лучшая на Руси (и не только) подборка Благо, для установки его Linux версии во FreeBSD достаточно скачать оную (у меня под рукой оказалась версия rp8_linux20_libc6_i386_cs2.bin), проверить, имеет ли этот файл бит исполнения (при скачивании, например, из под Windows он теряется), а затем просто запустить его (из-под root'а) в терминальном окне X-сессии: $ ./rp8_linux20_libc6_i386_cs2.bin Далее отвечаем на ряд обычных занудных вопросов (типа адреса электронной почты, страны, почтового кода - зачем бы он? - скорости соединения, после чего обнаруживаем в каталоге /usr/local подкаталог RealPlayer8. Из которого его можно запускать на исполнение (от имени уже обычного пользователя) с указанием полного пути $ /usr/local/RealPlayer8/realplay или создать символическую ссылку в любом охваченном переменной PATH каталоге. Как я уже говорил, устанавливая linux_base по умолчанию, мы одновременно получаем возможность прямой установки прекомпилированных для Linux rpm-пакетов. Делается это точно так же, как в RedHat, ASP- или Altlinux - командой rpm -i(hv при необходимости). Однако она потребует некоторых дополнительных опций - указания нового корня (очевидно, что им должен быть /usr/compat/linux), пути к базе данных rpm-пакетов и игнорирования ОС: $ rpm -i --ignoreos --root /usr/compat/linux --dbpath /var/lib/rpm package_name.rpm Установленные таким образом пакеты должны запускаться с указанием полного пути - /usr/compat/linux/usr/bin, например. |
|
| ||||||||||||||||
|