Алексей Федорчук
Теоретические рассуждения предыдущей заметки - о несравненных достоинствах FreeBSD как настольной платформы, - следовало бы подкрепить практическими примерами. А поскольку практика эта основывается на примере себя, любимого, сделаю маленький биографический экскурс - как я, не будучи ни сисадмином, ни developer'ом (и не имея ни малейшего желания становиться ни тем, ни другим), использую FreeBSD в своей обыденной жизни. Но перед этим следует слегка определиться с вопросом,
Понять, из чего сделана FreeBSD, проще всего в сравнении ее с Linux'ом. В отношении последнего существует две противоположные точки зрения. Первая, высказываемая Ричардом Столлменом, гласит, что Linux - это ядро системы, а все прочее, объединяемое в дистрибутивы его, суть отдельные пакеты проекта GNU (по преимуществу). Вторая точка зрения неявно подразумевается многочисленными составителями дистрибутивов. Согласно ей, Linux - это все, что майнтайнер дистрибутива в оный включил (вплоть до оконной системы X, интегрированных сред типа GNOME и KDE, и прочего, обнаруживаемого на 5-10-дисковых наборах).
Этот вопрос подробно рассмотрен в саге о POSIX. Здесь замечу только, что, подобно Шарикову, я не согласен ни с тем, ни с другим мнением. Ибо Linux - системная целостность, образованная ядром и исторически сложившимся комплексом поддержки, обеспечивающим старт машины и инициализацию системы, работу с устройствами и файловыми системами, а также средства для наращивания ее функциональности (по простому - компилятор и системные библиотеки). Все это вместе можно объединить в понятие Base Linux - в противоположность всему тому множеству открытого и свободного софта, который может функционировать (в том числе и) под Linux.
Во FreeBSD противопоставление базиса системы и пользовательских приложений проводится еще более последовательно. Первый объединяется в понятие Distributions, приложения же охватываются термином Ports, то есть программы, портированные (в том числе и) на FreeBSD.
В Distributions, то есть собственно систему FreeBSD par exellence, включаются
Компоненты Distributions в подавляющем своем большинстве - оригинальные разработки проекта FreeBSD и его исторических предшественников. Говоря о классических утилитах Unix, я не случайно употребил термин "аналоги" - это, как правило, функционально расширенное их воспроизведение. Самобытность компонентов 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-страницы.
Компоненты Distributions при инсталляции системы разворачиваются из бинарных тарбаллов. Однако предусмотрен механизм их автоматической тотальной пересборки с учетом пользовательских настроек - make world. Ну и, разумеется, перекомпиляция ядра системы (в текущих версиях - операция make buildkernel) - неотъемлемый атрибут индивидуального конфигурирования FreeBSD.
Порты FreeBSD - концепция, воздействие которой на мир Open Sources трудно переоценить, и потому заслуживает особого рассмотрения. В текущем же контексте достаточно сказать, что это - система автоматического получения исходников (по Сети, с мастер-сайтов разработчиков), отслеживания их зависимостей, адаптации (то есть наложения FreeBSD-специфичных патчей), сборки (компиляции и линковки с разделяемыми библиотеками) и установки (то есть инкорпорации в файловую систему FreeBSD) практически любых программ, свободно распространяемых и доступных в исходных текстах. Она предусматривает также генерацию бинарных пакетов, пригодных для автономного (с учетом зависимостей) распространения - именно в таком виде портированные программы входят в состав полного дистрибутива FreeBSD.
Важно подчеркнуть, что если сама по себе система портов - неотъемлемая часть FreeBSD Distributions, то порт любой программы из ее состава не содержит ни исходных текстов, ни исполнимых модулей: исходники любой портированной программы - абсолютно те же самые, на которых основаны пакеты любого Linux-дистрибутива, а бинарники генерируются автоматически из системы портов. И потому во FreeBSD в принципе доступно все то же многообразие открытых и свободных программ, что и в Linux.
Обособленность портированных программ от FreeBSD Distributions подчеркивается отличием лицензионных соглашений: все портированные программы распространяются под теми лицензиями, которые определены для них авторами (GPL - для программ из проекта GNU и соплеменных, лицензия X-консорциума - для оконной системы X, и так далее).
Сам по себе FreeBSD Distributions - весьма мощный программный комплекс, пригодный для решения многих пользовательских задач. Разумеется, в его составе - низкоуровневые системные утилиты, утилиты для управления файловыми системами, процессами, получения информации о системе, и т.д.
Однако в Distributions можно найти множество пользовательских утилит - средства работы с файлами, включая столь универсальное, как find, весьма сложные программы обработки текстов - от экранного редактора ee и строчных редакторов ed и sed до awk, средства поиска текстовых фрагментов - grep, а также интсрументы форматирования текстов (семейство groff). Имеется ftp-клиент, почтовая система sendmail, базовые средства работы с сетями (в том числе и для модемного соединения).
Наконец, средств Distributions вполне достаточно для наращивания функциональности системы путем сборки программ. Для этого в нем предназначены компилятор gcc и полный комплекс утилит поддержки, начиная с языковых анализаторов и кончая универсальной make.
Тем не менее, для комфортной работы (не говоря уже о развлечениях) средств Distributions явно недостаточно. И тут на помощь приходит система портов FreeBSD - в виде ли средства получения и сборки исходников, или как метод генерации бинарных пакетов.
Установка программ из системы портов или в виде прекомпилированных пакетов во FreeBSD чрезвычайно проста - настолько, что прямо-таки провоцирует пользователя устанавливать и устанавливать программы. А поскольку она еще включает и развитые средства для "чистого" удаления всего того, что оказалось ненужным, развлечения эти проходят практически безболезненно. И потому очень важно сразу же определиться с набором жизненно важных приложений. Обзор их, исходя из собственного опыта, и будет темой дальнейшего рассмотрения.
Сразу оговорюсь - все сказанное ниже лишь мое субъективное мнение, заслуживающее подзаголовка типа "Мои любимые программы". Я не навязываю своего выбора, но в каждом конкретном случае постараюсь обосновать, почему его сделал. Возможно, это поможет вам сделать выбор собственный.
Командная оболочка (она же - командный интерпретатор, по простому shell) - первая программа, с которой пользователь сталкивается в любой POSIX-совместимой системе. Правда, именно во FreeBSD эта первая программа способна обескуражить даже многоопытного линуксоида: вместо принятого в большинстве дистрибутивов Linux мощного и интерактивно удобного bash ему предлагается /bin/sh, чьи интерактивные возможности навевают воспоминания о первозданном shell'е товарища Борна. Правда, для суперпользователя есть дополнительная привилегия - по умолчанию ему назначается нечто под именем /bin/csh, понимающее, по крайней мере, автодополнение путей и помнящее историю команд.
Надо сказать, что ни та, ни другая из умолчальных оболочек не является копией своих престарелых тезок (и shell Борна, и изначальный берклианский csh не принадлежат к числу свободно распространяемых программ). Оболочка /bin/csh - это просто ссылка на командный интерпретатор tcsh. Ну а /bin/sh - это искусственная конструкция, основанная на ash и призванная реализовать мифический POSIX shell со всеми заложенными стандартом возможностями (точнее, их отсутствием).
Использование интерактивно очень слабого /bin/sh в качестве системной оболочки (напомню, что принятый в этом качестве в Linux bash неизмеримо мощнее) имеет целью не только соответствие стандартам: это очень маленькая и компактная оболочка, которая не поглощает ресурсов при запуске ее в качестве интерпретатора сценариев (а все системные сценарии FreeBSD - это скрипты /bin/sh). Ведь при shell-скриптинге интерактивные возможности оболочки несущественны, отступая перед требованиями совместимости и быстродействия.
В качестве же пользовательской (то есть login shell) никто не возбраняет применять любую другую оболочку, с более мощными интерактивными возможностями. Благо в портах FreeBSD можно обнаружить и милый сердцу линуксоида bash, и pdksh - свободный клон оболочки Корна (именно она послужила прототипом POSIX shell, а не исходный shell Борна, как часто полагают). Есть и много весьма экзотических оболочек, перечислять которые я не буду.
Однако среди этого списка, а увидеть его можно командой
$ ls /usr/ports/shells
особое внимание привлекает (надеюсь) одна оболочка - zsh. Именно она, вне зависимости от используемой операционной системы, бессменно стоит у меня в качестве login shell на протяжении уже нескольких лет. В чем ее преимущества?
Во-первых, принадлежа к семейству Bourne Shell совместимых, она не менее пригодна для shell-скриптинга, чем bash. Во-вторых, по своим интерактивным возможностям zsh не имеет себе равных. Возможности настройки автодополнений самых разных видов просто необъятны. Например, набрав в командной строке что-нибудь вроде
$ cd /u/sr/sy
и нажав клавишу табуляции, можно чудесным образом перенестись в каталог с исходниками ядра FreeBSD. Далее - автокоррекция ошибок, как при указании путей, так и имен команд, и даже их опций и аргументов; мощные средства наращиваемого поиска в командах; система глобальных псевдонимов, не имеющая, насколько я знаю, аналогов. И многое, многое другое.
И, наконец, в третьих, zsh обладает максимальными возможностями настройки приглашения командной строки, позволяющими сделать его предельно информативным. В общем - попробуйте, не пожалеете. А более подробную информацию о zsh можно получить здесь.
К слову сказать, не уйдут обиженными и те, кто в качестве пользовательской оболочки предпочитают файловые менеджеры командирского стиля. Из числа сыновей и внуков командира Нортона во FreeBSD обнаруживается не только традиционный Midnight Commander (правда, тут его реализация оставляет желать лучшего, существенно уступая Linux'овой), но и весьма своеобразный Deco (Demos Commander - детище отцов Российского Интернета). При внешнем сходстве с прототипом он - не столько файловый менеджер, сколько визуализатор действий в командной строке.
Роль, отведенная в консоли командным оболочкам, в графическом режиме (то есть в оконной системе X) призваны играть оконные менеджеры или (для тех, которые с претензиями) интегрированные графические среды.
Здесь трудно дать однозначные рекомендации - выбор среды обитания графического режима дело не просто субъективное, я бы сказал, даже интимное. Впрочем, для поклонников истинной интегрированности он однозначен: KDE. GNOME в этом отношении до нее далеко не дотягивает (да простят меня его поклонники), а XFce - функционально много беднее (хотя и она может быть интересна интеграторам с аскетическими склонностями).
KDE часто устрашает пользователя своим объемом. Однако во FreeBSD имеется облегченный мета-порт этой графической среды (ports/x11/kde-lite), из которого устанавливается ограниченный набор KDE-приложений, Ну и есть возможность индивидуальной установки отдельных компонентов KDE. Я, например, ограничиваюсь kdebase, kdenetworks и (в версиях, начиная с 3.2) kdepim.
Впрочем, и с GNOME не все так однозначно. Дело в том, что эта среда базируется на библиотеке Gtk, лежащей в основе многих других (напрямую с GNOME не связанных) приложений. Из которых минимум одно будет абсолютно необходимо - знаменитый Gimp (о котором будет говориться в разделе про графику). Так что если нет желания (возможности) плодить всякого рода библиотеки - почему бы не остановиться и на GNOME...
С оконными менеджерами - еще сложнее, ибо имя им - легион: от совсем простых, ничего, кроме манипулирования окнами, делать не умеющих, до вплотную приближающихся по функциональности к интегрированным средам.
Примером последних выступает WindowMaker, очень элегантный внешне и за годы своего существования обросший многочисленными дополнительными модулями.
Впрочем, и простые исходно оконные менеджеры из семейства Blackbox'а можно, затратив некоторые усилия, превратить в интегрированные среды индивидуального (можно сказать - штучного) разбора. И здесь пальма первенства - за Fluxbox благодаря его удобной системе закладок и возможности группировать приложения. Во всяком случае, долгое время именно он был моим любимым оконным менеджером, пока я не оценил прелестей интеграции KDE.
Текстовый редактор - один из главных орудий труда пользователя 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'а не покажется через чур смелым.
Впрочем, в последнее время семимильными шагами развивается редактор kate - штатный инструмент для работы с текстами в KDE. Правда, в нем нет простой возможности нарастить функциональность - судя по документации, для сочинения plug-in'ов требуется чуть ли не программирование на C++. Однако это частично компенсируется чрезвычайно удобной интеграцией редактора с терминальным окном и файловым визуализатором, поддержкой проектов, да и просто внешней приятностью.
Хотя текстовый редактор неизмеримо превосходит любой ворд-процессор при создании текстов, претендующих на оригинальность содержания, время от времени приходится заниматься и их оформлением. Для этого во FreeBSD можно отыскать множество исконно Unix'овых текстовых процессоров (то есть, если следовать оригинальной терминологии, - неинтерактивных систем разметки и форматирования текстов), начиная с groff и заканчивая TeX'ом. Если последний покажется через чур сложным - доступна и графическая надстройка над них, Lyx, в которой за результат можно не беспокоится даже при отсутствии всяких представлений о полиграфии: шедевра верстального искусства, может, и не получится, но и от откровенно отвратительного макета он спасет. Есть и малоизвестный гомолог TeX'а - lout, более легкий в освоении и использовании, но вполне достаточный для тех, кому не нужны трехэтажные конструкции из интегралов по траектории. Ну и чисто визуальный scribus, претендующий на нишу QuarkPress, легко обнаруживается в портах.
Не возбранно, однако, и использование традиционных (для Windows/Mac/иже с ними) ворд-процессоров WISIWIG-типа. Здесь первым следует помянуть OpenOffice: его версия под Linux, собранная с поддержкой всей кириллической специфики (например, в сборке Altlinux) вполне справно функционирует под FreeBSD в т.н. режиме совместимости. Ничуть не менее быстро (вернее, не более медленно), чем в родной операционке. Да и собственный FreeBSD-порт этого монстра конторской интеграции давно доступен. В том числе - и в преокмпилированном и русифицированном виде (сборка OpenOffice из исходников - занятие не для слабонервных).
Если, однако, быстродействия 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, - в домашниз условиях может напоминать срельбу из пушки по воробьям. Однако никто не мешает настроить для доставки/отправки почты легкие почтовые клиенты типа mucode или 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) графики. Ну и Sodipodi не оставляет надежды превратиться со временем в полноценную векторную рисовалку.
В аудиосфере FreeBSD если и не впереди планеты всей, то весьма к тому близка: количество cd- и mpeg-проигрывателей можно сопоставить только с суммарным числом текстовых редакторов и браузеров. Лично я пользуюсь для этих целей консольной программой, простой, как три пальца, и соответственно этому именуемой - mpg123. Есть, однако, и более сложные плееры, в том числе и для графического режима. Тут достаточно упомянуть Xmms, обладающий всеми функциями winamp'а, известного.
Столь же хорошо обстоит дело с cd-грабберами и mpeg-аудиокодеками. Процедуру о-граббления легко выполнить с помощью cdparanoia, а перегнать на-граббленное в mpeg - универсальной lame или более простым bladeenc. Не забыты и средства конвертации в истинно свободный аудиоформат - ogg, для чего служит пакет vorbis-tools.
В области видеовоспроизведения можно назвать три программы: Noatun из KDE, xine, основанный на Gtk и, пожалуй, наиболее универсальный из всех - Mplayer. К любой из них легко подключаются кодеки для воспроизведения всевозможных видеоформатов, включая DivX. Говорят, и для просмотра DVD их можно использовать, но - не пробовал за неактуальностью...
Надеюсь, моя легкая пробежка трусцой по необъятным просторам портов FreeBSD убедила читателя, что в этой системе есть все необходимое для работы и большая часть роскошного - для развлечения. В принципе, каждая из упомянутых здесь программ заслуживает отдельной статьи, и подчас не одной. Но и сказанного, думаю, достаточно для того, чтобы попробовать свои силы в ее установке, что и будет темой нескольких ближайших заметок.