Полет дракона

Алексей Федорчук
1-я версия 2004.10.27, вторая редакция 2004.11.19

Эта заметка - об операционной системе, получившей имя DragonFlyBSD (да знаю я, что это переводится как стрекоза но полет дракона - это романтичнее). Она ответвилась от FreeBSD летом 2003 года силами Мэтта Дилана, до того бывшего одним из ее разработчиков: Мэтту не понравилось направление, в котором развивалась FreeBSD, начиная с 5-й ветки. И в основу своей системы он положил код ветки 4-й.

Возникает вопрос: для чего нужна еще одна BSD-система? Разве не достаточно изобилия Linux-дистрибутивов, чтобы и FreeBSD постигла та же участь?

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

А в оригинальности DragonFlyBSD отказать невозможно. Ибо, при практически полном внешнем сходстве с прототипом (FreeBSD 4.X), "внутре" у нее все другое: управление памятью и процессами, представление о драйверах устройств и виртуальной файловой системе, вплоть до нового типа файлов - вариантных символических ссылок.

Впрочем, на теоретической стороне вопроса я останавливаться не буду - она подробно была описана в статье Андрея Зубинского. Моя же цель рассказать о практике дела - получении, установке и возможности использования DragonFlyBSD в мирных целях.

Получение установочного диска

Первый официальный релиз системы вышел в июле 2004 г. (всего через год после начала проекта) и доступен на соответствующем сайте и нескольких его зеркалах. Однако DFBSD (краткости ради буду далее использовать эту аббревиатуру) развивается весьма быстро, и промежуточные сборки ее (снапшоты) появляются чуть не каждые несколько дней.

Сборки эти существуют в двух вариантах: собранные компилятором gcc версий 2.95 и 3.4.X (текущая сборка - посредством gcc 3.4.1, хотя в обоих вариантах в установленном виде доступны обе версии). Первый вариант позиционируется как стабильный, рассчитанный на практическое применение. Второй же к реальному использованию не рекомендуется, предназначаясь для разработчиков и экспериментаторов. Тем не менее, именно он и представляет интерес, во-первых, как отражающий тенденции будущего (не секрет, что gcc 2.95, при всей своей надежности, не допускает высокой оптимизации под современные процессоры). А во-вторых, как станет ясным в дальнейшем, на настоящий момент DFBSD и может быть использована преимущественно в экспериментальных целях.

Так что именно снапшот на базе gcc 3 я и решил скачать - он называется примерно так: 2CSNAP-20041021-1130-GCC3.iso.gz. Как ясно из имени файла, это iso-образ установочного диска, сжатый gzip-компрессором, и имеющий потому объем около 80 Мбайт, в развернутом виде претворяющийся в мегабайт 200. По нынешним временам - немного, хотя кое-чего важного на диске не обнаруживается (впрочем, к этому я еще вернусь).

Существует и иной вариант сборки DFBSD (также в виде iso-образа но уже некомпрессированного, объемом около 250 Мбайт), доступный на сайте GoBSD, специально созданном для дистрибуции этой ОС. Он основан на оригинальных снапшотох проекта, но отличается некоторыми дополнительными фичами, и носит имя GoBSD Distributions Preview. В частности, эта сборка включает собственную систему портов, основанную на pkgsrc проекта NetBSD. Однако мои усилия получить его пока успехом не увенчались - вне зависимости от "толщины" канала, качается с этого сайта не медленно, а очень медленно. Так что далее речь пойдет только о варианте собственно проекта DragonFlyBSD.

Итак, по получении образа диска его следует развернуть, "сболванить" - и можно приступать к установке. Что я и не преминул сделать.

Установка

Система устанавливалась на ноутбук Toshiba Satellite Pro A40, несший на борту процессор P-4/2,66, 512 Мбайт памяти, интегрированные (чипсетные) видео, сеть, модем), с диском 40 Гбайт. На диске имел место быть Archlinux - в первичном разделе 6,7 Гбайт с файловой системой ReiserFS, прочее пространство было не разбито. Последнее вскоре повлекло за собой некоторые сложности, впрочем, вполне преодолимые.

Установочный диск DFBSD - загрузочный, несет на себе инсталлятор собственной конструкции. Кроме того, он являет собой LiveCD, что допускает выполнение всех необходимых действий, предваряющих установку (хотя и не самым простым способом). Однако начну по порядку.

На первой стадии загрузки появляется обычное для FreeBSD меню выбора режимов загрузки ("умолчального", с отключенным ACPI, в однопользовательском режиме, и так далее). В отличие от FreeBSD, никаких проблем с загрузкой DFBSD на мой ноутбук не возникло - она спокойно стартовала в "умолчальном" режиме.

По завершении загрузки системы поступает предложение авторизоваться. Сделать это можно от имени root'а (без пароля) - в этом случае возникает командная строка c-shell, в которой можно вроде как поработать. А можно, набрав логин installer (также без пароля), загрузить тот самый установщик, о котором я упоминал выше.

Установщик - псевдографический, выполнен в стиле традиционного sysinstall из FreeBSD, но производит впечатление более логичного и понятного. Для начала он предлагает следующие варианты выбора:

  • установка;
  • конфигурирование ранее установленной системы;
  • утилиты LiveCD;
  • выход в среду LiveCD;
  • перезагрузка.

Интерес на данном этапе представляют пункты 1 и 3. В частности, посредством 3-го пункта можно было бы теоретически выполнить разбиение диска, однако в настоящее время здесь допускается только создание первичного раздела (BSD-слайса) на весь диск целиком. Как обойти это - я скажу чуть позже.

А пока выбираем установку, на следующем этапе подтверждаем этот выбор - и попадаем в меню выбора диска. Поскольку в моей системе таковой имелся в единственном экземпляре, выбирать было особенно не из чего. А вот дальше - выбор есть: использовать под установку DFBSD диск целиком (entire disk) или его часть. Поскольку у меня имелся установленный Linux, и отказываться от него я не собирался, первый вариант меня не устраивал. Да и второй виделся не очень-то подходящим: штатными средствами можно создать только слайс на все оставшееся неразбитым пространство.

Благо, оказалось, что LiveCD сохраняет свои "живительные" свойства и после запуска инсталлятора. И в расположении пользователя имеется шесть виртуальных консолей (на второй запущен установщик, на первую выводятся его сообщения). И можно, перейдя в любую из них, создать нужный раздел вручную - с помощью программы fdisk. Правда, в BSD-системах этот инструмент не являет собой верх удобства, требуя (даже в интерактивном режиме) явного задания начала и конца раздела в физических (по 512 байт) блоках. И, соответственно, некоторых вычислений.

Правда, и вычислитель предоставляется нашим "живительным" диском - в лице простой в использовании утилиты bc. А поскольку лимит консолей далек от исчерпания - никто не мешает запустить его параллельно и выполнить необходимые расчеты. Что я и сделал, создав командой

$ fdisk -i /dev/ad0

раздел размером в 10 Гбайт. Правда, чтобы инсталлятор этот раздел увидел, его (сиречь инсталлятор) придется запустить заново - такую возможность меню предусматривает.

Итак, выбрав новосозданный раздел для установки DFBSD, перехожу к созданию BSD-разделов (в терминологии нашей ОСи - subpartitions). Вариант, предлагаемый по умолчанию, таков:

/ - 256 Мбайт
swap - 1024 Мбайт (удвоенный размер RAM)
/var - 256 Мбайт
/tmp - 256 Мбайт
/usr - 3072 Мбайт
/home - все остальное.

Мне эта схема показалась разумной, и я оставил ее без изменений. Однако ничто не мешает сократить количество разделов или, напротив, добавить оные (например, для /usr/src или /usr/local.

После этого следует последнее предупреждение, с которым "пользователь соглашается и форматирование совершается". Затем, без всякого выбора начинается установка пакетов базовой системы - процедура, оказавшаяся весьма длинной. И под занавес начальной установки - предложение установить загрузчик, точно такой же, что и во FreeBSD, и установить его можно опять же в загрузочный сектор диска или слайса. Первый вариант - проще, после прописывания BSD'шного loader'а в загрузочный сектор диска он позволяет осуществить мультизагрузку с любого первичного раздела (на котором средства загрузки имеются, конечно). Второй же вариант потребует обеспечения загрузки DFBSD средствами Lilo или GRUB - не думаю, что это сделать сложнее, чем для FreeBSD.

Собственно установка окончена - предлагается либо перейти к конфигурированию системы, либо перезагрузиться (можно и вернуться на первую страницу инсталлятора).

Начальное конфигурирование

Начальное конфигурирование можно выполнить и в дальнейшем - загрузившись с того же LiveCD и выбрав в меню установщика соответствующий пункт. Однако не вижу причин, почему бы благородному дону не сделать это сразу по завершении базовой установки.

Меню начального конфигурирования позволяет выполнить следующее:

  • установить часовой пояс;
  • установить (или скорректировать) дату и время;
  • задать пароль администратора;
  • создать обычного пользователя;
  • настроить сеть;
  • настроить параметры консоли;
  • установить дополнительные пакеты.

Большинство этих действий сводятся к ответам на вполне тривиальные вопросы - остановлюсь только на наиболее важных и интересных моментах.

Так, от создания пользователя на данном этапе я бы воздержался. Как известно, наиболее простой способ локализации во FreeBSD - это задание атрибута пользователя, именуемого class (в нашем случае его значением будет, например, russian. И DFBSD унаследовало это понятие. Но вот задать класс пользователя на стадии установки не получится. Так что лучше заняться этим делом потом - например, с помощью универсальной утилиты pw.

Настройка сети предусматривает несколько протоколов, в том числе и ppp. У меня с ним ничего не вышло - и не факт, что только из-за софтового моего модема. А до собственно сети я пока не добрался (так как не добрался до службы, где она имеет место быть).

Настройка консоли позволяет установить раскладки клавиатуры, экранные шрифты и, при необходимости, карты соответствия. То есть - выполнить, например, полную русификацию системы. Причем - в любых вариантах: и в традиционном для Unix'ов сочетании KOI-ввода и CP866-вывода (с требуемой картой соответствия), и просто установив шрифты и раскладки для KOI8-R (необходимость в карте соответствия при этом отпадает). Имеются в комплекте даже шрифты и раскладки для чуждой нам кодировки CP1251.

Забегая вперед, отмечу, что DFBSD содержит полный набор русских локалей, в том числе даже ru_RU.UTF-8. А вот чего в ней не обнаружилось - так это команды locale - список их приходится смотреть визуально - в каталоге /usr/share/locale.

И, наконец, дополнительные пакеты. Список их не велик - cdrecord, cvsup (собранный без поддержки GUI) и еще пара-тройка (включая installer - для дальнейшей конфигурации, оказывается, не обязательно грузить систему с CD). Дополнительные пакеты, как и во FreeBSD, устанавливаются в подкаталоги ветви /usr/local и фиксируются в базе данных, расположенной в /var/db/pkg.

Вот теперь можно и перезагружаться, дабы поглядеть, что мы получили в итоге.

Впечатления

А получили мы базовую, но вполне систему - правда, без Иксов, но с полным набором Unix-утилит, список которых устанавливается просмотром содержимого каталогов /bin, /sbin, /usr/bin и /usr/sbin. Что немаловажно - полностью русифицированную (если на стадии установки были выполнены соответствующие действия).

Ядро DFBSD собрано с модульной поддержкой максимально широкого круга оборудования. Во всяком случае, почти все наличествующее у меня железо никаких проблем не вызвало: вполне справно функционировали и USB-мышь, и чипсетный звук, и USB-накопители (флэш-драйвы и мобильный винчестер Fujitsu Handy Drive).

Правда, в DFBSD не используется файловая система устройств (devfs) - файлы устройств именуются статически. С чем связаны некоторые, вполне понятные, неудобства при монтировании USB-накопителей: в зависимости от очередности их втыкания они оказываются то устройством /dev/da0, то - /dev/da1, и так далее, однако с этим легко примириться. Тем более, что, по информации с сайта проекта, поддержка devfs в DFBSD не за горами.

Что меня весьма порадовало - в DFBSD по умолчанию включена поддержка Линуксовой файловой системы ext2fs - во FreeBSD для этого требуется перекомпиляция ядра. Проблем с монтированием журналируемого ее варианта ext3fs) также не возникает (правда, без журналирования). И еще одна приятная мелочь: ext2fs при перезагрузке или останове системы размонтируется корректно, с установкой clean byte: во FreeBSD, если раздел ext2fs не размонтирован перед рестартом руками, бит чистого размонтирования не устанавливается, и повторное его монтирование, без проверки утилитой fsck (разумеется, под Linux'ом же, ни в коем случае не под FreeBSD), оказывается невозможным.

Конечно, для полного счастья в DFBSD не хватает очень многих приложений. И возникает вопрос, откуда их брать.

Первый, напрашивающийся, ответ - собирать все недостающее самостоятельно из исходников. Для чего в нашем распоряжении аж два компилятора - gcc 2.95 и gcc 3.4.1. Следует учесть, что по умолчанию (как /usr/bin/gcc) вызывается именно первый - gcc 3.4.1 обнаруживается в каталоге /usr/libexec/gcc34. Чтобы превратить его в умолчальный, я просто переименовал /usr/bin/gcc в /usr/bin/gcc295, и сделал ссылку

$ ln -s /usr/libexec/gcc34/gcc /usr/bin/gcc

Теперь мои любимые инструменты собираются его посредством, что обеспечивает эффективную оптимизацию под современные процессоры - признаков возможной при этом нестабильности я пока не обнаружил.

Единственная неожиданность, которая обнаружилась при ручной сборке - то, что некоторые программы при сиполнении конфигурационного скрипта требуют заданной в явном виде опции build. Не мудрствуя лукаво, я определил ее таким образом

$ ./configure --build=i386

после чего выполнение сценария заврешалось успешно.

Второй способ получения дополнительных программ - это воспользоваться наборами прекомпилированных пакетов для DFBSD. Их можно обнаружить на двух сайтах - http://www.livebsd.com и, в существенно более полном виде, на http://www.gobsd.com. Правда, обе эти сборки датированы летом 2004 года, и, соответственно, там не найти последних версий, например, Xorg или KDE. Однако на худой конец они сгодятся.

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

Третий способ расширения функциональности DFBSD - использование коллекции портов из FreeBSD, насколько можно судить по имеющейся информации, они пока сохраняют совместимость. В частности, пакеты с http://www.gobsd.com, судя по всему, собраны через обычные FreeBSD-порты.

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

Кроме того, со времени первой версии этой заметки стала доступной и собственная система портов, так и называемая - dfports. Правда, получить тарбалл их древа можно с одного-единственного, норвежского (но зато очень быстрого - я вообще заметил, что норвежские зеркала почти любых проектов отличаются завидной скоростью скачивания) зеркала проекта - ftp://dragon.bsdtech.com/DragonFly/. Для прочих доступ возможен только через CVS.

Получение исходников

Как я уже говорил, "умолчальное" ядро с установочного диска DFBSD собрано так, что необходимости в его немедленной перекомпиляции не возникает. Однако в принципе к ней прибегнуть придется. И тут оказывается, что исходных текстов ни системы, ни даже ядра на установочном диске нет.

Получать их предлагается через cvs. Ранее упоминалось, что необходимый для этого инструмент входит в состав дополнительных пакетов. А на сайте проекта даны примеры двух конфигурационных файлов - для скачивания исходников системы в целом или - только ее ядра. Так что никаких сложностей здесь не просматривается: копируем нужный файл в каталог /root, при необходимости вносим минимальную правку и запускаем процесс командой

$ cvsup dragonfly-cvs-supfile

После чего полный набор исходников оказывается в каталоге /home/dcvs.

Если качать полный набор исходников через cvs-up нежелательно, можно обратиться все к тому же норвежскому зеркалу - там чуть не ежедневно выкладывается тарбалл текущего среза.

Вот пока и все впечатления о DragonFlyBSD. Коим и подведу предварительный итог.

Не смотря на весьма юный возраст, перед нами вполне рабочая система. Лучше она, чем FreeBSD, или хуже - судить не берусь. Однако (с оговорками на счет прикладных пакетов) она вполне пригодна для решения пользовательских задач. А что будет с ней дальше - поживем, увидим...

Обновлено: 12.03.2015