Автор: Алексей Федорчук, [email protected]
Опубликовано: 9.8.2002
Как это ни странно, вопрос, из чего состоит Linux как операционная система, почти не рассматривается в литературе. И во взглядах на него бытует две крайности. С одной стороны, Linux рассматривается как ядро операционной системы, и не более того. Однако никакое ядро, сколь бы совершенно оно ни было, само по себе не способно обеспечить решение самой простой пользовательской задачи.
С другой стороны, в Linux (особенно в околокомпьютерной прессе) включается все, что можно обнаружить на многодисковых наборах, продаваемых под этим именем, вплоть до системы X Window, интегрированных сред типа KDE и GNOME, и их приложений. Однако сама по себе система X Window не имеет никакого отношения не только к Linux, но, в сущности, и к Unix-системам вообще (за исключением того, что способна работать под управлением любой из них). А интегрированные среды и оконные менеджеры – лишь дополнительные (хотя и необходимые) атрибуты оконной графической системы. Что же касается включаемых в дистрибутивы приложений – более чем на 90 процентов они суть общее достояние всех открытых и свободных операционных систем.
Интересно, что вопрос об источниках и составных частях не возникает ни в отношении Windows любого рода, ни касаемо BSD-систем. Первые – едины и неделимы по своей сути, почему попытки их кастрации путем удаления Explorer'а, или, напротив, подмены управляющей графической среды по образу и подобию оконных менеджеров X Window, не приводят обычно к радующим глаз и сердце результатам.
В BSD-системах, напротив, проводится четкая грань между неотъемлемыми компонентами системы (ядром, системными и прикладными утилитами, минимальным набором пользовательских приложений), объединяемыми, например, во FreeBSD понятием Distributions, и системой портов – то есть набором средств для установки и функционирования дополнительных приложений сторонних разработчиков, само название которой подчеркивает их определенную отчужденность от ОС как таковой. Более того, компоненты Distributions и порты распространяются, как правило, даже на разных условиях: первые – по т.н. BSD-лицензии, вторые – на условиях лицензии GPL и аналогичных, какие определили для них создатели.
Приложения, включаемые в дистрибутивы BSD-систем в качестве портов (правда, в NetBSD таковых нет, весь дополнительный софт доступен только в виде прекомпилированных пакетов), сильно расширяют их функциональность. Однако и базовый набор, то есть собственно внутренние ресурсы ОС, не только обеспечивают запуск и функционирование ее, но и позволяют решать достаточно широкий круг пользовательских задач. Почему, собственно, даже без привлеченных средств любая из BSD-систем заслуживает звание ОС в собственном смысле слова.
Посмотрим же, как с этой точки зрения выглядит Linux. Для чего зададимся вопросом: а что же необходимо ему для функционирования?
Во-первых, это, разумеется, ядро и средства его поддержки: загрузчик, наборы стартовых сценариев, инструменты для поддержки файловой системы, утилиты, относимые к категории системных. Во-вторых – средства боевого обеспечения, сиречь командный интерпретатор и утилиты пользовательские. В третьих, средства тылового обеспечения – системные библиотеки. И, наконец, инструментарий для того, чтобы собрать воедино все перечисленное хозяйство – компилятор и сопутствующие ему средства (ассемблер, линкер и т.д.).
С ядром Linux все ясно – это объективная реальность, данная нам в ощущениях Линуса Торвальдса. Все же прочие компоненты, хотя теоретически и могут варьировать по составу, давно определены традицией: это называемые средства, разработанные в рамках проекта GNU (из всех возможных переводов этого акронима адекватным мне кажется такой: "Гну – это вам не хрен собачий") и ему соплеменных.
Теоретически рассуждая, реализации перечисленных компонентов могут быть различными. Однако в качестве канонического минимального набора для Linux можно рассматривать то, что включено в pure LFS или в основной набор BYO Linux.
Нужно заметить, что оба набора представляют собой множества, пересекающееся более чем на 90%. Из каждого можно убавить лишь пару-тройку элементов, все остальные настолько тесно связаны взаимозависимостями, что их можно рассматривать как base Linux вообще. Рассмотрим их по порядку.
Относительно ядра говорить особенно нечего – в любой дистрибутив включается последняя (или последняя беспроблемная) его версия на момент сборки. Канонический источник ядра Linux – http://www.kernel.org, однако иногда есть смысл обратиться и к модифицированным вариантам. Так, насколько мне известно, полноценная поддержка журналируемой файловой системы XFS реализована ныне только в ядре версии 2.4.18 от SCI и в основанном на нем ядре дистрибутива Gentoo – оба они могут быть получены в исходниках с соответствующих сайтов (SCI-XFS и Gentoo).
Взаимодействие с модулями ядра обеспечивает комплект modutils. Он включает команды предназначенные для загрузки и выгрузки модулей, определения их зависимостей, такие, как depmod, modprobe и т.д.
В качестве средств поддержки, как уже говорилось, рассматриваются, загрузчики, инструменты для работы с файловыми системами и прочие системные утилиты. Из загрузчиков заслуживают рассмотрения два варианта – классический Lilo или GRUB, который имеет все шансы стать стандартом для открытых ОС.
Важнейшие утилиты поддержки Linux объединены в комплект, который так и называется – util-linux. В его составе – многие множества команд для создания дисковых разделов (fdisk, cfdisk), управления подкачкой (mkswap, swapon/swapoff), получения информации о системе (dmesg), управления процессами и сигналами (kill, renice) и т.д.
Средства поддержки файловой системы (систем) включают в себя утилиты для создания их (сиречь форматирования, в терминах DOS/Windows), проверки на целостность, тюнинга, резервного копирования и т.д. Для классической файловой системы Linux, ext2fs, такой набор носит название ext2fsprogs. Он включает в себя команды ext2fs, mke2fs и mkfs.ext2 для ее создания, e2fsck, fsck и fsck.ext2 – для проверки целостности, tune2fs для настройки, и еще несколько.
Комплект этот поддерживают также журналируемый вариант файловой системы Linux – ext3fs и, ограниченно, также и ReiserFS. Однако в принципе для нее, как и для другой журналируемой файловой системы – XFS, требуются собственные средства поддержки. В первом случае это будет reiserfsprogs, во втором – целый комплекс наборов:
Все эти средства могут быть получены (в виде исходников) с соответствующего раздела сайта SGI.
Кроме этого, требуются средства для поддержки виртуальной файловой системы proc, обеспечивающей отображение процессов. Это – комплекты procinfo и procps. К этой же группе примыкает комплект psmisc, предназначенный для управления процессами.
Еще один из инструментов поддержки – средства запуска и останова системы. Они объединены в комплект sysvinit. Он обеспечивает инициализацию процессов (init), осуществление уровней исполнения (runlevels), авторизацию пользователей и т.д. В принципе для старта полнофункциональной системы требуются и сценарии инициализации. В LFS они объединены в пакет bootscrips, включающий средства для запуска системных демонов.
Непосредственное отношение к старту системы и авторизации имеет комплект shadow,предназначенный для управления пользовательскими паролями.
и, возможно, средство для трансляции файловой системы devfs, буде возникнет желание таковую использовать;
Далее, к средствам поддержки можно отнести программы для работы с консольным драйвером Linux. Таковых ныне используется две – kbd и console-tools.
Обе они включают в себя множество утилит, из которых для начала важнейшими являются программы для загрузки клавиатурных раскладок, экранных шрифтов и карт соответствия одного другому (loadkeys, setfont в kbd или consolechars в console-tools, mapscrn).
Последнее из средств обеспечения – служба консольной мыши, осуществляемая программой gpm. Она почему-то трактуется обычно как сугубо опциональная, но, на мой взгляд, отказываться от дополнительного удобства нет никаких оснований.
В это понятие я включаю пользовательские утилиты, большая часть которых разработана в рамках проекта GNU. С одной стороны, они обеспечивают минимальную пользовательскую функциональность системы, с другой – играют служебную (но – совершенно незаменимую) роль в процессе ее сборки.
На первом месте здесь должно поставить командную оболочку – без нее никакие вообще действия становятся невозможными: ведь, кроме того что вся установка системы осуществляется (прямо или опосредованно) ее командами, интерпретатор команд необходим и для исполнения стартовых сценариев при загрузке системы.
Традиционно такой, как бы общесистемной, командной оболочкой в Linux является bash. Хотя обычно стартовыми сценариями в явном виде вызывается некая оболочка /bin/sh, это – не более чем ссылка на bash: последний, будучи запущен таким образом, эмулирует т.н. POSIX-shell, принятый в качестве стандарта в Unix-системах.
Оболочка bash обладает многими достоинствами, но ныне не является наиболее совершенной. Последний титул (в семействе shell-совместимых интерпретаторов, по крайней мере), я отдало бы оболочке Z-Shell. Каковая также способна эмулировать POSIX-shell и потому вполне подходит в качестве общесистемной.
Все исходники программ доступны в сети в архивированном виде, и потому первое, что понадобится для их установки – это архиваторы и компрессоры. Минимальный список первых ограничивается программой tar, тогда как компрессоров потребуется не менее двух: gzip и bzip2, поскольку форматы их несовместимы (иногда встречающиеся архивы вида tar.Z могут быть распакованы программой gzip).
Далее следует группа наборов для для манипуляций с файлами. Первый из которых так и называется – fileutils. Состав его следующий:
Назначение набора sh-utils – главным образом навигация по файловым системам и получение общесистемной информации. В его составе – команды basename, chroot, date, echo, env, printenv, pwd, su, tee и многие другие.
К ним по смыслу тесно примыкает набор для поиска файлов – findutils. Главные команды в его составе:
К тому же блоку наборов можно отнести file – эта команда позволяет детализовать тип регулярного файла (исполнимого, текстового и т.д) по т.н. "магической последовательности" байтов в его начале.
Следующий блок наборов предназначается для работы с контентом файлов (в первую очередь, разумеется, текстовых). Первым в нем следует поставить less, которая являет собой программу постраничного просмотра файлов.
Далее – набор под значимым именем textutils. В его состав входят:
Два взаимодополняющих набора – diffutils и patch, первый из которых (в составе cmp, diff, diff3, sdiff) предназначен для сравнения файлов с фиксацией их различий, а второй – для внесения изменений в соответствие с этими самыми зафиксированными различиями.
Совершенно незаменим набор grep. Входящие в его состав программы grep, fgrep и egrep предназначены для поиска текстовых фрагментов (шаблонов) в файлах.
Наборы ed, gawk и sed предназначены для весьма сложной обработки текста, представляя собой, в сущности, потоковые (неинтерактивные) текстовые редакторы). Теоретически без них можно было бы обойтись, но они широко используются во всякого рода установочных сценариях, так что практически оказываются необходимыми.
Аналогично и положение с комплектом groff, включающим множество средств сложного неинтерактивного форматирования текста. Их вполне можно было бы заменить более современными и простыми в обращении программами, однако компоненты комплекта оказываются необходимыми для функционирования систем документации, о которой речь пойдет чуть ниже.
И последнее средство, имеющее некоторое отношение к текстам – gettext, инструментарий для организации интернациональной поддержки (т.н. NLS – National Languages Support).
Сетевые возможности базовой системы обеспечиваются двумя наборами – netkit-base и net-tools. В первом – демон inetd, отвечающий за службы Интернет вообще, и команда ping для проверки доступа к узлам сети. Команды набора net-tools определяют конфигурацию сети (ifconfig), доменные имена, имена хостов и т.д.
Наконец, группа наборов, последняя по счету, но не по значению, – системы документации. Таковых в Linux широко используется две – традиционные для Unix man-страницы и разработанная в рамках GNU система info. Они – взаимодополняющие, хотя по содержанию и существенно перекрывают друг друга.
В это понятие я включаю системные разделяемые библиотеки. Пользователю очень редко приходится иметь с ними дело непосредственно, но без них функционирование системы практически невозможно. Конечно, многие приложения могут быть связаны (и подчас действительно связываются) с разделяемыми библиотеками статически. Однако сборка собственной системы без них просто неосуществима.
Главной общесистемной библиотекой в Linux является glibc. Кроме нее, для сборки (и работы) большинства консольных приложений требуется терминальная библиотека ncurses. И еще – требуется также инструментарий для связывания программ с библиотечными функциями libtool. Это – необходимый минимум, отдельные приложения могут потребовать и других библиотек, например, s-lang.
Наконец, последнее (или, строго говоря, первое), необходимое для того, чтобы собрать все перечисленное выше воедино – это средства сборки. В первую голову – компилятор языка C, на котором написана большая часть ОС Linux и программ для нее gcc.
Далее – средства обеспечения компиляции (линкер, ассемблер и т.д.), объединенные в два набора bin86 и binutils. Затем – программа управления компиляцией, make, и тесно с ней связанные утилиты autoconf для построения средств автоматического конфигурирования при сборке, и automake для автоматизации создания make-файлов, описывающих процесс компиляции. Кроме этого, практически необходимыми оказываются также лексический анализатор flex, синтаксический анализатор bison и макропроцессор m4. И, наконец, в ряде случаев для сборки программ требуется интерпретатор языка perl.
Вот из этого (хотя и не только из этого) сделаны Linux'ы. По крайней мере, дистрибутивы этой системы, претендующие на полнофункциональность. Причем из этого списка (насчитывающего, если исключить функциональные аналоги, чуть больше 50 позиций) убавить практически ничего не удается – по крайней мере, без существенного ущерба для возможностей. Но и это еще не все: чтобы превратить систему в минимально пригодную для практической работы, требуется добавить еще несколько компонентов.
Первым из таких дополнительных компонентов идет текстовый редактор – без него трудно было бы хотя бы поправить конфигурационные файлы. В выборе такового возможно три подхода: минималистский, максималистский и промежуточный.
Для обеспечения минимальных возможностей редактирования подойдет любой максимально простой редактор – если не выходить за рамки проекта GNU, в этой роли может выступить nano. Он очень прост в освоении, не требует запоминания многочисленных команд и обладает базовым набором функций редактирования.
При максималистском подходе предоставляется выбор среди двух монстров консольного мира – vim и emacs. На котором остановиться – дело вкуса, вступать в священную войну vim vs. emacs здесь было бы неуместно.
Промежуточный подход оправдан, если требуются достаточно мощные возможности обработки текстов (не столько исходных, сколько текстов просто). В этом случае целесообразно использование joe, потребности которого в тыловом обеспечении вполне вписываются в наш базовый список.
Текстовый редактор трудно представить без функций проверки орфографии, и потому следующий дополнительный компонент – ispell.
И последнее, хотя в наших условиях немаловажное – средства поддержки кириллицы. Для получения базового набора кириллических экранных шрифтов, клавиатурных раскладок и карт соответствия одного другом необходимым и достаточным видится комплект console-tools-cyrillic, в котором есть все необходимое (и кое-что из роскошного). Он предназначен для работы с набором управления консолью console-tools, однако прекрасно вписывается и в современные версии kkb.
Ну а для реализации проверки русской орфографии в дополнение к оригинальному ispell предлагается известный словарь Лебедева – rus-ispell.
Наконец, самое последнее, что требуется для комфортной работы – звуковое сопровождение в виде проигрывателей компакт-дисков и mpeg-файлов. Первой цели успешно послужит (по крайней мере для начала) программа cdplay, второй – mpg123, не требующие каких-либо дополнительных библиотек.
Итак, скачав из сети чуть больше полусотни файлов, мы получаем возможность построения собственной Linux-системы, пригодной для практического использования. Конечно, набор этот – весьма аскетичный, вполне достойный древних лакедемонян. Если возникнет желание, например, использования графического режима с его многочисленными приложениями, приведенный список придется многократно расширить. Однако это будет темой самостоятельных исследований.
Телефон редакции: (095) 232-2261
E-mail редакции: [email protected]
По вопросам
размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или
электронной почте mailto:[email protected]