FreeBSD: варианты выбора


Теоретические рассуждения предыдущей заметки — о несравненных достоинствах FreeBSD как настольной платформы, — следовало бы подкрепить практическими примерами. А поскольку практика эта основывается на примере себя, любимого, сделаю маленький биографический экскурс — как я, не будучи ни сисадмином, ни developer'ом (и не имея ни малейшего желания становиться ни тем, ни другим), использую FreeBSD в своей обыденной жизни. Но перед этим следует слегка определиться с вопросом,

Из чего сделана FreeBSD
Понять, из чего сделана FreeBSD, проще всего в сравнении ее с Linux'ом. В отношении последнего существует две противоположные точки зрения. Первая, высказываемая Ричардом Столлменом, гласит, что Linux — это ядро системы, а все прочее, объединяемое в дистрибутивы его, суть отдельные пакеты проекта GNU (по преимуществу). Вторая точка зрения неявно подразумевается многочисленными составителями дистрибутивов. Согласно ей, Linux — это все, что майнтайнер дистрибутива в оный включил (вплоть до оконной системы X, интегрированных сред типа GNOME и KDE, и прочего, обнаруживаемого на 5-10-дисковых наборах).

В свое время я исследовал этот вопрос в серии заметок на UNIX4All и пришел к выводу, что, подобно Шарикову, не согласен ни с тем, ни с другим мнением. Ибо Linux — системная целостность, образованная ядром и исторически сложившимся комплексом поддержки, обеспечивающим старт машины и инициализацию системы, работу с устройствами и файловыми системами, а также средства для наращивания ее функциональности (по простому — компилятор и системные библиотеки). Все это вместе можно объединить в понятие Base Linux — в противоположность всему тому множеству открытого и свободного софта, который может функционировать (в том числе и) под Linux.

Во FreeBSD противопоставление базиса системы и пользовательских приложений проводится еще более последовательно. Первый объединяется в понятие Distributions, приложения же охватываются термином Ports, то есть программы, портированные (в том числе и) на FreeBSD.

В Distributions, то есть собственно систему FreeBSD par exellence, включаются

ядро системы;
комплекс низкоуровневых утилит поддержки;
набор аналогов классических Unix-утилит для работы с файлами и текстами;
системные библиотеки BSD libc и r_libc;
базовые средства разработки (компилятор Си);
базовые средства безопасности (включая OpenSSH и OpenSSL).
Компоненты Distributions в подавляющем своем большинстве — оригинальные разработки проекта FreeBSD и его исторических предшественников. Говоря о классических утилитах Unix, я не случайно употребил термин «аналоги» — это, как правило, функционально расширенное их воспроизведение (достаточно посмотреть на утилиту more, которая по своим функциям гораздо более походит на Linux'овый less, нежели на свою тезку из систем-потомков System V). Самобытность компонентов Distributions подчеркивается лицензией, под которой они распространяются, и которая носит имя BSD-лицензии. В отличие от широко известной лицензии GPL, она не возбраняет распространение основанных на ней разработок без исходных текстов (здесь не место обсуждать вопрос о том, какая из этих лицензий более соответствует идеалам свободы и демократии).

Справедливости ради нужно заметить, что в состав FreeBSD Distributions исторически входит некоторое количество компонентов, заимствованных из разработок проекта GNU и, соответственно, подпадающих под лицензию GPL (наиболее показательный пример — компилятор gcc: это тот же самый компилятор, который входит в состав любого дистрибутива Linux). Однако существует устойчивая тенденция по замене GNU-программ оригинальными разработками FreeBSD (правда, именно до gcc, похоже, дело дойдет не скоро).

Еще одна отличительная особенность компонентов FreeBSD Distributions — система их документации. Все они сопровождаются полным описанием в классическом для POSIX-систем формате man-страниц. В программах GNU в последнее время можно заметить тенденцию подмены manual pages на документацию в формате info (ИМХО, самая GNU'тая из всех GNU-разработок). Однако даже GNU-программы, включенные в Distributions, содержат подробнейшие man-страницы — для примера сравните man (1) gcc из современных версий FreeBSD с оригинальным GNU man-pages для этого же пакета.

Компоненты Distributions при инсталляции системы разворачиваются из бинарных тарбаллов. Однако предусмотрен механизм их автоматической тотальной пересборки с учетом пользовательских настроек — make world. Ну и, разумеется, перекомпиляция ядра системы (в текущих версиях — операция make buildkernel) — неотъемлемый атрибут индивидуального конфигурирования FreeBSD.

Порты FreeBSD — концепция, воздействие которой на мир Open Sources трудно переоценить, и потому заслуживает особого рассмотрения. В текущем же контексте достаточно сказать, что это — система автоматического получения исходников (по Сети, с мастер-сайтов разработчиков), отслеживания их зависимостей, адаптации (то есть наложения FreeBSD-специфичных патчей), сборки (компиляции и линковки с разделяемыми библиотеками) и установки (то есть инкорпорации в файловую систему FreeBSD) практически любых программ, свободно распространяемых и доступных в исходных текстах. Она предусматривает также генерацию бинарных пакетов, пригодных для автономного (с учетом зависимостей) распространения — именно в таком виде портированные программы входят в состав полного дистрибутива FreeBSD.

Важно подчеркнуть, что если сама по себе система портов — неотъемлемая часть FreeBSD Distributions, то порт любой программы из ее состава не содержит ни исходных текстов, ни исполнимых модулей: исходники любой портированной программы — абсолютно те же самые, на которых основаны пакеты любого Linux-дистрибутива, а бинарники генерируются автоматически из системы портов. И потому во FreeBSD в принципе доступно все то же многообразие открытых и свободных программ, что и в Linux.

Обособленность портированных программ от FreeBSD Distributions подчеркивается отличием лицензионных соглашений: все портированные программы распространяются под теми лицензиями, которые определены для них авторами (GPL — для программ из проекта GNU и соплеменных, лицензия X-консорциума — для оконной системы X, и так далее).

Distributions — обзор возможностей
Сам по себе FreeBSD Distributions — весьма мощный программный комплекс, пригодный для решения многих пользовательских задач. Разумеется, в его составе — низкоуровневые системные утилиты, утилиты для управления файловыми системами, процессами, получения информации и т.д.

Однако в Distributions можно найти множество пользовательских утилит — средства работы с файлами, включая столь универсальное, как find, весьма сложные программы обработки текстов — от экранного редактора ee и строчных редакторов ed и sed до awk, средства поиска текстовых фрагментов — grep, а также инструменты форматирования текстов (семейство groff). Имеется ftp-клиент, почтовая система sendmail, базовые средства работы с сетями (в том числе и для модемного соединения).

Наконец, средств Distributions вполне достаточно для наращивания функциональности системы путем сборки программ. Для этого в нем предназначены компилятор gcc и полный комплекс утилит поддержки, начиная с языковых анализаторов и кончая универсальной make.

Тем не менее, для комфортной работы (не говоря уже о развлечениях) средств Distributions явно недостаточно. И тут на помощь приходит система портов FreeBSD — в виде ли средства получения и сборки исходников, или как метод генерации бинарных пакетов.

Установка программ из системы портов или в виде прекомпилированных пакетов во FreeBSD чрезвычайно проста — настолько, что прямо-таки провоцирует пользователя устанавливать и устанавливать программы. А поскольку она еще включает и развитые средства для «чистого» удаления всего того, что оказалось ненужным, развлечения эти проходят практически безболезненно. И потому очень важно сразу же определиться с набором жизненно важных приложений. Обзор их, исходя из собственного опыта, и будет темой дальнейшего рассмотрения.

Сразу оговорюсь — все сказанное ниже лишь мое субъективное мнение, заслуживающее подзаголовка типа «Мои любимые программы». Я не навязываю своего выбора, но в каждом конкретном случае постараюсь обосновать, почему его сделал. Возможно, это поможет вам сделать выбор собственный.

Shells
Командная оболочка (она же — командный интерпретатор, по простому shell) — первая программа, с которой пользователь сталкивается в любой POSIX-совместимой системе. Правда, именно во FreeBSD эта первая программа способна обескуражить даже многоопытного линуксоида: вместо принятого в большинстве дистрибутивов Linux мощного и интерактивно удобного bash ему предлагается /bin/sh, чьи интерактивные возможности навевают воспоминания о первозданном shell'е товарища Борна. Правда, для суперпользователя есть дополнительная привилегия — по умолчанию ему назначается нечто под именем /bin/csh, понимающее, по крайней мере, автодополнение путей и помнящее историю команд.

Надо сказать, что ни та, ни другая из умолчальных оболочек не является копией своих престарелых тезок (и shell Борна, и изначальный берклианский csh не принадлежат к числу свободно распространяемых программ). Оболочка /bin/csh — это просто тот же командный интерпретатор tcsh в облегченном виде. Ну а /bin/sh — это искусственная конструкция, призванная реализовать мифический POSIX shell со всеми заложенными стандартом возможностями (точнее, их отсутствием).

Использование интерактивно очень слабого /bin/sh в качестве системной оболочки (напомню, что принятый в этом качестве в Linux bash неизмеримо мощнее) имеет целью не только соответствие стандартам: это очень маленькая и компактная оболочка, которая не поглощает ресурсов при запуске ее в качестве интерпретатора сценариев (а все системные сценарии FreeBSD — это скрипты /bin/sh). Ведь при shell-скриптинге интерактивные возможности оболочки несущественны, отступая перед требованиями совместимости и быстродействия.

В качестве же пользовательской (то есть login shell) никто не возбраняет применять любую другую оболочку, с более мощными интерактивными возможностями. Благо в портах FreeBSD можно обнаружить и милый сердцу линуксоида bash, и полномерный tcsh, и pdksh — свободный клон оболочки Корна (именно она послужила прототипом POSIX shell, а не исходный shell Борна, как часто полагают). Есть и много весьма экзотических оболочек, перечислять которые я не буду.

Однако среди этого списка, а увидеть его можно командой

$ ls /usr/ports/shells

особое внимание привлекает (надеюсь) одна оболочка — zsh. Именно она, вне зависимости от используемой операционной системы, бессменно стоит у меня в качестве login shell на протяжении уже нескольких лет. В чем ее преимущества?

Во-первых, принадлежа к семейству Bourne Shell совместимых, она не менее пригодна для shell-скриптинга, чем bash. Во-вторых, по своим интерактивным возможностям zsh не имеет себе равных. Возможности настройки автодополнений самых разных видов просто необъятны. Например, набрав в командной строке что-нибудь вроде

$ cd /u/sr/sy

и нажав клавишу табуляции, можно чудесным образом перенестись в каталог с исходниками ядра FreeBSD. Далее — автокоррекция ошибок, как при указании путей, так и имен команд, и даже их опций и аргументов; мощные средства наращиваемого поиска в командах; система глобальных псевдонимов, не имеющая, насколько я знаю, аналогов. И многое, многое другое.

И, наконец, в третьих, zsh обладает максимальными возможностями настройки приглашения командной строки, позволяющими сделать его максимально информативным. В общем — попробуйте, не пожалеете.

К слову сказать, не уйдут обиженными и те, кто в качестве пользовательской оболочки предпочитают файловые менеджеры командирского стиля. Из числа сыновей и внуков командира Нортона во FreeBSD обнаруживается не только традиционный Midnight Commander (правда, тут его реализация оставляет желать лучшего, существенно уступая Linux'овой), но и весьма своеобразный Deco (Demos Commander — детище отцов Российского Интернета). При внешнем сходстве с прототипом он — не столько файловый менеджер, сколько визуализатор действий в командной строке.

Оконные менеджеры и интегрированные среды
Роль, отведенная в консоли командным оболочкам, в графическом режиме (то есть в оконной системе X) призваны играть оконные менеджеры или (для тех, которые с претензиями) интегрированные графические среды.

Здесь трудно дать однозначные рекомендации — выбор среды обитания графического режима дело не просто субъективное, я бы сказал, даже интимное. Впрочем, для поклонников истинной интегрированности он однозначен: KDE. GNOME в этом отношении до нее далеко не дотягивает (да простят меня его поклонники), а XFce — функционально много беднее (хотя и она может быть интересна интеграторам с аскетическими склонностями).

Впрочем, и с GNOME не все так однозначно. Дело в том, что эта среда базируется на библиотеке Gtk, лежащей в основе многих других (напрямую с GNOME не связанных) приложений. Из которых минимум одно будет абсолютно необходимо — знаменитый Gimp (о котором будет говориться в разделе про графику). Так что если нет желания (возможности) плодить всякого рода библиотеки — почему бы не остановиться и на GNOME...

С оконными менеджерами — еще сложнее, ибо имя им — легион: от совсем простых, ничего, кроме манипулирования окнами, делать не умеющих, до вплотную приближающихся по функциональности к интегрированным средам.

Примером последних выступает WindowMaker, очень элегантный внешне и за годы своего существования обросший многочисленными дополнительными модулями.

Впрочем, и простые исходно оконные менеджеры из семейства Blackbox'а можно, затратив некоторые усилия, превратить в интегрированные среды индивидуального (можно сказать — штучного) разбора. И здесь пальма первенства — за Fluxbox благодаря его удобной системе закладок и возможности группировать приложения. Во всяком случае, именно это — мой любимый оконный менеджер...

Текстовые редакторы
Текстовый редактор — один из главных орудий труда пользователя POSIX-совместимых систем. Не случайно в этой среде культивируется трепетное, даже сакральное к ним отношение. А дискуссии на тему vim vs. emacs по накалу страстей приближаются к разговорам футбольных болельщиков.

Однако я к участию в священных войнах призывать не буду. И Vim, и Emacs — мощные орудия для работы с текстами, далеко переросшие (особенно последний) рамки просто редакторов. И именно потому — избыточные для большинства пользователей-непрограммистов.

А потому в качестве консольного редактора, взамен штатного для FreeBSD Distributions редактора ee, рискну предложить скромного трудягу — joe. Он легок в килобайтах, легок в освоении, легок в настройке. А благодаря простому до прозрачности макроязыку и возможности протоколирования действий еще и легко расширяется функционально — до пределов, ограниченных только задачами и фантазией пользователя. По крайней мере, превращение его, скажем, в специализированный редактор html-кода осуществляется легким движением руки и в считанные минуты. И в итоге joe в равной мере подходит как для правки пары строк в конфигурационном файле, так и для сочинения весьма объемных манускриптов (проверено лично — все мои книги и 90% статей написаны в нем).

Работа в консоли замечательно удобна и полезна для здоровья, однако может показаться несовременной (да и лишние гигагерцы с гигабайтами надо ведь куда-то девать). И потому может возникнуть желание работать с текстами в графическом режиме. Что ж, выбор редакторов для оконной системы X — еще более обширен, чем для консоли.

Во-первых, в X'ах (как-нибудь я расскажу, почему это жаргонное словечко лучше отражает суть явления, чем всякие коряво-пуристические переводы) можно запустить любой редактор консольного режима (приобретя иногда некоторые дополнительные возможности). Во-вторых, такие консольные монстры, как Vim и Emacs, будучи собраны должным образом (то есть с поддержкой X'ов) приобретают столько новых функций, что вполне сойдут за самостоятельные программы. И в третьих, для системы X разработано множество редакторов, исконно использующих возможности графического режима.

И тут должен высказать свое мнение: если дискуссии о первенстве среди консольных редакторов будут продолжаться ad finem seculorum, то в отношении редакторов графического режима споры неуместны. Ибо пальма первенства в этом клане, безусловно, за Nedit. Расписывать его достоинства можно было бы долго. Достаточно сказать, что при внешне непритязательном интерфейсе (что само по себе есть плюс — простор творческой мысли не стеснен иконками, рюшками и менюшками) он использует возможности истинно X'ового графического режима на все 100%. В частности, в нем существует несколько способов выделения текста мышью, задействующее все три потенциальные ее кнопки. А если прибавить сюда развитой макроязык с возможностью протоколирования действий и возможность интеграции любых shell-сценариев — мое утверждение о превосходстве Nedit'а не покажется через чур смелым.

Офис
Хотя текстовый редактор неизмеримо превосходит любой ворд-процессор при создании текстов, претендующих на оригинальность содержания, время от времени приходится заниматься и их оформлением. Для этого во FreeBSD можно отыскать множество исконно Unix'овых текстовых процессоров (то есть, если следовать оригинальной терминологии, — неинтерактивных систем разметки и форматирования текстов), начиная с groff и заканчивая TeX'ом. Если последний покажется через чур сложным — доступна и графическая надстройка над них, Lyx, в которой за результат можно не беспокоится даже при отсутствии всяких представлений о полиграфии: шедевра верстального искусства, может, и не получится, но и от откровенно отвратительного макета он спасет. Есть и малоизвестный гомолог TeX'а — lout, более легкий в освоении и использовании, но вполне достаточный для тех, кому не нужны трехэтажные конструкции из интегралов по траектории.

Не возбранно, однако, и использование традиционных (для Windows/Mac/иже с ними) ворд-процессоров WISIWIG-типа. Здесь первым следует помянуть OpenOffice: его версия под Linux, собранная с поддержкой всей кириллической специфики (например, в сборке Altlinux) вполне справно функционирует под FreeBSD в т.н. режиме совместимости. Ничуть не менее быстро (вернее, не более медленно), чем в родной операционке. Да и собственный FreeBSD-порт этого монстра конторской интеграции давно доступен.

Если, однако, быстродействия OpenOffice покажется недостаточно, то имеются и альтернативы. Например, KOffice — последние его версии приобрели устойчивость, позволяющую заниматься редактированием и форматированием без боязни через полчаса потерять все результаты работы. Ну и средства Gnome Office — ворд-процессор Abiword и электронная таблица Gnumeric, — при своей относительной простоте и компактности вполне справляются с большинством конторских задач.

Средства интернет
С чем особенно хорошо в мире Open Sources (и, соответственно, во FreeBSD тоже) — так это со средствами навигации по интернету. Начать тут следует с двух браузеров текстового режима — lynx и links. Воспроизвести красоты web-дизайна они, разумеется, не способны. Зато — эффективно избавляют от дизайнерских уродств. А заодно весьма способствуют экономии трафика, делая ненужными всякого рода баннеро-резки, отключение графики и тому подобные дела. Links к тому же вполне может воспроизводить таблицы и фреймы, имеет удобное меню, легкую систему настройки и отлично разбирается в кодировках кириллицы.

Браузеров же графического режима — труднообозримое количество. Здесь и Mozilla со всеми ее plug-in'ами (в том числе для просмотра Macromedia Flash, графики в формате DjVu, прокручивания RealAudio и RealVideo), и построенный на том же движке, но более быстрый galeon, и предельно облегченный, а потому просто стремительный dillo. Я, однако, в качестве браузера в X'ах использую konqueror из KDE — он вполне заслуживает причисления к лику лучших программ всех времен и народов. Будучи настроен должным образом, он совмещает в одном лице и браузер, и файловый менеджер, и универсальный визуализатор любых операций в командной строке — последнее благодаря полноценному окну эмулятора терминала.

На почтовых программах и ftp-клиентах задерживаться не буду: прошу поверить на слово, их вдоволь, и для консоли, и для графического режима. Правда, традиционная во FreeBSD схема настройки почты — с собственным почтовым сервером Sendmail, — в домашних условиях может напоминать срельбу из пушки по воробьям. Однако никто не мешает настроить для доставки/отправки почты легкие почтовые клиенты типа mutt или pine. А в графическом режиме доступны и почтовый клиент из Mozilla, и штатный почтовый клиент из KDE — KMail. В первую же очередь — замечательно быстрый Sylpheed, при простоте использования обеспечивающий функциональность, сравнимую со знаменитым The Bat.

Графика
Средства работы с графикой традиционно считались слабым местом открытых и свободных Unix-подобных систем. Однако в области растровой графики подвижки на лицо: не случайно растровый графический редактор Gimp признан одним из самых удачных проектов в мире Open Sources. И, к слову сказать, портирован и под Windows, где недостатка программ такого рода никогда не наблюдалось. Не буду вдаваться в дискуссию — лучше он Photoshop'а или нет: для профессиональной подготовки web-графики и любительских манипуляций со всей прочей графикой его хватает за глаза. А высокая полиграфия... что же, это — отнюдь не целевая ниша FreeBSD, для того Mac'и придуманы.

Уникальная особенность FreeBSD — возможность делать скриншоты текстовой консоли. Для этой цели в ней есть программа scr2png, преобразующая экранные дампы (создаваемые средствами обычного консольного драйвера — syscons) в истинные графические изображения. Правда, только в png-формате, но много ли систем могут похвастаться и этим?

С векторной графикой несколько хуже: традиционные векторные редакторы типа sketch или tgif могут вызвать только скептическую улыбку у пользователя последних версий Corel Draw, Illustrator, Freehand. Однако и здесь не все безнадежно: рисовальный модуль из пакета OpenOffice вполне пригоден для того же любительского живописания (а также — для вполне профессиональной технической графики). Плюс к тому он обладает уникальной особенностью — возможностью создания (причем очень легкого) истинно трехмерной (основанной на OpenGL) графики.

Мультимедиа
В аудиосфере FreeBSD если и не впереди планеты всей, то весьма к тому близка: количество cd- и mpeg-проигрывателей можно сопоставить только с суммарным числом текстовых редакторов и браузеров. Лично я пользуюсь для этих целей консольной программой, простой, как три пальца, и соответственно этому именуемой — mpg123. Есть, однако, и более сложные плееры, в том числе и для графического режима. Тут достаточно упомянуть Xmms, обладающий всеми функциями известного winamp'а.

Столь же хорошо обстоит дело с cd-грабберами и mpeg-аудиокодеками. Процедуру о-граббления легко выполнить с помощью cdparamoia, а перегнать на-граббленное в mpeg — универсальной lame или более простым bladeenc. Не забыты и средства конвертации в истинно свободный аудиоформат — ogg, для чего служит пакет vorbis-tools.

В области видеовоспроизведения можно назвать три программы: Noatun из KDE, xine, основанный на Gtk и, пожалуй, наиболее универсальный из всех — Mplayer. К любой из них легко подключаются кодеки для воспроизведения всевозможных видеоформатов, включая DivX. Говорят, и для просмотра DVD их можно использовать, но — не пробовал за неактуальностью...

Надеюсь, моя легкая пробежка трусцой по необъятным просторам портов FreeBSD убедила читателя, что в этой системе есть все необходимое для работы и большая часть роскошного — для развлечения. В принципе, каждая из упомянутых здесь программ заслуживает отдельной статьи, и подчас не одной. Но и сказанного, думаю, достаточно для того, чтобы попробовать свои силы в ее установке, что и будет темой нескольких ближайших заметок.

Обновлено: 12.03.2015