2003
Обнаружится дядька с винтом.
Тимур Шаов
Существует устоявшееся мнение о том, что применение FreeBSD в качестве настольной системы затрудняется недостаточным (по сравнению, скажем, с Linux) количеством приложений общего назначения. При этом забывают часто, что база пользовательских программ этих систем практически одинакова. И почти все приложения, доступные в исходных текстах на условиях свободных лицензий, можно найти если не в коллекции пакетов FreeBSD, то уж в системе ее портов - точно. Ведь количество портов нынче, по данным FreshPorts, превысило 10000 - не каждый дистрибутив 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.2.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 и для аудио, и для видео, - далеко не верх совершенства, особенно учитывая его закрытый характер. Однако ничего не поделаешь - лучшая на Руси (и не только) подборка авторской песни существует только в этом формате, и до доведения до ума свободных альтернатив (тип Hylix) приходится слушать ее посредством проприетарного RealPlayer'а.
Благо, для установки его 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
(rpm -ihv
при необходимости). Однако она потребует некоторых дополнительных опций - указания нового корня (очевидно, что им должен быть /usr/compat/linux
), пути к базе данных rpm-пакетов и игнорирования ОС:
$ rpm -i --ignoreos --root /usr/compat/linux \
--dbpath /var/lib/rpm package_name.rpm
Установленные таким образом пакеты должны запускаться с указанием полного пути - /usr/compat/linux/usr/bin/filename
, например.
Сказанное имеет силу для относительно простых Linux-программ. Более сложные приложения, типа, скажем, Kylix, требуют некоторых дополнительных ухищрений. Судя по FreeBSD Handbook, существует возможность запуска даже Linux-версии Oracle. Правда, сам я этим никогда не занимался за ненадобностью, и информацией из первых рук не располагаю. Буду признателен за соответствующие данные.