21.1. Краткий обзор
В этой главе будет рассказано о том, каким образом можно запускать приложения, изначально написанные для Linux, под FreeBSD и что нужно для этого сделать.
Возможно, Вы спрашиваете себя, зачем FreeBSD нужно уметь работать с приложениями, написанными для Linux. Ответ на этот вопрос достаточно прост: многие компании и разработчики производят программное обеспечение только для Linux, так как эта операционная система очень быстро завоевала огромную популярность в компьютерном мире. Пользователям же FreeBSD приходится обращаться к этим компаниям и разработчикам с просьбами выпустить версии своих программ специально для FreeBSD. Проблема в том, что большинство производителей программного обеспечения не осознают, насколько бы увеличился их рынок сбыта, выпускай они FreeBSD версии наряду с Linux версиями, и продолжают разрабатывать только под Linux. Что же делать пользователям FreeBSD? В этой ситуации на помощь приходит Linux эмуляция.
Вкратце, FreeBSD позволяет Вам работать с 90% приложений для Linux без каких-либо модификаций последних. Среди них: Star Office, Linux версия Netscape, Adobe Acrobat, RealPlayer 5 и 7, VMWare, Oracle, WordPerfect, Doom, Quake и многие другие. Есть сведения, что в некоторых ситуациях эти Linux программы показывали более высокую производительность при работе под FreeBSD, чем под Linux.
Конечно, существует некоторые особенности Linux, которые (пока) не поддерживаются в полной мере FreeBSD. Например, так обстоят дела с приложениями Linux, использующими файловую систему /proc , так как реализация последней сильно отличается от таковой в FreeBSD (однако, ситуация меняется к лучшему: в FreeBSD-CURRENT поддержка Linux procfs уже встроена в систему). Существуют также системные вызовы, специфичные для i386, как, например, переключение в режим V86.
О том, как установить поддержку запуска Linux программ, читайте в следующей секции .
Установить поддержку linux во freebsd
Но на каждую тетку с резьбою
Обнаружится дядька с винтом.
Тимур Шаов
Существует устоявшееся мнение о том, что применение FreeBSD в качестве настольной системы затрудняется недостаточным (по сравнению, скажем, с Linux) количеством приложений общего назначения. При этом забывают часто, что база пользовательских программ этих систем практически одинакова. И почти все приложения, доступные в исходных текстах на условиях любых свободных лицензий, можно найти если не в коллекции пакетов FreeBSD, то уж в системе ее портов — точно. Ведь число портированных под нее программ превысило десять тысяч — не каждый дистрибутив 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 .
После установки пакета нужно будет подняться до пункта 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 и дать команду
А затем в любом текстовом редакторе вручную добавить в файл /etc/rc.conf строку
Результат в любом случае будет одинаков — появление в каталоге /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 и для аудио, и для видео, — далеко не верх совершенства, особенно учитывая его закрытый характер. Однако ничего не поделаешь — лучшая на Руси (и не только) подборка авторской песни существует только в этом формате, и до доведения до ума свободных альтернатив (тип Hylix) приходится слушать ее посредством проприетарного RealPlayer’а. Да и не крутит Hylix старые Real’ы — почему, остается загадкой.
Благо, для установки его Linux версии во FreeBSD достаточно скачать оную (например, можно взять rp8_linux20_libc6_i386_cs2.bin с диска OpenOffice.org сборки Altlinux), проверить, имеет ли этот файл бит исполнения (при скачивании, например, из под 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 , например.
Многие из нас люблят периодически смотреть флэшки. Да-да, как это ни странно. Поэтому одним из первых портов, которые ставят такие любители (в из числе и один из авторов этой заметки), будет linuxplaginwrapper, включающий в себя flash-player для различных браузеров. Установка его проста, как кусок хозяйственного мыла. И столь же обманчива. Собственно, в самом процессе нет ничего сложного. Сложное начинается потом. Итак:
% cd /usr/ports/www/linuxpluginwrapper % make install clean % less /var/db/pkg/linuxpluginwrapper-20050320/+DISPLAY
И вот из этого-то less , или из вывода команды
$ pkg_info -Dx linuxpluginwrapper
мы и узнаем, что надо скопировать приведённый там текст в /etc/libmap.conf . Затем правим этот файл ручками (ничего сложного, всё хорошо документировано). На этом всё сложное и заканчивается.
Вуаля, флэшки проигрываются в браузере.
Но этого мало. Хотелось бы проигрывать их и, так сказать, стэндэлон. К сожалению, подходящего плейера не нашлось (те, что есть — не проигрывали тестовый файл).
В результате, оптимальным выходом оказался самый простой — запускать windows-версию flash-player’а из под wine. Результат оказался вполне удовлетворительным. Файл проигрывается, скорость нормальная, звук есть. Однако это — совсем другая история. Заметим лишь, что использовался flashpl70.exe, а в качестве тестового — вот этот ролик (3,4 Mb).