Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Red Hat Linux 9 Cyrillic Edition
с точки зрения пользователя.

(C) В.А.Костромин

Часть 1. Инсталляция.

1.2. Минимальная конфигурация. Базовый набор.

11 октября 2003 г., последние изменения внесены 16 октября 2003 г.

Предыдущая заметка: "Стандартная инсталляция".

В этой заметке я расскажу вам о том, как я пытался минимизировать число установленных в системе пакетов. Я уверен, что если вы хоть раз устанавливали систему, и сидели перед монитором, наблюдая, как пробегают по экрану сообщения о том, что устанавливается такой-то пакет, у вас неоднократно возникала мысль "А зачем мне нужен этот пакет?" У меня этот вопрос вертится в голове уже давно. Вот и в этот раз, после обновления пакетов с 4-го дистрибутивного диска и установки пакетов русификации (об этом я еще расскажу в одной из следующих заметок), я выполнил команду

[root]# rpm -qa | wc -l

которая сообщила, что в системе установлено 509 пакетов. А команда

[root]# df

показала, что занимают они 1903 МБайт (98% объема раздела, отведенного мной для корневого раздела). Даже с учетом того, что я занимаюсь Линуксом уже более 4 лет, я могу что-то сказать о назначении от силы нескольких десятков пакетов. А для чего все остальные - остается для меня загадкой. Я, правда, встречал одну книгу [3], в которой объясняется назначение каждого пакета в дистрибутиве Red Hat Linux 6.2. Но там не рассказано, какие из них необходимы в каждой конкретной ситуации, а без каких можно спокойно обойтись. Так что теперь, когда я начал серию экспериментов с дистрибутивом Red Hat Linux 9 CE на тестовом компьютере, я решил один из этих экспериментов посвятить выяснению того, что мне действительно необходимо. Тем более, что пока на тестовом компьютере у меня не накопилось ничего ценного, и можно повторить инсталляцию неоднократно. Цель этого эксперимента состоит в том, чтобы получить систему в которой я все пакеты установил осознанно, - либо потому, что мне нужен этот пакет для работы (как браузер или текстовый редактор), либо потому, что данный пакет необходим для установки одного из необходимых мне пакетов (разрешение зависимостей). В конце концов, жесткий диск всегда имеет конечный объем, пусть даже довольно большой, и лучше уж сохранить на нем лишний фильм, чем бесполезный пакет.

Можно было бы предположить, что я хочу оптимизировать систему. Но я не буду (по крайней мере, на этом этапе) заниматься перекомпиляцией ядра или других пакетов с целью добиться повышения быстродействия и другими подобными вопросами (и в этом мой подход существенно отличается от подхода, использованного в проекте Linux From Scratch [4] Г.Бикмана и в серии статей А.Федорчука [5-12]). Я просто постараюсь создать (набрать из числа пакетов, имеющихся на четырех дисках дистрибутива Red Hat Linux 9.0 Cyrillic Edition) систему, в которой были бы установлены только необходимые мне пакеты. Я не собираюсь разрабатывать алгоритм минимизации числа установленных пакетов, пригодный для любого случая, я просто на своем примере покажу читателям направление, двигаясь по которому они смогут оптимизировать использование своего жесткого диска.

Базовый набор.

Начал я с того, что переустановил систему, задав на этапе выбора пакетов установку минимальной конфигурации. Как вы уже знаете из моей первой заметки, в этом варианте устанавливается 226 пакетов. Между прочим, после завершения процесса инсталляции список этих пакетов можно просмотреть с помощью команды
less /root/install.log
Занимаемое этими пакетами место на трех разделах распределилось так:

 Раздел     Занято     Точка монтирования
/dev/hda3   460120 KB    /
/dev/hda2     9324 KB    /boot
/dev/hda4    32828 KB    /home

На втором шаге я удалил из системы те пакеты, относительно которых мог предположить, что система и без них останется работоспособной. Делал я это методом проб и ошибок: удалял пакет с помощью команды

rpm -e имя_пакета

(причем только в том случае, когда не получал сообщений о необходимости данного пакета для работы какого-другого), затем перезапускал систему и проверял, что все работает (в консольном, естественно, режиме). Поскольку процедура эта длительная, я, конечно, не буду описывать вам ее по-шагово. Но в процессе просмотра пакетов на предмет того, нужны ли они в минимальной конфигурации, команда rpm -qi имя_пакета неоднократно сообщала мне, что такой-то пакет должен присутствовать в системе в обязательном порядке. Некоторые пакеты я оставил по другим соображениям. В результате получился приведенный в таблице 1 список пакетов, необходимых в любой конфигурации системы (так что удалять их нельзя ни в коем случае). Для удобства ссылок в последующем назовем этот список базовым набором.

Таблица 1. Базовый набор пакетов Linux.

1 ash-0.3.8-8 Ash - это версия Berkeley's Bourne shell (sh) - базовой системной программы, которая интерпретирует команды пользователя, вводимые с помощью клавиатуры и мыши. Ash поддерживает все стандартные команды оболочки sh, но ее объем значительно меньше sh. В ash отсутствуют некоторые возможности Bourne shell (например, история команд), но она использует значительно меньший объем памяти.
2 basesystem-8.0-2 Базовый пакет, определяющий основные компоненты системы Red Hat Linux (например, порядок установки пакетов во время загрузки системы). Basesystem устанавливается в первую очередь и не может быть удален.
3 bash-2.05b-20 Командная оболочка (интерпретатор команд).
4 bzip2-1.0.2-8 Вторая важнейшая утилита сжатия для Linux-систем. Необходима, поскольку часто встречаются архивы, сжатые bzip2.
5 bzip2-libs-1.0.2-8 Нужен для rpm и bzip2
6 chkconfig-1.3.8-1 Утилита управления системными сервисами.
7 coreutils-4.5.3-19 Основной набор утилит (заменяет ранее существовавшие пакеты fileutils, sh-utils, textutils). Содержит программы для манипуляций с файлами (chgrp, chmod, chown, cp, dd, ln, touch, mkdir, mkfifo, mknod, mv, rm, rmdir, ls, dir, df, du, sync), утилиты для получения общесистемной информации (basename, chroot, date, echo, env, printenv, pwd, su, tee) и программы для работы с содержимым файлов (cat, cksum, comm, split, cut, head, md5sum, sort, sum, tail, wc) и многие другие.
8 cracklib-2.7-21Нужен для pam. Библиотека для проверки того, удовлетворяет ли пароль пользователя минимальным требованиям безопасности.
9 cracklib-dicts-2.7-21Нужен для pam
10 cyrus-sasl-2.1.10-4Поддержка аутентификации в протоколах, основанных на удаленных соединениях.
11 cyrus-sasl-md5-2.1.10-4Поддержка схем аутентификации CRAM-MD5 и DIGEST-MD5.
12 db4-4.0.14-20 Поддержка баз данных, должен быть во всех системах.
13 dev-3.3.2-5 Содержит набор базовых устройств (каталог /dev).
14 dosfstools-2.8-6Нужен для mkbootdisk.
15 e2fsprogs-1.32-6 Средства поддержки файловой системы ext2fs. Включает в себя утилиты для создания (mke2fs и mkfs.ext2) , проверки на целостность (e2fsck, fsck и fsck.ext2), настройки (tune2fs), резервного копирования и т.д. Комплект этот поддерживает также журналируемый вариант файловой системы Linux - ext3fs и, ограниченно, также и ReiserFS.
16 ed-0.2-31Программы ed, gawk и sed предназначены для сложной обработки текста, представляя собой, в сущности, потоковые (неинтерактивные) текстовые редакторы. Теоретически без них можно было бы обойтись, но они широко используются во всякого рода установочных сценариях, так что практически оказываются необходимыми.
17 elfutils-libelf-0.76-3Нужен для rpm
18 filesystem-2.2.1-3 Этот пакет разворачивает на диске стандартную структуру каталогов файловой системы и устанавливает корректные права на них.
19 findutils-4.1.7-9 Две утилиты для поиска файлов: find - практически универсальное средство для поиска файлов и выполнения над найденным разнообразнейших операций, и xargs, используемая обычно в паре с командой find.
20 gawk-3.1.1-9Смотри комментарий к ed.
21 gdbm-1.8.0-20Набор утилит для работы с базами данных. Нужен для Perl и Python
22 glib-1.2.10-10Библиотека функций, необходимых для работы большинства программ.
23 glib2-2.2.1-1Библиотека функций, необходимых для работы большинства программ.
24 glibc-2.3.2-11.9Главная общесистемная библиотека функций, необходимых для работы большинства программ.
25 glibc-common-2.3.2-11.9Библиотека функций для поддержки национальных языков и временных зон.
26 gpm-1.19.3-27 Служба поддержки мыши в консоли.
26 grep-2.5.1-7Утилиты поиска по шаблону grep, egrep, fgrep, необходимая во многих случаях.
27 groff-1.18.1-20 Средства неинтерактивного форматирования текста. Компоненты пакета оказываются необходимыми для функционирования систем документации, в частности, man-страниц.
28 grub-0.93-4 Загрузчик необходим в системе. Из двух имеющихся (Lilo и GRUB) я выбрал GRUB, которым пользуюсь уже давно и который (по мнению А.Федорчука) имеет все шансы стать стандартом для открытых ОС.
29 gzip-1.3.3-9 Основная утилита для компрессии файлов.
30 hwdata-0.75-1Данные об идентификации и настройке оборудования. Нужен для pciutils
31 info-4.3-5 Разработанная в рамках GNU система документации info. Они дополняет традиционные для UNIX man-страницы, хотя по содержанию эти две системы существенно перекрывают друг друга. Необходима для coreutils, groff, grub и многих других программ.
32 initscripts-7.14-1 Файл inittab, основные системные скрипты для загрузки и останова системы.
33 iproute-2.4.7-7Утилиты настройки TCP/IP (ip, rtmon,ifcfg) разработанные для использования расширенных сетевых возможностей ядра 2.2.х
34 iputils-20020927-2Основные утилиты для мониторинга сети (в том числе ping)
35 kbd-1.08-4 Программы для работы с консольным драйвером Linux, включая программы для загрузки клавиатурных раскладок и экранных шрифтов.
36 kernel-2.4.20-8 Ядро. Тут и говорить особенно нечего - без ядра ни одна система работать не будет.
37 krb5-libs-1.2.7-10Разделяемые библиотеки для Kerberos - системы сетевой аутентификации
38 less-378-7 Утилита для постраничного просмотра содержимого файлов (в первую очередь, разумеется, текстовых).
39 libgcc-3.2.2-5Библиотека, необходимая для groff и некоторых других программ.
40 libstdc++-3.2.2-5 Библиотеки Стандартного С++ v3. Нужен для groff.
41 libtermcap-2.0.8-35Основная системная библиотека для доступа к базе данных termcap
42 libtool-libs-1.4.3-5Библиотеки функций, используемых для загрузки разделяемых библиотек
43 libuser-0.51.7-1Библиотека функций для управления группами и пользователями.
44 lockdev-1.0.0-23Библиотека блокировки устройств
45 logrotate-3.6.8-1Поскольку включили в базовый набор syslogd, то надо и logrotate, иначе диск будет впустую заполняться журналами
46 losetup-2.11y-9Программы поддержки устройства "обратная петля"
47 lvm-1.0.3-12Менеджер логических дисков. Нужен для mkinitrd
48 mailx-8.1.1-28Программа для отправки email. Используется в скриптах оболочки.
49 man-1.5k-6Традиционная для Unix система документации - man-страницы.
50 man-pages-1.53-3 man-страницы
51 man-pages-ru-0.7-6 man-страницы на русском.
52 mingetty-1.01-1Управление виртуальными терминалами.
53 mkbootdisk-1.5.1-1Программа для создания загрузочного диска.
54 mkinitrd-3.4.42-1Программы для создания начального виртуального диска
55 mktemp-1.5-18Утилита для безопасного создания временных файлов (вызывается из других программ)
56 modutils-2.4.22-8 Обеспечивает взаимодействие с модулями ядра. Включает команды предназначенные для загрузки и выгрузки модулей, определения их зависимостей, такие, как depmod, modprobe и т.д.
57 mount-2.11y-9 Команды монтирования файловых систем и подключения swap.
58 ncurses-5.3-4 Терминальная библиотека, необходимая для работы большинства консольных приложений.
59 net-tools-1.60-12Основные средства для работы с сетью (ifconfig, netstat, route и т.д.)
60 newt-0.51.4-1 Библиотека разработки интерфейса пользователя в текстовом режиме. Нужен для setuptool, ntsysv, netconfig, authconfig.
61 ntsysv-1.3.8-1Средство настройки системных сервисов (см. также chkconfig)
62 openldap-2.0.27-8LDAP - это набор протоколов, необходимый для доступа к справочным сервисам по Интернет. Нужен для libuser.
63 openssl-0.9.7a-2Нужен для openldap и cyrus-sasl.
64 pam-0.75-48Библиотеки аутентификации, используемые большим количеством программ.
65 passwd-0.68-3 Утилита passwd для задания паролей пользователей.
66 pciutils-2.1.10-7Утилиты для проверки и настройки устройств, подключенных к шине PCI.
67 pcre-3.9-10 Нужен для grep.
68 perl-5.8.0-88Язык программирования Perl, необходимый для управления процессами и файлами.
69 perl-Filter-1.29-3Нужен для Perl.
70 popt-1.8-0.69 Нужен для passwd и util-linux.
71 procps-2.0.11-6 Набор системных утилит для управления процессами: ps, free, skill, top, w, watch и др.
72 psmisc-21.2-4Утилиты для управления процессами (pstree, killall, fuser).
73 readline-4.3-5 Библиотека функций для редактирования командной строки.
74 redhat-release-9-3 Масса файлов, используемых в инициализационных скриптах.
75 rootfiles-7.2-6Файлы, необходимые для создания бюджета суперпользователя.
76 rpm-4.2-0.69Утилита для установки пакетов. Если мы не хотим замыкаться в рамках базового набора, то rpm, конечно, должна быть установлена.
77 sed-4.0.5-1 Смотри комментарий к ed.
78 setserial-2.17-12Основная системная утилита для настройки последовательных портов.
79 setup-2.5.25-1Комплект конфигурационных файлов, необходимых для работы системы, таких как /etc/passwd, /etc/group, /etc/services и т.д.
80 setuptool-1.12-1Инструмент для настройки системы в текстовом режиме.
81 shadow-utils-4.0.3-6Утилиты для управления файлами теневых паролей и учетными записями пользователей/групп.
82 slang-1.4.5-16Язык управления экраном. Нужен для newt
83 specspo-9.0-1Пакет интернационализации rpm-пакетов
84 sudo-1.6.6-3Утилита, позволяющая предоставить простым пользователям ограниченный круг прав суперпользователя
85 sysklogd-1.4.1-12 Демоны системного протоколирования, необходимые для инициализационных скриптов.
86 syslinux-2.00-4Загрузчик ядра Linux, работающий с DOS-дискеты. Нужен для mkbootdisk.
87 SysVinit-2.84-13Средства запуска и останова системы. Обеспечивают инициализацию процессов (init), осуществление уровней исполнения (runlevels), авторизацию пользователей и т.д.
88 tar-1.13.25-11 Основной архиватор, используемый многими программами (например, для просмотра man-страниц или для файлов шрифтов).
89 termcap-11.0.1-16База данных терминалов, используемая некоторыми приложениями.
90 usermode-1.67-2Инструмент для настройки обычными пользователями своих учетных записей (что требует прав суперпользователя).
91 utempter-0.5.2-16Утилита, позволяющая непривилегированным программам обновлять utmp/wtmp
92 util-linux-2.11y-9 Утилиты для создания дисковых разделов (fdisk, cfdisk), управления подкачкой (mkswap, swapon/swapoff), получения информации о системе (dmesg), управления процессами и сигналами (kill, renice) и т.д.
93 which-2.14-5 Команда which, необходимая для работы инициализационных скриптов.
94 words-2-21 Словарь английских слов. Нужен для cracklib-dicts.
95 zlib-1.1.4-8 Утилита компрессии, которая используется многими другими программами.

Для удобства читателей (ежели кто-то захочет последовать за мной) я привожу в приложении к настоящей заметке полный список пакетов, которые я удалил в ходе моих экспериментов. В таблице приведена краткая справка о назначении каждого пакета, так что вы сможете сами решить, надо ли все их удалить или включить какие-то из них в свой базовый набор.

После удаления все пакетов, перечисленных в приложении, я перезапустил систему. При этом запуске системы экран вначале заполнился какими-то серыми пятнами, однако вскорости появились нормально читаемые сообщения начальной загрузки и дальнейшая загрузка прошла без проблем. Тогда я вновь установил пакет redhat-logos-1.1.12-1.noarch.rpm с первого дистрибутивного диска. После этого загрузка тоже стала проходить без всяких эксцессов.

Приведу теперь несколько комментариев и дополнительных замечаний к таблице 1. Во-первых, в базовый набор включены две командных оболочки. Традиционно общесистемной командной оболочкой в Linux является bash. Хотя обычно стартовыми сценариями в явном виде вызывается некая оболочка /bin/sh, это - не более чем ссылка на bash: последний, будучи запущен таким образом, эмулирует т.н. POSIX-shell, принятый в качестве стандарта в Unix-системах. В принципе, в базовом комплекте можно было бы обойтись ash - облегченным вариантом оболочки. Но при этом некоторые привычные свойства оболочки станут недоступны, а это неудобно. Поэтому включены обе.

В базовый набор я включил некоторые пакеты, которые не являются абсолютно в нем необходимыми. Это, например, mkbootdisk, средства архивации и компрессии (tar, gzip, bzip2) и man-страницы. Я исходил при этом из того соображения, что хотя мы и стремимся создать минимальную конфигурацию, но она должна сохранять достаточный уровень функциональности. Справка в некоторых случаях необходима даже опытному пользователю, поэтому оставлены классические man-страницы (система info тоже включена, потому что попытка ее удалить привела к появлению сообщения о том, что она нужна массе программ). Загрузочный диск (если я не ошибаюсь) необходимо создавать в текущей системе, а не в какой-то другой. Кроме того, мы же не собираемся навсегда оставить систему в минимальной конфигурации (зачем она такая нужна!), а предполагаем ее развитие и расширение. А поэтому нужна и программа rpm для установки дополнительных пакетов, и средства архивации и декомпрессии, ибо ставить дополнительное ПО, возможно, придется не только из rpm-пакетов, но и из архивов с бинарниками.

Я не включил в базовый набор никаких средств компиляции и настройки (или отладки) программ, как и многих других средств, даже таких, без которых я не представляю себе работу за компьютером (последнее относится, например, к файловому менеджеру Midnight Commander). Но все эти средства и многое другое каждый пользователь теперь может по мере необходимости и в соответствии со своими потребностями устанавливать с дистрибутивного комплекта. Базовый набор включает команду mount, так что с монтированием CD-дисков проблем не возникает. Но "наращиванию мышц" системы будут посвящены следующие статьи, а пока подведем некоторые итоги по базовой конфигурации.

Итак, первый вывод: минимальная конфигурация, предлагаемая разработчиками, далеко не минимальна, система остается работоспособной после удаления значительного числа пакетов.

В моем базовом наборе оказалось 96 пакетов (вместо 226 в так называемой минимальной конфигурации). Причем удалить из базового набора какой-либо пакет практически невозможно - либо появляется сообщение о неудовлетворенных зависимостях, либо мы теряем возможность что-либо делать далее с системой - а зачем она тогда нужна?! Использование дискового пространства после удаления всех "лишних" пакетов, видно из следующей небольшой таблички:

 Раздел    Точка монтирования  Было занято        Занято базовым
                               первоначально      набором
/dev/hda3     /                  460120 KB         321760 KB   
/dev/hda2     /boot                9324 KB           9316 KB   
/dev/hda4     /home               32828 KB          32828 KB   

Надо отметить, что приведенные цифры по экономии дискового пространства меня лично несколько разочаровали. Я ожидал, что после удаления более чем половины пакетов, и объем занимаемого оставшимися пакетами пространства сократится примерно вдвое и составит что-то около 200 МБ. А сокращение произошло только на 140 МБ, то есть менее чем на треть.

Конечно, при желании можно было бы найти на диске ненужные файлы. Во-первых, при удалении некоторых пакетов появлялось сообщение о том, что какие-то файлы сохранены на диске с расширением .rpmsave. Думаю, что их можно бы и удалить. Более того, когда я поставил заново несколько пакетов, а потом их удалил, объем занятого пространства еще увеличился. Но ведь число пакетов не изменилось. Значит программа rpm не удаляет все файлы пакета при его удалении, а оставляет на диске какой-то "мусор".

Во-вторых, я знаю, что по умолчанию в системе устанавливается множество файлов, которые тоже никогда не будут использованы. Пример - файлы шрифтов для нескольких европейских языков, а также для некоторых восточно-азиатских (японского, китайского и т.п.). Это только один пример, известный мне из прошлого опыта (причем, каюсь, я не проверял, есть ли такие файлы на моем диске в данном конкретном случае).

Но заниматься поисками всех лишних файлов на диске - вещь совершенно невообразимая по трудозатратам и нецелесообразная в плане затрат времени на ее выполнение. В конце концов, в наше время диск объемом 500 МБ - уже такая редкость, которую можно найти только в антикварном магазине. Поэтому останавливаться на этом я не стал, удовлетворившись той степенью минимизации, которую мне удалось получить в базовом наборе.

А вот чем стоит заняться, так это проверкой того, какими сетевыми возможностями обладает наш базовый набор, способен ли он обеспечить подключение компьютера к локальной сети. Если вы ставите систему на изолированный домашний компьютер, то, вероятно, этот вопрос вас не интересует. Но у меня, как вы помните (см.[2]), все-же два компьютера, соединенных витой парой, так что мини-локальную сеть можно создать. В наш базовый набор попали несколько пакетов с программами сетевой ориентации, однако только те, которые необходимы по каким-то причинам для беспроблемной загрузки системы (все же Linux - система изначально сетевая, а поэтому инициализационные скрипты предполагают наличие некоторых программ для организации работы сети, что и отражено во взаимозависимостях пакетов). Но достаточно ли этих средств хотя бы для выхода в сеть в роли клиента - это надо выяснить.

Вначале давайте посмотрим, какие сетевые интерфейсы у нас имеются. Для этого запускаю команду /sbin/ifconfig, которая входит в пакет net-tools, и которая сообщает мне, что имеются два сетевых интерфейса eth0 и lo. Хорошо уже то, что сетевая карта обнаружилась. Только вот, обращаю внимание на то, что интерфейс eth0 не имеет IP-адреса. Но задать его можно с помощью той же команды ifconfig (см. [1]):

[root]# /sbin/ifconfig eth0 192.168.36.4 netmask 255.255.255.0 up

После этого вывод команды ifconfig стал выглядеть следующим образом:

eth0      Link encap:Ethernet  HWaddr 08:00:09:A7:42:5D  
          inet addr:192.168.36.4  Bcast:192.168.36.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:4350 dropped:0 overruns:0 frame:4350
          TX packets:4 errors:255 dropped:0 overruns:0 carrier:255
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:168 (168.0 b)
          Interrupt:10 Base address:0xd000 Memory:e1800000-e1820000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
Теперь можно посмотреть на результат выполнения команды ping, которая в базовом наборе тоже имеется - она была установлена вместе с пакетом iputils (см. таблицу 1). Я в ответ на команду
ping 192.168.36.1
получил ответ от моего основного компьютера. А вот на имя (trend) он не отзывается. Впрочем, лекарство тут известное: надо в файле /etc/hosts прописать соответствие между именами и IP-адресами. Теперь trend отзывается и на имя. И наоборот, команда ping, запущенная на компьютере trend (работающем под Windows 98), выдала следующий результат:
C:/ping 192.168.36.4

Обмен пакетами с 192.168.36.4 по 32 байт:

Ответ от 192.168.36.4: число байт=32 время<10мс TTL=64
Ответ от 192.168.36.4: число байт=32 время=1мс TTL=64
Ответ от 192.168.36.4: число байт=32 время=1мс TTL=64
Ответ от 192.168.36.4: число байт=32 время=1мс TTL=64

Статистика Ping для 192.168.36.4:
    Пакетов: послано = 4, получено = 4, потеряно = 0 (0% потерь),

Приблизительное время передачи и приема:
    наименьшее = 0мс, наибольшее =  1мс, среднее =  0мс

А вот по имени опять не получается. Но DNS-сервер я пока ставить не собираюсь, так что в этой части своих экспериментов я решил ограничиться констатацией того факта, что базовый набор обеспечивает возможность выхода в локальную сеть.

В заключение данной заметки хотелось бы сказать, что я все же не уверен, что перечисленный в таблице 1 набор пакетов представляет собой абсолютный минимум, при котором система еще работоспособна. Скорее это просто результат, достигнутый в данном эксперименте, и не более того. А, как математик по образованию, я знаю, что один эксперимент не может служить доказательством какого-либо утверждения. Если же сравнивать с результатами, полученными в проекте Linux From Scratch, то количество пакетов в моем базовом наборе кажется просто черезчур большим. Но еще раз повторю, что я ставил перед собой достаточно скромную задачу: проверить действительно ли минимален тот набор пакетов, который включен в минимальную конфигурацию дистрибутива Red Hat Linux.

После того, как базовый набор определен, само собой возникает еще одна проблема: как бы установить этот базовый набор (и только его) на компьютер (или на диск). То есть как создать свою программу инсталляции базового варианта системы. Я пока за эту задачу не берусь. Может быть, найдутся энтузиасты? Если кто возьмется и добъется успеха, опишите свои действия и пришлите мне для публикации на всеобщее благо.

А я на этом данную статью заканчиваю. Разумеется, та система, состав пакетов в которой ограничен базовым набором, приведенным в таблице 1, представляет скорее теоретический, чем практический интерес. Чтобы превратить базовый набор в минимально пригодную для практической работы систему, требуется добавить еще какие-то программные средства. Какие именно и как, - этому я и посвящу следующую заметку (или даже несколько). Вы можете следовать за мной по проторенному маршруту или избрать свой путь, но цель у нас, я надеюсь, общая: собрать систему, полностью приспособленную под нужды конкретного пользователя, причем такую, в которой хозяин системы полностью владеет ситуацией, то есть знает, какие программные средства у него установлены и зачем они ему нужны.


Дополнения.

После публикации этой заметки я получил от сотрудника фирмы Linux Inc (выпускающей дистрибутив Red Hat Linux Cyrillic Edition) Владимира Титова следующее письмо.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Date: Вт, 14 окт 2003  19:53:51
    From: Vladimir Titov 
 Subject: Re[3]: Впечатления о RH 9 CE
--------------------------------------------------------------------------------

Добрый день, Виктор!

Прочитал Ваши заметки о минимальной конфигурации.
Интересно, хотя в Вашем подходе есть некоторое противоречие.

Вы ужали минимальный набор пакетов до 95, а следующий предполагаемый
шаг - ``добавить еще какие-то программные средства''.
Не получится ли в результате 226 пакетов, с которых Вы начали?

Ответ-то, конечно, отрицательный, но как много будет отличий?
Разумеется, предпочтения могут быть разными, и у редхатовцев
они не такие, как у Вас, но ведь речь идет о минимальной
конфигурации. Здесь нужно уточнить: минимальной для чего?
Если Вы создаете сетевой сервер, например, но Вам и perl не нужен,
не нужен gdbm. Правда скоро снова захочется поставить тот или
иной пакет, просто для удобства работы. Вообщем минимальный
пакет - вещь, зависящая от стоящей цели и весьма субъективная.
Удаленный Вами autofs весьма полезен не только при работе в сети,
но и при работе с дискетами, diffutils или patch, вообще
последние пакеты, с которыми я согласился бы расстаться,
но это мое, субъективное, мнение.

Да, к сожалению, в минимальный набор, предлагаемый RedHat'ом
попадают очевидно не нужные пакеты. Если нет X-ов, то конечно
не нужны ни X-овые шрифты, ни сервер шрифтов, ни другие,
попавшие по недоразумению (?) графические пакеты.
Но, например, удалять пакеты usbutils и hotplug
можно советовать только работающим на i386 и i486,
На Пентиумах же USB порты, как правило есть, даже если
нет выводов, но выводы-то как раз добавить не сложно.
Как же я буду пользоваться Flash-драйвом, если USB
не будет функционировать? Дискеты уж больно ненадежны
стали, а флэши, если не гигабайтные, то вполне
приемлемы по цене.

Вобщем, извините, повторюсь. Если создавать минимальную
конфигурацию, то нужно четко поставить задачу: какую
мы преследуем цель, чем конкретно и для чего мы готовы
жертвовать.

И еще несколько соображений. 1. Если цель поставлена и есть
четкое понимание, что же нужно, то лишние пакеты можно
удалить, даже если нарушаются некоторые зависимости:
ну требуется perl, а perl-Filter не нужен - удалить.

2. Лучше, конечно, разобраться, для чего нужен каждый конкретный
пакет. Команда "rpm -qi <имя пакета>" для установленных пакетов
или "rpm -qi <имя файла rpm>" дадут, хотя и не исчерпывающее,
но все же какое-то объяснение. Команда "rpm -qia" снабдит
Вас информацией обо всех установленных пакетах.

3. Не лишне напомнить, что много информации, как оказывается нужной,
можно найти в README, Release Notes да и просто в прилагаемых
буклетах, документах и т.д. Например, уже несколько релизов
RedHat пишет, что lilo больше поддерживаться не будет, пользуйтесь,
пожайлуйста grub'ом. И кстати, в следующем релизе (Fedora Core)
его уже и нет.

4. Может быть стоит классифицировать пакеты не только нужные-- не нужные,
но и большие-маленькие. Размеры пакетов сильно различаются.
Удалив сотню таких пакетов, как "bc", мы и близко не получим такой
выгоды, какую мы будем иметь, удалив, например "emacs".

5. "rpm -e <имя пакета>" удаляет ВСЕ файлы пакета. Исключение могут
составлять только т.н. конфигурационные файлы и файлы, которые создаются
в процессе инстоляции, и не удаляются (в этом случае --  ошибка) при 
удалении пакета. Объем таких файлов незначителен.


С уважением,
             Владимир Титов
Судя по этому письму, я недостаточно четко сформулировал цель, которую ставил при выяснении состава базового набора пакетов. Попробую очертить ее более конкретно. Цель эта, вообще говоря, многоплановая.

Во-первых, я хотел выяснить, какие пакеты АБСОЛЮТНО необходимы в ЛЮБОЙ Linux-системе, будь это персональный компьютер, простой маршрутизатор (который приводится программой инсталляции в качестве примера минимальной конфигурации), персональный компьютер или сетевой сервер. Естественно, что базовый набор практически не может решить задачи, которые стоят перед любой из этих (или вообще перед любой) Линукс-системой. И поэтому для получения работающей системы его необходимо дополнять (а поэтому пакет rpm или его аналог должен в него входить, как и программа монтирования сменных носителей). Важно, чтобы базовая система уже "реагировала" на команды пользователя (а точнее - администратора, единственного ее пользователя), чтобы компьютер "ожил", превратился из набора комплектующих (дополненого программой BIOS) в работающую машину.

При этом я заранее согласен с тем, что такая система не будет обладать многими даже необходимыми качествами. Например, в ней не будет обеспечена безопасность совместной работы многих пользователей (так их в ней и не предполагается!), в ней не будет возможностей работы в графическом режиме и так далее. Первоначально я даже полагал отказаться от включения в базовый пакет каких-либо средств работы в сети, если только их можно установить позже. Хорошо, что базовый набор уже "видит сеть", но работу в сети я не включаю в перечень требований к базовому набору.

Во-вторых, меня всегда интересовал вопрос о том, можно ли создать такую минимальную конфигурацию Линукс, которая могла бы устанавливаться на старые компьютеры, которые не имеют CD-ROM привода. То есть устанавливаться такая система должна с дискет. А значит, ее объем не должен превышать где-то 10-15 МБайт. Причем, это должна быть не какая-то сильно урезанная версия Линукс (вроде того 4-дискетного дистрибутива, с которым я немного экпериментировал, но точное название которого я сейчас подзабыл), а система вполне расширяемая и с полным набором необходимых по-началу команд. Представляете, как можно было использовать старые 486-ые машины при наличии такой системы? Как минимум в качестве удаленных терминалов, подключаемых к одной мощной машине (учебный класс, например).

И, в третьих, одной из самых важных целей выделения базового набора я считаю достижение четкого понимания, из чего состоит моя система и что она может. Я понимаю, что полный ответ на этот вопрос могут дать только разработчики дистрибутива вместе с разработчиками отдельных пакетов и приложений. Такой ответ состоял бы, вероятно, из многих томов документации, которую никто реально и не прочитал бы. Так что я хочу здесь добиться только некоторого поверхностного понимания, знания основных функций, подкрепленного представлением о том, что система НЕ МОЖЕТ. Последнее тоже очень важно, ибо ошибка в оценке возможностей системы в части их преувеличения может привести в весьма печальным последствиям, в особенности, если это касается вопросов безопасности.


Через пару дней после публикации первого варианта этой статьи (то, что сейчас составляет ее начало, до подзаголовка "Дополнения") у меня появилась новая идея. Точнее, не новая, а хорошо забытая старая. Вспомнил я о подходе, уже использованном мной в статье [13], и о том, что на этапе выбора пакетов для инсталляции в одном из экранов имеется в углу малозаметная опция - индивидуальный выбор пакетов. Взял я первый дистрибутивный диск и начал инсталляцию заново. На этапе выбора пакетов выбрал "Минимальную комплектацию" и поставил галочку возле надписи "Индивидуальный выбор пакетов". Пришлось немного подождать, пока отобразится длинный список пакетов. После этого я прошелся по нему и снял галочки со всех пакетов подряд. То есть, как бы принял решение не ставить ни одного пакета. Однако щелчок по кнопочке "Дальше" привел к тому, что начался обычный процесс установки пакетов. В общем, понятно, что самые необходимые пакеты не отображаются в списке для выбора. А, поскольку программа инсталляции сообщала, что устанавливается 96 пакетов, я уж было подумал, что в точности угадал минимально необходимый набор. Однако в данном вопросе я ошибся. Когда инсталляция завершилась, я вошел в систему, и просмотрел список установленных пакетов, оказалось, что список этот существенно отличается от списка, представленного в таблице 1. Сравнив эти списки, я удалил из вновь установленной системы те пакеты, которые не попали в таблицу 1, а именно, следующие пакеты:

Таблица 2. Пакеты, удаленные после установки минимальной конфигурации.

authconfig-4.3.4-1
comps-9-0.20030313
cpio-2.5-3
expat-1.95.5-2
file-3.39-9
gmp-4.1.2-2
hdparm-5.2-4
hotplug-2002_04_01-17
kudzu-0.99.99-1
libacl-2.2.3-1
libattr-2.2.0-1
lilo-21.4.4-22
MAKEDEV-3.3.2-5
python-2.2.2-26
pyxf86config-0.3.5-1
raidtools-1.00.3-2
redhat-config-mouse-1.0.5-1
rhpl-0.93-1
usbutils-0.9-10
vim-common-6.1-29
vim-minimal-6.1-29
Все они удалились без особых проблем. Оказалось, что ни один из них не нужен для осташихся теперь в системе 75 пакетов.

Команда df выдала мне на этот раз следующие данные (увеличение объема занятого пространства на разделе /home объясняется тем, что я не форматировал этот раздел):

 Раздел    Точка монтирования   Занято 
/dev/hda3     /                  246388 KB   
/dev/hda2     /boot                9313 KB 
/dev/hda4     /home               33356 KB 
Итак, теперь базовый набор составляют следующие 75 пакетов:

Таблица 3. 75 пакетов базового набора.

 ash-0.3.8-8
 basesystem-8.0-2
 bash-2.05b-20
 bzip2-libs-1.0.2-8
 chkconfig-1.3.8-1
 coreutils-4.5.3-19
 cracklib-2.7-21
 cracklib-dicts-2.7-21
 cyrus-sasl-2.1.10-4
 cyrus-sasl-md5-2.1.10-4
 db4-4.0.14-20
 dev-3.3.2-5
 e2fsprogs-1.32-6
 ed-0.2-31
 elfutils-libelf-0.76-3
 filesystem-2.2.1-3
 findutils-4.1.7-9
 gawk-3.1.1-9
 gdbm-1.8.0-20
 glib-1.2.10-10
 glib2-2.2.1-1
 glibc-2.3.2-11.9
 glibc-common-2.3.2-11.9
 grep-2.5.1-7
 grub-0.93-4
 gzip-1.3.3-9
 hwdata-0.75-1
 info-4.3-5
 initscripts-7.14-1
 iproute-2.4.7-7
 iputils-20020927-2
 kbd-1.08-4
 kernel-2.4.20-8
 krb5-libs-1.2.7-10
 less-378-7
 libgcc-3.2.2-5
 libtermcap-2.0.8-35
 libuser-0.51.7-1
 losetup-2.11y-9
 lvm-1.0.3-12
 mingetty-1.01-1
 mkinitrd-3.4.42-1
 mktemp-1.5-18
 modutils-2.4.22-8
 mount-2.11y-9
 ncurses-5.3-4
 net-tools-1.60-12
 newt-0.51.4-1
 openldap-2.0.27-8
 openssl-0.9.7a-2
 pam-0.75-48
 passwd-0.68-3
 pcre-3.9-10
 popt-1.8-0.69
 procps-2.0.11-6
 psmisc-21.2-4
 readline-4.3-5
 redhat-logos-1.1.12-1
 redhat-release-9-3
 rootfiles-7.2-6
 rpm-4.2-0.69
 sed-4.0.5-1
 setserial-2.17-12
 setup-2.5.25-1
 shadow-utils-4.0.3-6
 slang-1.4.5-16
 sysklogd-1.4.1-12
 SysVinit-2.84-13
 tar-1.13.25-11
 termcap-11.0.1-16
 usermode-1.67-2
 util-linux-2.11y-9
 which-2.14-5
 words-2-21
 zlib-1.1.4-8
Получив такой результат, я решился еще раз повторить установку системы в минимальной конфигурации, использовав на этапе инсталляции только текстовый режим. Я предполагал, что в этом случае число установленных пакетов окажется еще меньше. К моему удивлению, в таком варианте установки было установлено 193 пакета, хотя я задал индивидуальный выбор пакетов и, так же как в предыдущем случае, снял отметку со всех пакетов вообще. Кстати, среди вариантов установки в текстовом режиме вообще отсутствует вариант "Минимальная комплектация".

Я буду очень рад, если кто-то из читателей моих заметок сможет показать (доказать), что приведенный выше набор из 75 пакетов не минимален, что из него (без ущерба в плане достижения сформулированных выше целей) можно удалить еще что-то. Итак, кто меньше?!

И второй вопрос-вызов: кто знает, как загнать получающуюся таким образом систему на 486-ой компьютер с жестким диском в 300-500 МБ и небольшим объемом памяти?

Пишите, раздел "Дополнения" к данной статье не закрывается!

Следующая статья: "Минимальная конфигурация. KDEbase."

Список литературы и ссылки.

  1. В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.
  2. В.А.Костромин, "14 дней жизни одной операционной системы или впечатления об установке и настройке Red Hat Linux 9 Cyrillic Edition".
  3. Под ред. А.Пасечника, "Red Hat 6.2 Linux. Учебный курс." СПб, изд. "Питер", 2000 г. 560 стр.
  4. Gerard Beekmans (Г.Бикманс), "Linux From Scratch" Version 6.0, Перевод: Сергей Каминский.
  5. А.Федорчук, "Из чего только сделаны Linux'ы"
  6. А.Федорчук, "Самостройный Linux. Часть 1, Вводная "
  7. А.Федорчук, "Самостройный Linux. Часть 2, Подготовительная "
  8. А.Федорчук, "Самостройный Linux. Интермедия об источниках и исходниках. "
  9. А.Федорчук, "Самостройный Linux. Часть 3, Продолжальная."
  10. А.Федорчук, "Самостройный Linux. Часть 4, Определяющая."
  11. А.Федорчук, "Самостройный Linux. Базовые пакеты."
  12. А.Федорчук, "Самостройный Linux. Обзор ресурсов."
  13. В.А.Костромин, "Об инсталляции Linux в минимальной конфигурации".