Библиотека сайта rus-linux.net
UNIX4ALL
ПРОЕКТ АЛЕКСЕЯ ФЕДОРЧУКА и "ЛИНУКС ОНЛАЙН"
Компоненты системыСодержание
ВведениеПрежде чем начинать установку, необходимо уяснить, из чего состоит Linux как операционная система. Во взглядах на него бытует две крайние точки зрения. С одной стороны, Linux рассматривается как ядро операционной системы. И это - правильно, так как именно разработанное им ядро назвал Linux'ом Линус Торвальдс, обладатель авторских прав на это имя. Однако никакое ядро, сколь бы совершенно оно ни было, само по себе не способно обеспечить решение самой простой пользовательской задачи. С другой стороны, в статьях и книгах про Linux в него часто включается все, что можно обнаружить на многодисковых наборах, продаваемых под этим именем, вплоть до системы X Window, интегрированных сред типа KDE и GNOME, и их приложений. Однако сама по себе система X Window не имеет никакого отношения не только к Linux, но, в сущности, и к Unix-системам вообще (за исключением того, что способна работать под управлением любой из них). А интегрированные среды и оконные менеджеры - лишь дополнительные (хотя и необходимые) атрибуты оконной графической системы. Что же касается включаемых в дистрибутивы приложений - более чем на 90 процентов они суть общее достояние всех свободных операционных систем. Чтобы определить, из чего состоит Linux, зададимся вопросом, что же необходимо ему для функционирования. Во-первых, это, разумеется, ядро. Во-вторых - средства его загрузки, наборы сценариев начальной загрузки (стартовых скриптов) и инструменты для поддержки файловой системы; вернее, систем - в Linux поддерживается несколько файловых систем, которые с полным правом могут считаться родными (native). Далее идет общесистемная библиотека и минимум одна библиотека терминальная. Затем - то, чем все это собирается, компилятор и средства его поддержки (линкер, ассемблер и прочее). Следом - пользовательские утилиты для работы с файлами и текстами. И, наконец, командная оболочка, обеспечивающая выполнение всего этого хозяйства, и какой-никакой текстовый редактор для выполнения действий по конфигурированию системы. С ядром Linux все ясно - это именно то, что делает Линус Торвальдс сотоварищи. Все же прочие компоненты, хотя теоретически и могут варьировать по составу, давно определены традицией: это так называемые средства, разработанные в рамках проекта GNU (из всех возможных переводов этого акронима адекватным мне кажется такой: "Гну - это вам не хрен собачий") и ему соплеменных. И слагаются они из:
Теоретически рассуждая, реализации перечисленных компонентов могут быть различными. Так, существовали (а возможно, и существуют) дистрибутивы Linux, в которых в качестве базового компилятора использовался не gcc, а egc или pgcc. Терминальная библиотека ncurses может если не заменяться, то дополняться какой-либо другой. Командный интерпретатор bash можно заменить любым другим shell-совместимым (точнее говоря, любым, способным эмулировать мифический POSIX-shell). Однако в качестве канонического минимального набора для Linux можно рассматривать то, что Герард Бикманс включил в свой набор Linux from Scratch (LFS). Нужно заметить, что все компоненты этого набора, с одной стороны, настолько тесно связаны взаимозависимостями, что их него практически ничего нельзя удалить. С другой же стороны, включающая их система способна не только загрузиться и работать, но и выполнять пользовательские задачи, причем не только элементарные. Особенно если дополнить ее буквально двумя-тремя прикладными программами. Кроме того, эта система (за счет включения средств разработки) обладает потенциалом к практически неограниченному наращиванию функциональности. И потому набор LFS (плюс несколько программ, о которых я скажу ниже) можно рассматривать как Base Linux. Он включает:
Все это в виде исходных текстов может быть взято с почти любого полного дистрибутива Linux. Однако можно просто скачать последние (или наиболее удачные) версии указанных компонентов с оригинальных локаций. ЯдроБытует мнение, что ядро Linux - одно-единственное. Это правда, но не вся правда. Действительно, ядро Линуса - каноническое. Однако существуют еще т.н. ядра майнтайнеров (наиболее известные из них - ядра Алана Кокса) и ядра различных дистрибьюторов. Разумеется, в основе всех их - каноническое ядро, но - с патчами, ответственными за реализацию дополнительных функций. Локация канонического ядра Linux, как нетрудно догадаться, не где-нибудь, а на kernel.org. На современном этапе имеет смысл рассматривать ядра версии 2.4.19 или, при тяге к экспериментам, ядра разрабатываемой ветки 2.5.xx. Имеет смысл запастись несколькими и методом проб и ошибок выбрать наиболее подходящее. В частности, поддержка файловой системы XFS (а в разделе о файловых системах именно она будет рекомендоваться к употреблению) пока обеспечивается патчами с сайта SGI. Хотя в разрабатываемой ветви поддержка ее включена как штатная функция. Средства поддержкиВ качестве таковых рассматриваем загрузчики, средства поддержки и инструменты для работы с файловыми системами. Из загрузчиков заслуживают рассмотрения два варианта - классический Lilo или GRUB. Первый, как ясно из названия - традиционный загрузчик Linux, справляющийся не только с этой ОС, но и со многими другими (в том числе и с Windows любого рода). Он хорошо документирован во множестве источников и имеется на многих серверах, например, здесь GRUB имеет все шансы стать стандартом для свободных ОС. В отличие от большинства мультисистемных загрузчиков, он не просто передает управление "по цепочке" на загрузочный сектор соответствующего раздела, но работает с несмонтированными файловыми системами (незагруженных ОС!), обеспечивая загрузку с них ядра соответствующей системы. Впрочем, при невозможности этого - способен и к загрузке "по цепочке". Получить его можно с сайта проекта. Важнейшие утилиты поддержки Linux объединены в комплект, который так и называется - util-linux. В его составе - многие множества команд (agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.minix, mkswap, more, mount, namei, pivot_root, ramsize (ссылка на rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (ссылка на rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (ссылка на swapon), swapon, tunelp, ul, umount, vidmode, whereis, write). Они предназначены для создания дисковых разделов (fdisk, cfdisk), создания (mkswap) и активации/дезактивации (swapon/swapoff) разделов подкачки, монтирования и размонтирования файловых систем (mount/umount) и многого другого. Очень желательно, чтобы версия комплекта util-linux соответствовала версии ядра. За чем можно проследить, соответственно, на том же kernel.org Взаимодействие с модулями ядра обеспечивает комплект modutils, жестко привязанный к версии ядра (для текущей ветви берется он здесь). Он включает команды (depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms, kernelversion, ksyms, lsmod, modinfo, modprobe and rmmod), предназначенные для загрузки и выгрузки модулей, определения их зависимостей, и т.д. Средства поддержки файловой системы (систем) включают в себя утилиты для создания их (сиречь форматирования, в терминах DOS/Windows), проверки на целостность, тюнинга, резервного копирования и т.д. Для классической файловой системы Linux, ext2fs, такой набор носит название ext2fsprogs, а найти его можно, например, здесь. В него входят следующие утилиты:
и еще несколько утилит (compile_et, debugfs, lsattr, mk_cmds, mklost+found, uuidgen). Ряд утилит из комплекта поддерживают также журналируемый вариант файловой системы Linux - ext3fs (mke2fs, fsck.ext3), а resize2fs - также и ReiserFS. Однако в принципе для нее, как и для другой журналируемой файловой системы - XFS, требуются собственные средства. В первом случае это будет reiserfsprogs, включающий
Для поддержки же XFS требуется целый комплекс средств:
Все эти средства могут быть получены (в том числе и в виде исходников) с соответствующего раздела сайта SGI: Впрочем, абсолютно необходимым из этого списка является только последняя программа, xfsprogs, без всего остального можно обойтись. Еще один компонент из инструментов поддержки - средства запуска и останова системы. Они объединены в комплект sysvinit. Именно он обеспечивает инициализацию процессов (init), осуществление уровней исполнения (runlevels), авторизацию пользователей, а также отправку сигналов исполняемым процессам (в том числе и тех, которые ведут к перезапуску или останову). Кроме того, для старта полнофункциональной системы требуются и некоторые сценарии инициализации, но они настолько зависимы от конкретной системы, что мы вернемся к этому разговору позднее. Тем более, что их можно написать (или, по крайней мере, скорректировать) и собственноручно - это обычные сценарии оболочки. Непосредственное отношение к старту системы и авторизации имеет комплект shadow, предназначенный для управления пользовательскими паролями. Для управления системными журналами служит комплект sysklogd, включающий klogd - системный демон для журналирования сообщений ядра, и syslogd. Кроме этого, требуются средства для поддержки виртуальной файловой системы proc, обеспечивающей отображение процессов - procinfo, procps и, возможно, средство для трансляции файловой системы devfs, буде возникнет желание таковую использовать, devfsd. К этой же группе примыкает комплект psmisc, предназначенный для отслеживания процессов в системе. В его составе - команды:
Далее, к средствам поддержки можно отнести программы для работы с консольным драйвером Linux. Таковых ныне используется две - kbd и console-tools. Первая включает в себя множество утилит (chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (link to psfxtable), psfgettable (link to psfxtable), psfstriptable (link to psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank, showfont, showkey, unicode_start, unicode_stop), из которых для начала важнейшими являются:
Набор console-tools имеет соответствующие средства - loadkeys и consolechars для управления вводом/выводом. Очевидно, что пакеты kbd и console-tools не то чтобы исключают друг друга - просто при наличии одного второй делается ненужным. Console-tools считается более современным, однако и текущие версии kbd обеспечивают, в частности, работу с кодировкой Unicode и прочие актуальные фичи, так что выбор между ними - дело вкуса. Тем более, что поминаемый ниже комплект console-tools-cyrillic успешно работает и с тем, и с другим набором. Последнее из средств поддержки - служба консольной мыши, обеспечиваемая программой gpm. Она рассматривается обычно как сугубо опциональная, но, на мой взгляд, отказываться от дополнительного удобства нет никаких оснований. Средства боевого обеспеченияВ это понятие я включаю пользовательские утилиты, большая часть которых разработана в рамках проекта GNU (и потому именуемых обычно GNU-утилитами). С одной стороны, они обеспечивают минимальную пользовательскую функциональность системы, с другой - играют служебную (но - совершенно незаменимую) роль в процессе ее сборки. На первом месте здесь должно поставить командную оболочку - без нее никакие вообще действия становятся невозможными: ведь, кроме того что вся установка системы осуществляется (прямо или опосредованно) ее командами, интерпретатор команд необходим и для исполнения стартовых сценариев при загрузке системы. Традиционно такой, как бы общесистемной, командной оболочкой в Linux является bash. Хотя обычно стартовыми сценариями в явном виде вызывается некая оболочка /bin/sh, это - не более чем ссылка на bash: при этом под /bin/sh понимается некий виртуальный Posix-shell, в природе не существующий. Однако любая Posix-shell оболочка, будучи запущен таким образом, более или менее его эмулирует. Оболочка bash обладает многими достоинствами, но ныне не является наиболее совершенной. Последний титул (в семействе shell-совместимых интерпретаторов, по крайней мере), я отдало бы оболочке Z-Shell. Каковая также способна (и причем очень точно) эмулировать POSIX-shell и потому вполне подходит в качестве общесистемной. Однако на первых порах почти неизбежно потребуется и bash, так что лучше озаботится приобретением их обеих. Сделать это можно здесь и здесь, соответственно. Исходники всех программ, перечисленных выше (да и всех прочих, о некоторых их них будет говориться ниже) доступны в сети в архивированном (да еще и компрессированном) виде, и потому первое, что понадобится для их установки - это архиваторы и компрессоры. Список первых ограничивается программой tar, тогда как компрессоров потребуется не менее двух: gzip и bzip2, поскольку форматы их несовместимы (иногда встречающиеся архивы вида tar.Z могут быть распакованы программой gzip). Далее следует группа наборов для для манипуляций с файлами. Первый из которых так и называется: fileutils. Состав его следующий:
Назначение набора sh-utils - главным образом навигация по файловым системам и получение общесистемной информации. В его составе - команды basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, hostname, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami и yes. К ним по смыслу тесно примыкает набор для поиска файлов - findutils. В его составе:
Кроме этого, в набор findutils входят также команды bigram, code и frcode. К тому же блоку наборов можно отнести file. Эта команда позволяет детализовать тип регулярного файла (исполнимого, текстового и т.д) по т.н. "магической последовательности" байтов в его начале. Следующий блок наборов предназначается для работы с контентом файлов (в первую очередь, разумеется, текстовых). Первым в нем следует поставить утилиту less, которая являет собой программу постраничного просмотра файлов. Далее - набор под значимым именем textutils. В его состав входят:
Два взаимодополняющих набора - diffutils и patch. Первый включает в себя:
А команда patch предназначена для внесения изменений, выявленных командой diff, в исходный файл. Совершенно незаменим набор grep. В его состав входят программы grep, fgrep и egrep, предназначенные для поиска заданного текстового фрагмента (шаблона) в файлах. Наборы ed, gawk и sed предназначены для весьма сложной обработки текста, представляя собой, в сущности, потоковые (неинтерактивные) текстовые редакторы. Теоретически, располагая мощным редактором интерактивным (типа упомянутых emacs или vim) без них можно было бы обойтись, но они столь широко используются во всякого рода установочных сценариях, так что практически оказываются необходимыми. Аналогично и положение с комплектом groff, включающим множество средств сложного неинтерактивного форматирования текста (addftinfo, afmtodit, eqn, grn, grodvi, groff, grog, grolbp, grolj4, grops, grotty, hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff). Вряд ли кто ныне, помимо впитавших привычку с молоком матери, будет использовать их в практической работе. Однако они оказываются необходимыми для функционирования системы документации, о которой речь пойдет чуть ниже. Сетевые возможности базовой системы обеспечиваются двумя наборами - netkit-base и net-tools. В первом - демон inetd, отвечающий за службы Интернет вообще, и команда ping, для отправки пакетов, определяющих доступ к узлам сети. Команды набора net-tools (arp, dnsdomainname (link to hostname), domainname (link to hostname), hostname, ifconfig, nameif, netstat, nisdomainname (link to hostname), plipconfig, rarp, route, slattach, ypdomainname) определяют конфигурацию сети (ifconfig), доменные имена, имена хостов и т.д. Наконец, группа наборов, последняя по счету, но не по значению, - системы документации. Таковых в Linux широко используется две - традиционные для Unix man-страницы и разработанная в рамках GNU система info. Они - взаимодополняющие, хотя по содержанию и существенно перекрывают друг друга. Средства тылового обеспеченияВ это понятие я включаю системные разделяемые библиотеки. Пользователю очень редко приходится иметь с ними дело непосредственно, но без них функционирование системы практически невозможно. Конечно, многие приложения могут быть связаны (и подчас действительно связываются) с разделяемыми библиотеками статически. Однако сборка собственной системы без них просто невозможна. Главной общесистемной библиотекой в Linux является glibc. Кроме нее, для сборки (и работы) большинства консольных приложений требуется терминальная библиотека ncurses. Наконец, требуется также инструментарий для связывания программ с библиотечными функциями - libtool. Все это - необходимый минимум, отдельные приложения могут потребовать и других библиотек, например, s-lang. А для работы с графическими приложениями потребуются как минимум библиотеки поддержки различных растровых форматов (gif, png, jpeg, tiff и т.д.) и, возможно, svgalib. Абсолютно необходимые приложенияПользовательские утилиты GNU (такие, как textutils, awk или sed) не только выполняют функции поддержки системы, но и позволяют решать достаточно сложные пользовательские задачи. Однако для полноценной работы они явно недостаточны и потому должны быть дополнены еще несколькими приложениями. И первым из них идет текстовый редактор - без него трудно было бы хотя бы поправить конфигурационные файлы. В выборе такового возможно три подхода: минималистский, максималистский и промежуточный. Для обеспечения минимальных возможностей редактирования подойдет любой максимально простой редактор - если не выходить за рамки проекта GNU, в этой роли может выступить редактор nano. Он очень прост в освоении, не требует запоминания многочисленных команд и обладает базовым набором функций редактирования. При максималистском подходе предоставляется выбор среди двух монстров мира консольных редакторов - vim и emacs. На котором остановиться - дело вкуса, вступать в священную войну vim vs. emacs здесь было бы неуместно. Промежуточный подход оправдан, если требуются достаточно мощные возможности обработки текстов (не столько исходных, сколько текстов просто). В этом случае целесообразно использование joe, потребности которого в тыловом обеспечении вполне вписываются в наш базовый список. Его можно найти на sourceforge или любом из его зеркал, например - здесь. Текстовый редактор трудно представить без функций проверки орфографии, и потому следующий кандидат в абсолютно необходимые дополнения ispell. Многие из перечисляемых здесь программ сопровождаются документацией в формате html. И для ее чтения потребуется какой-никакой браузер. Оптимальный выбор здесь - links. Кроме браузера, необходимыми средствами для работы с сетью видятся программа дозвона и ftp-клиент - без них невозможно было бы скачивание необходимых программ. В первом качестве непревзойденным будет wvdial, в качестве же кандидата на вторую вакансию можно рассмотреть wget. В Base Linux для полноты счастья хорошо было бы включить и средства для просмотра графики, не требующие оконной системы X. В этом качестве могли бы выступить консольные вьюверы fbi или zgv. Правда, первый требует поддержки в ядре (или в виде модуля) графической консоли (реализуемой через frame buffer), а второй - библиотеки svgalib. И для любого из них необходимы библиотеки поддержки растровых форматов (см. выше). Поэтому графические средства в Base Linux следует рассматривать как факультативные. Наконец, самое последнее, что требуется для комфортной работы - звуковое сопровождение в виде проигрывателей компакт-дисков и mpeg-файлов. Первой цели успешно послужит (по крайней мере для начала) программа cdplay, второй - mpg123, не требующие каких-либо дополнительных мультимедийных библиотек. Средства локализацииПоскольку мир отнюдь не ограничивается Америкой, и множество людей говорит на языках, отличных от американского, в Base Linux должны входить средства интернационализации. Сама по себе интернациональная поддержка (т.н. NLS - National Languages Support) программ обеспечивается за счет системы gettext. Нас, разумеется, в первую очередь интересует поддержка не какого другого языка, а непосредственно русского. Русская локаль (по крайней мере, ru_RU.KOI8-R) - давно уже неотъемлемый компонент системной библиотеки. При необходимости в локали 1251 - ее можно добавить самостоятельно. Для получения базового набора кириллических экранных шрифтов, клавиатурных раскладок и карт соответствия одного другому необходимым и достаточным видится комплект console-tools-cyrillic, в котором есть все необходимое (и кое-что из роскошного). Он предназначен для работы с набором управления консолью console-tools, однако прекрасно вписывается и в современные версии kkb. Ну а для реализации проверки русской орфографии в дополнение к оригинальному ispell предлагается известный словарь Лебедева - rus-ispell. Последние компоненты базовой русификации - программа перекодировки rusconv и mapchan - средство для работы с различными кодировками в консоли. Средства сборкиНаконец, последнее (или, строго говоря, первое), необходимое для того, чтобы собрать все перечисленное выше воедино - это средства сборки. В первую голову это компилятор языка C, на котором написана большая часть ОС Linux и программ для нее gcc. Текущая его версия (3.2) очень рекомендуется к применению, поскольку способна оптимизировать код не только под Pentium III и Athlon (этим могли похвастаться и версии ветки 2.9.x), но и под Pentium-4. Далее - средства обеспечения компиляции (линкер, ассемблер и т.д.), объединенные в два набора bin86 и binutils. Затем - программа управления компиляцией, make и тесно с ней связанные утилиты autoconf для построения средств автоматического конфигурирования при сборке, и automake для автоматизации создания make-файлов, описывающих процесс компиляции. Кроме этого, практически необходимыми оказываются также лексический анализатор flex, синтаксический анализатор bison (используется также и его прототип yacc - для сборки некоторых программ требуется именно он) и макропроцессор m4. И, наконец, в ряде случаев для сборки программ требуется интерпретатор языка perl. Набор приложений, объединенный понятием Base Linux, может показаться несколько аскетичным. Однако именно базовую функциональность системы он обеспечивает с успехом. И примерно такой набор программ предлагается в качестве базового (то есть обязательного к установке) в любом Linux-дистрибутиве, претендующем на полнофункциональность. Конечно, набор пакетов (и особенно конкретные представители отдельных групп) варьируют, но можно быть уверенным: 90% всего перечисленного с гарантией обнаружится в любой Linux-системе. |