Новая демониада, или FreeBSD 5. 3. Устройство установочного CD.
Автор : Алексей Федорчук
3. Устройство установочного CD
Если смонтировать установочный (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-й ветки.