Предисловие к предмету
На заре истории, в прошлом тысячелетии, Linux и все его компоненты, от ядра до командной оболочки, распространялся исключительно в исходных текстах. Причем - по отдельности. То есть желающему установить систему следовало отыскать все нужное в Сети и собрать, сиречь скомпилировать, самостоятельно. Ясно, что процесс этот требовал не только определенных знаний и существенных затрат времени, но и, самое главное, некоей предустановленной системы: вряд ли кому удастся запустить компилятор на "чистой" машине. Ведь и сам Линус для разработки системы использовал поначалу ОС Minix.
Отсюда очевиден вывод, что еще десять лет назад Linux не являлся самодостаточной системой. Чтобы сделать его таковой, в чью-то светлую голову должна была прийти мысль о дистрибутиве. У меня есть глубокое подозрение, что голова эта покоилась на плечах Патрика Фолькердинга, из которой сию мысль и почерпнули остальные отцы-основатели краеугольных систем. Ведь уроки истории показывают, что истинно гениальные мысли дважды не повторяются. Чему примером и лук, и колесо, и конская узда, и фонетический алфавит...
Изобретение дистрибутива, то есть ядра ОС, укомплектованного системными утилитами и прикладными программами в прекомпилированном виде (то есть в виде пакетов - эти два понятия оказались связанными на долгие времена), стало не менее судьбоносным, чем перечисленные в прошлом абзаце. Отныне пользователь не нуждался более в какой-либо иной предустановленной системе: загрузив ядро Linux и ее корневую файловую систему с какого-либо носителя (молодежь не поверит, но этим носителем могла быть даже пятидюймовая дискета), он мог последовательно установить все необходимые для ее работы компоненты (вплоть до пользовательских приложений) из бинарных пакетов. И это предопределило развитие Linux-дистрибуции минимум на десятилетие.
Интересно, что практически в те же годы в Беркли было принято другое решение, оказавшееся не менее судьбоносным. Там, вместо тотальной бинаризации компонентов системы, пошли по пути автоматизации процесса их сборки из исходников. В результате родилась концепция портов. На протяжении десяти лет обе концепции, прекомпиляции и портирования, развивались параллельно, пока не слились ныне в портежах дистрибутива Gentoo. Но это - отдельная история.
Идея пакетирования была мгновенно подхвачена, расширена, укреплена и закалена в боях Linux-дистрибьюторами, начиная с Red Hat'а и кончая героями проекта Debian. И уже в 1993 году можно было говорить о трех истоках и трех составных частях Linux-дистрибуции. Ими стали: Slackware, плод усилий Патрика Фолькердинга, Red Hat - произведение одноименной частно-буржуинской компании, и Debian - коллективное творение сообщества независимых разработчиков. Затрудняюсь сказать точно, какая из систем начала широко распространяться раньше, но и здесь, похоже, первенство за Патриком и компанией Walnut Creek (в те же самые годы занявшейся и распространением FreeBSD).
В одной из предыдущих статей Distro-цикла были вскользь упомянуты пять критериев различения дистрибутивов Linux - инсталлятор, логика файловой системы, сценарий начальной загрузки, формат пакетов, комплектация. На самом деле (и это тоже было отмечено) различия в комплектации дистрибутивов все более нивелируются. А усилия LSB и FHS приведут (будем надеяться) к тому, что логическая иерархия каталогов в Linux станет единой. Так что остаются три критерия, из которых в данный момент мы рассмотрим только один, а именно инсталлятор, причем - применительно к трем китам Linux-дистрибуции. Ведь каждый из них стал прародителем собственного клана дистрибутивов, более или менее последовательно развивающего тенденции, заложенные отцами-основателями.
Об инсталляции вообщеЯ буду говорить здесь не об особенностях конкретных инсталляторов - каждый уважающий себя дистрибутив, вне зависимости от происхождения, рано или поздно обзаводится собственной программой установки (а некоторые дистрибутивы, например, Gentoo, вообще обходятся без нее). Нет, речь пойдет о базовых принципах и подходах, реализуемых при инсталляции дистрибутивов трех основных линий. А принципы эти - различны в Slackware, Debian, Red Hat и их потомках.
Установку любого дистрибутива Linux (да, пожалуй, что и любой ОС вообще) можно разбить на три основных этапа:
- подготовительный, когда создаются дисковые разделы и файловые системы на них;
- основной, включающий выбор и установку базовых компонентов системы и (возможно) дополнительных приложений;
- завершающий, на котором осуществляется постинсталляционное конфигурирование, необходимое для загрузки системы.
Каждый из этих этапов - неизбежен, как крах идеи мировой революции. Однако разработчики основных линий дистрибутивов подходят к реализации весьма по разному.
Инсталлятор SlackwareТак вот, подход Slackware - весьма последовательное разграничение трех этапов установки. Сначала, сразу после загрузки с установочного CD, перед пользователем - просто командная строка (оболочки ash, весьма бедной функционально, но нетребовательной к ресурсам). И в этой строке вручную, с помощью стандартных утилит fdisk или cfdisk, выполняется разбиение диска.
Далее запускается (также вручную) собственно инсталляционная программа, setup - меню-ориентированная, текстовая, оформленная псевдографикой. Она берет на себя заботу о последовательности дальнейших действий, но не снимает с пользователя ответственности за их выбор. И первое из осуществляемых ею действий - создание файловых систем на ранее размеченных разделах и их монтирование.
Далее, после определения с источником инсталляции (кроме основного CD, ими могут быть раздел жесткого диска, а также сервер - локальной сети или ftp, в этом случае предусмотрена предварительная настройка сетевого соединения) установщик переходит к этапу выбора пакетов. Пакеты разбиты на серии по назначению: A - базовые компоненты системы, D - средства разработки (вместе эти серии составляют тот самый Base Linux, о котором говорилось в одной из статей System-цикла), AP - основные пользовательские приложения, X и XAP - система X и приложения для нее, и так далее (список серий совпадает с подкаталогами каталога cdpath/slackware на инсталляционном CD).
Пакеты могут выбираться как целыми сериями сразу, так и в индивидуальном порядке. В последнем случае ни один из пакетов даже базовой системы не устанавливается принудительно (дело ограничивается только предупреждением о необходимости такого-то компонента). Что, естественно, легко может привести к нарушению зависимостей пакетов. Автоматически такие нарушения не устраняются: в каждом случае отдельно появляется предупреждение, что пакет A связан зависимостями с пакетами B и C, и спрашивается разрешение недостающие пакеты установить.
В принципе, для работы системы достаточно установить пакеты серии A и, при необходимости дальнейшего самостоятельного наращивания, серии D. Однако setup предусматривает установку дистрибутива как системной целостности, вплоть до Иксов и оконного менеджера (или интегрированной среды).
Последняя стадия основного этапа - выбор для установки какого-либо из прекомпилированных ядер. В текущей (8.1) версии Slackware доступно более двух десятков ядер - с поддержкой XFS и JFS, аппаратного RAID, голосовых технологий и многого другого (полный список - в каталоге cdpath/kernel). Образ каждого ядра (cdpath/kernel/kernel_name/bzImage) сопровождается не только его системной картой (System.map.gz), но и файлом конфигурации (config), по которому легко установить умолчальные его опции.
Этап постинсталляционного конфигурирования включает настройку модема, экранного шрифта, начального загрузчика и мыши. В заключение - определение часового пояса и оконного менеджера (интегрированной среды) по умолчанию. То есть - минимум, необходимый для запуска полнофункциональной системы и работы в ней. Характерно, что настройка оконной системы X в этот минимум не входит. Не предусмотрено и какого-либо управления пользователями, даже задания пароля для root'а - предполагается, что все это будет сделано руками или специализированными конфигурационными утилитами в дальнейшем.
Однако программа setup - универсальное средство не только для установки, но и настройки системы. Она в любой момент может быть вызвана для доустановки необходимых пакетов или изменения доступных опций конфигурирования. Таким образом, идеологически она близка к программе sysinstall из FreeBSD, хотя последняя богаче функционально и выглядит более интегрированной (в частности, в ней предусмотрена и настройка оконной системы X).
Инсталлятор DebianИдеологически несколько иной подход реализован в программе установки Debian. Как и в Slackware, она - текстовая, меню-ориентированная, с псевдографикой. На первый взгляд, она выглядит более интегрированной, все действия по установке этого дистрибутива выглядят как совершаемые внутри инсталлятора. Однако сама установка четко распадается на две стадии, разделяемые перезагрузкой системы. И перед первым, подготовительным, этапом - еще один предварительный шаг.
Шаг этот - выбор языка сообщений установщика и раскладки клавиатуры. Последнее имеет смысл для германоязычных европейцев - в этих странах широко распространены раскладки типа qwertz
, существенно отличающиеся от американской английской расположением специальных символов, в том числе и столь важного в Unix слэша.
Далее установщик предлагает перейти к первому этапу - разбиению диска. Правда, собственного менеджера разделов нет - для этой цели инсталлятором вызывается стандартный cfdisk. Но использовать его не обязательно - во время установки доступно три виртуальные консоли, и во второй из (третья предназначена для вывода системных сообщений) вполне можно создать дисковые разделы посредством fdisk.
Следующий шаг первого этапа - создание и монтирование файловых систем. И здесь есть возможность избежать штатных средств - и то, и другое вполне успешно выполняется в параллельной консоли вариациями на тему mkfs и mount. Кроме активизации swap-раздела - она должна быть выполнена через меню, иначе инсталлятор о наличии раздела подкачки просто не узнает.
Второй этап инсталляции начинается с конфигурирования модулей ядра. Это необходимо только в том случае, если в дальнейшем предполагается установка пакетов по сети, локальной или через Интернет. Очевидно, что для этого следует предварительно подгрузить модули поддержки устройств связи с внешним миром (ну и настроить параметры соединения). Если же в источник установки - локальный (инсталляционный CD, например), базовая система устанавливается как-то нечувствительно для пользователя. Единственное, что потребует выбора - это образ ядра.
Надо сказать, что устанавливаемая автоматически базовая система, кроме ядра, включает в себя системные и пользовательские GNU-утилиты, шелл (bash, разумеется), пару редакторов, но - ни малейших средств разработки. То есть скомпилировать из нее не удастся ничего.
После этого - настройка часового пояса, первичного загрузчика и перезагрузка машины, знаменующая переход ко второй стадии установки. Она начинается с задания пароля суперпользователя, учреждения аккаунта для пользователя обычного, настройки условий авторизации - с теневыми паролями (по молчанию) или без оных.
А затем - финальный шаг установки, выбор дополнительного программного обеспечения с помощью программы dselect. Пакеты (а при наличии полного комплекта инсталляционных CD или хорошего коннекта с Сетью пользователю доступно практически все изобилие свободного софта, разработанного человечеством). Впрочем, все это - отнюдь не обязательно, можно покинуть программу установки - и остаться с базовой работоспособной (но не особо функционально насыщенной) системой. А можно по первости установить только жизненно необходимые программы (типа любимого редактора, командной оболочки, браузера, ftp-клиента etc.), доустанавливая все остальное по мере потребности с помощью того же dselect, программы управления пакетами dpkg или методом apt-get.
Таким образом, идеология Debian - более полная, чем в Slackware, интеграция инсталлятора, с одной стороны (мимо него не проходит при установке ни одно событие), и четко выраженная тенденция к изоляции base Linux (причем весьма урезанного, без средств разработки) от всего остального - с другой. Не случайно в Debian-клане получили распространение не столько дистрибутивы-производные (идеологически, как показал пример Corel Linux, весьма далекие от прототипа), сколько разнообразные вариации на тему базовой системы - мини-дистрибутивы объемом 20-50 Мбайт в iso-имидже.
И опять не могу не обратиться к аналогии с FreeBSD. Там базовая система (т.н. Distribution) также подчеркнуто дистанцирована от всего прочего свободного софта, включаемого с систему портов или устанавливаемого из сгенерированных последней пакетов. Однако Distributions FreeBSD - это полноценная и (почти) полнофункциональная система с полным набором средств разработки (еще бы - как же иначе собирать порты). Debian же в базовой установке - не более чем прототип системы, нуждающийся в доведении до ума (с точки зрения пользователя) во многих и многих утилитах и приложениях.
Инсталлятор Red HatИнсталлятор Red Hat - один из первых, что обзавелся графическим интерфейсом (в версии 6.x, если не ошибаюсь?), хотя и по сию пору допускает установку в текстовом режиме. Ну а тотальной интегрированностью он отличался всегда (на моей, по крайней мере, памяти - с 4.2). Никаких действий руками, за пределами программы установки, в нем не предусматривается.
И в Red Hat подготовительный этап предваряется, пардон за тавтологию, этапом предварительным. Это - выбор режима установки (графического в разных разрешениях и цветности, текстового и через Frame Buffer), языка сообщений инсталлятора, раскладки клавиатуры, мыши. И уже после этого начинается первый этап собственно установки.
По умолчанию разбиение диска, создание файловых систем и их монтирование выполняется универсальным дисковым менеджером - Disk Druid'ом. В использовании он весьма удобен - размер раздела можно указать вручную, можно заполнить все свободное пространство или указать, сколько его должно остаться после. По умолчанию разделы создаются как логические, однако соответствующим переключателем можно определить их и как первичные. Для созданных разделов одновременно определяется и тип файловой системы (например, Software RAID), и собственно файловая система, которая на разделе будет создана (ext2fs или, выбор по умолчанию, ext3fs).
После разбиения диска как-то незаметно наступает этап настроек - загрузчика, сети, часового пояса, пароля root'а, включение поддержки дополнительных (кроме выбранного для установки и английского) языков.
И лишь после этого - возврат ко второму, основному, этапу - выбору пакетов. При этом основной способ выбора - по назначению машины (рабочая станция GNOME или KDE, мультимедиа-станция, web-сервер, и т.д.). В этом случае устанавливаются предопределенные, выверенные с точки зрения зависимостей (на мой взгляд - весьма избыточно) наборы пакетов, наиболее подходящих (по мнению сборщиков дистрибутива) для решения соответствующих задач. Есть и индивидуальный выбор пакетов, но, например, различных вариантов прекомпилированных ядер не предлагается (по крайней мере, в версиях ниже 8.0 - с последней мне дела иметь не приходилось).
Неотъемлемый момент в установке Red Hat - настройка системы X, выполняемая собственной программой. А определение умолчальной рабочей среды - на стадии выбора пакетов. И вообще, работа в графическом режиме предполагается в этом дистрибутиве также по умолчанию.
Таким образом, если установщик Slackware подчеркивает компонентный, сборный характер Linux-дистрибутива (не зря этот дистрибутив называют конструктором для любознательных), если в Debian предприняты все усилия для обособления base Linux от GNU-богачества (не иначе как в преддверии перехода на ядро Hurd :), то Red Hat пытается представить Linux столь же цельной, интегрированной системой, как и Windows любого рода. И тенденция эта еще более выражена в клонах Red Hat - и Caldera, и Mandrake, и ASP- вкупе с Altlinux'ами делают дальнейшие шаги в этом направлении.
Наиболее последовательно интеграция разнородных компонентов в единую систему проводится в Mandrake (и генетически связанном с ним Altlinux). Что выражается, в частности, и в сквозной системе конфигурирования - в сущности, при любой настройке системы вызываются компоненты той же программы, которая задействуется при инсталляции.
ЗаключениеВ мои задачи не входит хвалить и хаять какой-либо из описанных методов установки. Достаточно констатировать, что три основополагающих системы, с которых началась Linux-дистрибуция, демонстрируют три глубоко различных подхода к этой процедуре. И каждый пользователь может выбрать себе тот, который более гармонирует с его внутренним мировосприятием. Ну и практическими задачами, разумеется.
Все же личное мнение высказать рискну. Компонентный подход Slackware наиболее близок к первозданному Linux'у (и Unix'у вообще). Не так ли все системы этого семейства постепенно обрастали утилитами и приложениями? Debian, в сущности, - не столько ОС, сколько инфраструктура, в принципе, не очень-то и привязанная к ядру Linux. Не зря же ее apt-get столь же успешно применяется в клонах Red Hat, как и в родной среде. Ну а сам Red Hat - попытка создать Windows-подобную систему на совершенно ином основании, со всеми достоинствами и недостатками такого подхода. Однако очевидно, что подход этот - востребован, ведь не случайно именно Red Hat породил наибольшее количество прямых или косвенных потомков.