Новая демониада, или FreeBSD 5.
3. Устройство установочного CD

Алексей Федорчук
[email protected]

Если смонтировать установочный (1-й) диск дистрибутива FreeBSD (а в ней штатной точкой монтирования для этого является каталог /cdrom) и просмотреть его содержимое командой

$ ls /cdrom

перед нами предстанет полтора десятка файлов и более двух десятков подкаталогов:

5.1-RELEASE@    INSTALL.TXT     catpages/       crypto/         packages/
EARLY.HTM       README.HTM      cdrom.inf       dict/           ports/
EARLY.TXT       README.TXT      compat1x/       doc/            proflibs/
ERRATA.HTM      RELNOTES.HTM    compat20/       docbook.css     src/
ERRATA.TXT      RELNOTES.TXT    compat21/       floppies/       tools/
HARDWARE.HTM    base/           compat22/       games/
HARDWARE.TXT    boot/           compat3x/       info/
INSTALL.HTM     boot.catalog    compat4x/       manpages/

Содержание файлов корня CD понятно из их имен: 5.1-RELEASE - символическая ссылка на текущий каталог, в файле cdrom.inf содержится краткое описание диска (CD_VERSION = 5.1-RELEASE - чтобы не забыть, с какой версией мы имеем дело), boot.catalog - бинарный файл, имеющий отношение к загрузке с CD. Прочие файлы содержат различную информацию о проекте, текущей версии FreeBSD, поддерживаемом обрудовании, а также инструкцию по установке (в текстовом и html-форматах, на английском, разумеется, языке).

Из числа каталогов boot/ содержит файлы, обеспечивающие загрузку системы с CD, в том числе собственно загрузчик (boot/loader) и его конфигуратор (boot/defaults/loader.conf), ядро (boot/kernel/kernel) и его модули (boot/kernel/*.ko), и так далее. Собственно к дистрибутиву они отношения не имеют. И вообще, разговор о загрузке FreeBSD пока преждевременен. В дальнейшем у нас будет немало поводов вернуться к этой теме.

Также прямо не относятся к дистрибуции FreeBSD каталоги floppies/ и tools/. Первый из них содержит образы загрузочных дискет, используемых в случае невозможности загрузки машины каким-либо иным способом. А во втором собраны всякого рода DOS-утилиты, призванные облегчить пользователю этой системы вхождение в мир BSD. В частности, здесь можно видеть утилиту FIPS для "урезания" объема FAT-раздела (с целью создания неразбитого дискового пространства для помещения BSD-раздела), RAWRITE для изготовления загрузочных дискет по образам из каталога floppies/, DOS-версии утилит gzip и gunzip, и так далее.

Теперь рассмотрим состав собственно дистрибутивных каталогов. Первым в нашем списке буде base/, имя которого говорит само за себя: он содержит базовые компоненты системы. Строго говоря, это и есть FreeBSD в чистом виде.

Основной объем каталога занимают несколько странные файлы вида base.??, где ?? варьирует от "aa" до "сколько букв потребуется" (в данном случае потребовались литеры вплоть до *.bf). Причем все эти файлы (кроме последнего) имеют фиксированный объем - ровно 1457152 байт, что равно объему стандартной 3-дюймовой дискеты). Что это такое? Очень просто - обычный tar-архив, сжатый компрессором gzip и поделенный утилитой split на части с тем расчетом, чтобы каждая из них помещалась на дискету. В память о тех временах, когда CD-привод относился к категории роскошного...

Убедиться в том, что так оно и есть, очень легко - достаточно дать команду

$ file /cdrom/base/base.aa

которая выведет следующее сообщение

base.aa: gzip compressed data, from Unix, max compression

Состав того же файла можно посмотреть с помощью утилиты tar и соответствующих опций:

$ tar txvf /cdrom/base/base.aa

в ответ на что последует

drwxr-xr-x root/wheel        0  5 июн 05:57 2003 ./
drwxr-xr-x root/wheel        0  5 июн 05:59 2003 ./bin/
-r-xr-xr-x root/wheel    91124  5 июн 05:54 2003 ./bin/cat
-r-xr-xr-x root/wheel    85208  5 июн 05:54 2003 ./bin/chflags
...
-r-xr-xr-x root/wheel   564092  5 июн 05:54 2003 ./bin/pax

gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

Сообщению об ошибке в конце удивляться не приходится - ведь мы имеем дело не с целым файлом *tar.gz. И, к слову, обе эти операции не пройдут со всеми остальными base.?? каталога: ведь они являют собой просто механически нарезанные части полного архива, и не содержат соответствующих заголовочных записей, позволяющих их идентифицировать.

Прочие файлы каталога base/ имеют служебные функции. В CHECKSUM.MD5 и base.inf содержатся контрольные суммы для каждого архивного фрагмента, base.mtree содержит описание заархивированного дерева каталогов и содержащихся в них файлов, с указанием их владельца и группы, атрибутов доступа, размера, количества связей (жестких ссылок) и все той же контрольной суммы. Ну а файл install.sh - исполняемый сценарий, ответственный за слияние архивных фрагментов воедино, распаковку образовавшегося файла и запись его компонентов в потребные места файловой системы.

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

$ cat base.?? > base.tar.gz; $ tar --unlink -xzvf base.tar.gz -C /

Разумеется, применительно случаю смысла в этом нет (все компоненты каталога base тесно связаны друг с другом и абсолютно необходимы. Однако для других каталогов возможность такой ручной операции может быть полезной.

Прочие каталоги, за исключением packages/, ports/ и src/, устроены точно также - в каждом из них содержится нарезанный на фрагменты архив, скрипт для их слияния, распаковки и установки и служебные файлы. Так что просто рассмотрим их назначение.

В каталоге crypto/ содержатся вторые по важности, после base, компоненты сиcтемы - программы обеспечения безопасности, которые относятся к устанавливаемым по умолчанию при стандартной инсталляции, и ряд опциональных служб, типа Kerberos.

В каталогах manpages/, info/, catpages/ и doc/ - документация в разных форматах, в виде стандартных для Unix man-страниц, info-страниц проекта GNU и официальной документации проекта FreeBSD.

В каталоге proflibs/ обнаруживаются т.н. профильные версии библиотек, в dict/ - словари для проверки орфографии, в games - традиционные Unix-игры (весьма древние). Наконец, каталоги compat1x/-compat4x/ содержат копоненты, обеспечивающие бинарную совместимость с предыдущими версиями FreeBSD соответствующих ветвей.

Каталог src/ содержит несколько серий архивов и архивных фрагментов, имена которых маркируются префиксом s (от src). Как нетрудно догадаться, все они включают в себя исходники отдельных компонентов системы, однако прямой корреляции с каталогами бинарных архивов в их группировке не обнаруживается.

Так, архив src/sbase.aa, вопреки своему названию, содержит не полный набор исходников бинарного каталога base/, а лишь файлы корня будущего дерева /usr/src. В файлах sbin.aa, ssbin.aa, subin.aa-subin.ab и susbin.aa-susbin.ac собраны исходники утилит и приложений, которые размещаются в каталогах /bin, /sbin, /usr/bin и /usr/sbin инсталлированной системы, соответственно (то есть соответствуют основной части бинарного каталога base/). В файлах slib.?? и slibexec.aa можно увидеть исходные тексты системных библиотек, в sinclude.aa и setc.aa - заголовочные и конфигурационные файлы, соответственно, в sshare.?? - разделяемые компоненты (в частности, документацию всякого рода). Наконец, файлы ssys.aa-ssys.ak суть фрагменты архива дерева исходников ядра системы.

Серии файлов scontrib.?? и sgnu.aa включают исходники программ, строго говоря, не относящихся к проекту FreeBSD и разроаботанных в рамках проекта GNU и родственных. В частности, именно здесь можно найти исходные тексты такого важного компонента любой открытой Unix-подобной системы, как компилятора gcc.

Каталог packages/ - это прекомпилированные программы, вообще не имеющие отношения к FreeBSD. Они представлены в подкаталоге packages/All в виде пакетов *.tbz, то есть tar-архивов, сжатых утилитой bzip2 (во FreeBSD 4-й ветки использовался формат tgz с компрессией посредством gzip). В отличие от чистых архивов tar.bz2, Free'шные бинарные пакеты содержат также некоторую служебную информацию (описание пакетов, состав файлов и пути к ним в файловой системе, и т.д.). Что, впрочем, не мешает просмотреть состав такого архивного файла с помощью


$ tar tjvf packages/All/*.tbz

Кроме All/, в каталоге packages/ есть еще масса подкаталогов:

All/            editors/        lang/           print/          www/
INDEX           emulators/      linux/          python/         x11/
afterstep/      ftp/            mail/           ruby/           x11-clocks/
archivers/      games/          math/           security/       x11-fm/
astro/          gnome/          misc/           shells/         x11-fonts/
audio/          graphics/       multimedia/     sysutils/       x11-servers/
converters/     ipv6/           net/            tcl83/          x11-toolkits/
databases/      irc/            news/           textproc/       x11-wm/
devel/          kde/            perl5/          windowmaker/

Это так называемые категории пакетов, выделенные по их назначению для удобства ориентации. Содержимое их - символические ссылки на файлы подкаталога packages/All.

Как уже было сказано, packages не являются неотъемлемой составной частью FreeBSD. В качестве связующего звена между ними выступает система портов, которая и образует содержание каталога ports/. В нем можно видеть единственный (кроем служебных) архивный файл - ports.tgz. Который развертывается (посредством инсталляционного скрипта) в дерево портов FreeBSD - универсальной системы управления пакетами, не входящими в состав Distributions. Система портов обеспечивает получение исходных текстов, распаковку архивов, конфигурирование, компиляцию и установку для всех охваченных ею программ. Большинство из которых разработаны в рамках проекта GNU и соплеменных, а также независимыми разработчиками, и являют собой общее достояние всех открытых и свободных Unix-подобных систем (и не только их). Пакеты, о которых шла речь в предыдущем абзаце, также сгенерированы посредством системы портов.

Такова в первом приближении структура дистрибутивного диска FreeBSD 5-й ветки.

Продолжение следует
К предыдущему