Linux
Шрифт:
Для того чтобы внесенные в конфигурационный файл изменения вступили в силу, необходимо выполнить следующую команду: /sbin/lilo. Если все в порядке, на экране появятся следующие строки:
Added linux * Added new Linux kernel
Символ * после linux обозначает, что секция, помеченная как linux, является загружаемой по умолчанию.
2. Проверьте, как функционирует новое ядро. Если проблем нет – уберите из конфигурационного файла LILO секцию, относящуюся к старому ядру.
Компиляция ядра операционной системы Linux
Ядро операционной системы Linux может быть двух типов – монолитное и модульное.
Модульное ядро — это такое ядро, где драйверы почти всех устройств не вкомпилированы в него, а содержатся во внешних модулях, загружаемых по мере необходимости. С одной стороны, это несколько замедляет работу ядра, а с другой – нет необходимости пересобирать ядро при установке какого-нибудь нового аппаратного устройства.
Монолитное ядро — это ядро, в котором все необходимые драйверы в него вкомпилированы. Недостатком такого ядра является необходимость пересобирать ядро операционной системы при появлении новых аппаратных устройств, а достоинством – сравнительно небольшой объем ядра операционной системы и повышенная ее производительность. Мы рассмотрим компиляцию и модульного ядра, и монолитного.
Для чего пересобирают ядро? Каковы аргументы «за» и "против"?
«За» компиляцию ядра операционной системы
Рассмотрим аргументы «за».
• Основная причина для самостоятельной компиляции ядра – выход новых версий ядра операционной системы Linux. Как правило, в новых версиях добавляются новые функциональные возможности и исправляются замеченные ошибки. К сожалению, большинство сборщиков дистрибутивов отстают в выпусках «фирменных» ядер операционной системы, а иногда даже делают доступным новую версию ядра операционной системы только с выходом новой версии дистрибутива.
• Пересборка ядра используется для оптимизации ядра операционной системы Linux конкретно под имеющийся набор аппаратных средств – процессора, чипсета материнской платы, контроллеров, сетевых плат, видеокарт и
• Компиляцию ядра осуществляют так же для включения специфических свойств ядра , которые появляются в нем после наложения специальных «заплаток» – (патчей), разрабатываемых отдельными программистами или группами. Обычно эти свойства связаны с безопасностью системы или с функционированием экзотических аппаратных средств. Наиболее известен вариант «альтернативного» ядра от Алана Кокса (Alan Кох).
• Самостоятельно компилировать экспериментальные ядра с новыми возможностями приходится потому, что разработчики дистрибутивов их не тестируют и не выпускают с ними инсталляционные пакеты. Следует помнить, что экспериментальные ядра не всегда стабильны, и с новыми возможностями можно получить набор ошибок, правда зачастую не критичных для функционирования системы.
«Против» компиляции ядра операционной системы
Против компиляции ядра операционной системы есть столько же пунктов (если не больше), сколько и «за».
• Для того чтобы скомпилировать ядро операционной системы, необходимо много знать из различных областей администрирования: особенности настройки и функционирования сетей, поддержка аппаратуры, периферии, файловых систем, специфического программного обеспечения и др.
• При неправильно сконфигурированном или неверно установленном новом ядре операционной системы (это вытекает из предыдущего пункта) получаем проблемы вплоть до полной потери работоспособности операционной системы.
• Это противоречит принципу "работает – не трогай". Если ядро операционной системы работает устойчиво и его функционирование всех удовлетворяет – зачем его компилировать?
• Если вы решили уменьшить объем ядра операционной системы, изъяв все лишнее, не забудьте: почти все свойства ядра операционной системы вынесены в загружаемые модули, поэтому сэкономить удастся только пятьдесят-сто килобайт.Утилиты конфигурирования ядра операционной системы Linux
Если вы все-таки решились скомпилировать ядро операционной системы Linux, перед вами встанет вопрос – как сконфигурировать его параметры? Можно, конечно, изучить исходные тексты ядра операционной системы, но это займет не менее одной-двух недель. Есть и более легкие способы – сделать это при помощи специальных утилит:
• xconfig – утилита по конфигурированию параметров ядра в графической системе X Window (рис. 16.1). Как можно видеть из рисунка – простая, понятная, легкая в использовании;
Рис. 16.1. xconfic
• menuconfig – простая текстовая утилита с системой меню для конфигурации ядра операционной системы (рис. 16.2). Передвигаясь по пунктам меню, достаточно удобно настраивать ядро операционной системы;
• config – старейшая текстовая утилита для конфигурирования ядра операционной системы (рис. 16.3). Требует минимального количества ресурсов и библиотек, однако неудобна в эксплуатации. Нельзя вернуться назад и отредактировать предыдущие пункты, необходимо закончить конфигурирование (или прервать) и начать его заново. На сегодняшний день практически не применяется.
Рис. 16.3. config
Процесс компиляции ядра
Как обычно, к компиляции ядра операционной системы следует предварительно подготовиться – создать загрузочную дискету. Для этого зайти в систему пользователем root и выполнить команду:/sbin/mkbootclisk kernelversion
где kernelversion – версия ядра, полученная с помощью команды uname.
Далее необходимо получить из Интернета (или с инсталляционного компакт-диска) и установить пакеты kernel-headers и kernel-source.
После этого перейти в каталог /usr/src/linux-2.4 и все дальнейшие команды выполнять из этого каталога.
Ядро с поддержкой загружаемых модулей (модульное)Компиляция ядра операционной системы Linux происходит в несколько этапов.
1. Необходимо быть уверенным, что после предыдущих компиляций ядра операционной системы в дереве исходных кодов не осталось каких-либо несуразностей типа исходных текстов ядра младшей версии или неубранных объектных файлов. Поэтому компиляцию ядра операционной системы рекомендуется начать с команды make mrproper. Эта команда помимо того, что удаляет «мусор» после предыдущих компиляций, уничтожает также конфигурационный файл ядра, который находится в /usr/src/linux-2.4/.config. Если у вас уже есть рабочий конфигурационный файл (/usr/src/linux-2.4/.config) который вы хотите взять за основу, перед выполнением этой команды скопируйте его в свой домашний каталог, а после выполнения команды make mrproper верните на прежнее место.
2. Теперь следует произвести конфигурацию ядра операционной системы. Если у вас уже есть готовый конфигурационный файл – пропустите этот шаг. Для конфигурирования ядра операционной системы, как мы уже указывали выше, можно воспользоваться четырьмя разными утилитами, приводящими к одному результату:
• make xconfig. Утилита используется для конфигурирования ядра операционной системы в среде X Window;
• make config. Простая текстовая утилита конфигурации ядра операционной системы;
• make menuconfig. Текстовая утилита с системой меню для конфигурации ядра операционной системы Linux;
• make oidconfig. Неинтерактивный скрипт, который устанавливает в конфигурационном файле ядра значения по умолчанию.
3. После создания конфигурационного файла /usr/src/linux-2.4/.config для корректной установки всех зависимостей выполняем команду make dep.
4. Для подготовки исходных текстов для компиляции выполняем команду make clean.
5. Теперь необходимо отредактировать файл /usr/src/linux-2.4/Makefile таким образом, чтобы полученное новое ядро не перекрыло старое ядро операционной системы (более подробную информацию смотрите в Kernel-HOWTO). Редактируем /usr/src/linux-2.4/Makefile и исправляем строку, начинающуюся с extraversion= таким образом, чтобы создать уникальное имя. Самый простой вариант – добавить дату компиляции ядра. К примеру EXTRAVERSION= -0.1.21-jul2001. Это позволит одновременно иметь старую и новую версии ядра операционной системы.
6. Компилируем ядро операционной системы командой make bzImage.
7. Компилируем модули ядра операционной системы командой make modules.
8. Устанавливаем модули операционной системы командой make moduies_install. Эта команда должна установить модули ядра в каталог /lib/modules/KERNELVERSION/kernel/drivers, где KERNELVERSION – версия, описанная в файле Makefile. В нашем примере это /lib/modules/2.4.7-3-jul2001/kernel/drivers/.
9. Если в вашей системе установлен SCSI-контроллер, и вы сделали SCSI-драйвер модульным, необходимо создать новый файл initrd (см. далее).
10. Выполняем команду make install для того, чтобы скопировать наше новое ядро операционной системы и необходимые файлы в соответствующие каталоги.
11. Ядро успешно скомпилировано и установлено. Далее необходимо произвести конфигурирование загрузчика (см. разд. "Конфигурирование загрузчика ").
Создание образа initrd
Файл initrd необходим для загрузки SCSI-модуля во время старта операционной системы. Скрипт /sbin/mkinitrd создает соответствующий образ initrd для вашего компьютера, если выполнены следующие условия:
• loopback block device доступно;
• файл /etc/modules.conf содержит описание вашего SCSI-контроллера.
Для построения образа initrd необходимо выполнить команду /sbin/mkinitrd СО следующими параметрами: /sbin/mkinitrd /boot/initrd-2.4.7-3-jul2001.img 2.4.7-3-jul2001
Здесь /boot/initrd-2.4.7-3-jul200i. img – имя файла для нового образа initrd, a 2.4.7-3-jul2001 – ядро, чьи модули (из /lib/modules) должны быть использованы при создании образа initrd.
Этапы компиляции
Подведем итог. Для компиляции и инсталляции модульного ядра операционной системы Linux необходимо выполнить следующие команды:
1. make mrproper.
2. make menuconfig.
3. make dep.
4. make clean.
5. Редактирование /usr/src/linux-2.4/Makefile.
6. make bzlmage.
7. make modules.
8. make modules_install.
9. /sbin/mkinitrd /boot/initrd-2.4.xx.img 2.4.хх (если В вашей системе установлен SCSI-контроллер).
10. make install.
11. Конфигурирование загрузчика.
Монолитное ядроКомпиляция монолитного ядра операционной системы в основном повторяет компиляцию модульного ядра за некоторыми небольшими исключениями:
• когда конфигурируется ядро, не должны использоваться модули, т. е. на любой вопрос надо отвечать только Yes или No. Так же необходимо ответить No для пунктов kmod support и module version (CONFIG MODVERSIONS) support;
• необходимо пропустить следующие команды:
– make modules;
– make modules_instali;
• для загрузчика LILO в файл lilo.conf необходимо добавить строчку append=nomodules.
Этапы компиляции
Подведем итог. Для компиляции и инсталляции монолитного ядра операционной системы Linux необходимо выполнить следующие команды:
1. make mrproper.
2. make menuconfig.
3. make dep.
4. make clean.
5. Редактирование /usr/src/linux-2.4/Makefile.
6. make bzlmage.
7. /sbin/mkinitrd /boot/initrd-2.4.xx.img 2.4.хх (если В вашей системе установлен SCSI-контроллер).
8. make install.
9. Конфигурирование загрузчика (см. разд. «Конфигурирование загрузчика»). Для загрузчика LILO в файл lilo.conf необходимо добавить строчку append=nomodules.
Параметры настройки ядра
Этот раздел полностью посвящен параметрам настройки ядра операционной системы Linux. Структура раздела выглядит следующим образом – в первой части на основе утилиты menuconfig показано дерево параметров настройки ядра Linux, во второй части – краткие пояснения параметров.
Дерево параметров настройки ядра
Полное дерево настроек ядра Linux с установками, используемыми в дистрибутивном ядре Red Hat Linux 7.2, приведено в приложении 4.
Параметры настройки ядра (комментарии)
Как вы уже заметили, параметров настройки ядра много, и чтобы правильно их сконфигурировать, необходимо иметь обширные знания о функциях операционной системы Linux. Еще одна особенность – почти 90 % всех настроек и свойств ядра вынесены в модули. Если вы не уверены в том или ином свойстве – поставьте
Далее кратко прокомментируем основные пункты меню конфигурации ядра операционной системы:
• Code maturity level options – для использования альфа– или нестабильных версий драйверов. В основном с целью отладки;
• Loadable module support – отвечает за вид скомпилированного ядра операционной системы: модульное или монолитное;
• Processor type and features – определяет тип процессора, для которого компилируется ядро операционной системы, поддержку набора процессорных команд, поддержку мультипроцессорной системы, объем поддерживаемой оперативной и виртуальной памяти и некоторые другие параметры. Для максимальной производительности системы рекомендуется выбрать именно тот тип процессора, который установлен в вашей системе, однако с целью совместимости в дистрибутиве ядро компилируется таким образом, чтобы оно работало на любом процессоре – от Pentium до Pentium 4, AMD и Cyrix;
• General setup – определяет основные свойства ядра: что оно сможет делать и какие типы устройств будет поддерживать. Здесь выбирается поддержка сети, шин PCI, EISA, MCA, PCMCIA-устройств, различных форматов исполняемых файлов и т. п;
• Binary emulation of other systems – определяет, для каких операционных систем поддерживается выполнение бинарных файлов. В основном, это поддержка бинарных файлов для UnixWare, Solaris, SCO Unix;
• Memory Technology Devices (MTD) – данные устройства (твердотельные накопители) для нас еще достаточно экзотичны;
• Parallel port support – отвечает за поддержку ядром параллельного порта;
• Plug and Play configuration – поддержка Plug and Play, в том числе и ISA-устройств;
• Block devices – определяется поддержка различных блоковых устройств и контроллеров, в том числе дисководов, жестких дисков старого (XT) типа или жестких дисков, подключаемых к параллельному порту. Здесь же включается поддержка Loорback-устройства, сетевого блочного устройства и диска, создаваемого в оперативной памяти (RAM Disk). С последним надо быть очень аккуратным, как вы знаете, он используется при загрузке операционной системы;
• Multi-device support (RAID and LVM) – включается поддержка RAID-устройств и LVM (управление массивом дисков);
• Networking options – поскольку одним из важнейших назначений для операционной среды Linux является работа с сетью, то, наверное, половина параметров ядра тем или иным образом касается сети. Здесь определяются различные сетевые параметры – используемые сетевые протоколы, сетевая маршрутизация, конфигурирование виртуального сервера и многое другое;
• Telephony Support – отвечает за поддержку плат IP-телефонии – специализированных устройств для преобразования телефонного звонка в цифровое представление и обратно. Подавляющее число пользователей вряд ли даже знают названия этих карт, не говоря уже об использовании;
• ATA/IDE/MFM/RLL support – определяются поддерживаемые устройства и контроллеры ATA/IDE, а так же устаревшие устройства MFM/RLL. Здесь же есть параметры для исправления ошибок различных чипов контроллеров ATA/IDE, большей частью времен 386 и 486 процессоров. Поскольку у большинства пользователей в компьютере присутствует хотя бы одно устройство ATA/IDE – нужно быть очень внимательным при конфигурировании этого раздела. В этом же разделе включается поддержка модных ныне аппаратных контроллеров IDE RAID;
• SCSI support – определяет поддержку SCSI-устройств и контроллеров. Поскольку SCSI-устройства сложнее IDE-устройств, и каждый производитель контроллеров старался «отличиться», этот раздел получился большим и несколько запутанным. Здесь определяется поддержка дисков, ленточных накопителей, CD-ROM и RAID-массивов;
• Fusion MPT device support – поддержка устройства Fusion MPT – объединенного высокоскоростного SCSI-адаптера и сетевого интерфейса. Работает по протоколу Ultra 320 или Fibre Channel;
• IEEE 1394 (FireWire) support (EXPERIMENTAL) – поддержка контроллеров FireWire;
• 120 device support – поддержка Intelligent Input/Output. Используется для ввода/вывода без участия процессора;
• Network device support – поддержка различных сетевых устройств, в том числе протокола РРР, SLIP, оптических устройств, беспроводных сетей и т. п.;
• ARCnet devices – протокол и устройства, разработанные достаточно давно. Практически вышли из употребления;
• Appletalk devices – устройства для сетей Appletalk фирмы Apple. В России широкого распространения не имеют;
• Ethernet (10 or 100Mbit) – поддержка сетевой карты Ethernet. Представлены карты и семейства карт различных производителей, работающие на скорости 10 или 10/100 Мбит;
• Ethernet (100 Mbit) – представлены сетевые карты Ethernet, работающие на скорости 100 Мбит;
• Wireless LAN (non-hamradio) – осуществляется поддержка устройств типа Radio Ethernet;
• Token Ring devices – устройство, разработанное фирмой IBM достаточно давно. Большого распространения (по крайней мере у нас) не получило. Сегодня практически не используется;
• Wan interfaces – поддержка интерфейсов глобальных сетей;
• ATM drivers – поддержка для ATM-сетей. Очень распространены в США для организации связи на большом расстоянии;
• Amateur Radio support – поддержка любительского радио. Не представляет интереса для подавляющего числа пользователей (если вы, конечно, не радиолюбитель);
• IrDA (infrared) support – поддержка устройств и инфракрасных портов. Обычно используется для связи с портативными принтерами, органайзерами и мобильными телефонами;
• ISDN subsystem – поддержка ISDN-устройств. В основном используется для подключения к цифровым телефонным станциям;
• Old CD-ROM drivers (not SCSI, not IDE) – поддержка старых CD-ROM, работающих по специфическому протоколу. Подобные устройства не выпускаются с 1996 года (максимальная скорость устройств – 4х —6х);
• Input core support – поддержка USB Human Interface Device (в частности USB-клавиатуры и мыши);
• Character devices – поддержка символьных устройств: терминалов, последовательных портов и многопортовых контроллеров, аппаратных датчиков, мышей, джойстиков и манипуляторов, видеокарт и чипсетов;
• Multimedia devices – поддержка мультимедиа-устройств. В данном случае это платы TV– и FM-приемников, платы телетекста;
• Crypto Hardware support – поддержка устройств аппаратного шифрования (для закрытых учреждений);
• File systems – поддержка различных файловых систем (VFAT, Ext3, ISO 9660 и т. п.), сетевых файловых систем, поддержка квотирования дискового пространства для пользователей, типов разделов жесткого диска. Помимо этого, сюда же вынесена поддержка различных языковых кодировок;
• Console drivers – консольные драйверы, поддержка ряда видеокарт;
• Sound – поддержка звуковых карт. Из-за того, что до последнего времени не было единого стандарта на звуковой интерфейс, почти каждая карта была в своем роде уникальна;
• USB support – поддержка USB-контроллеров и устройств, в том числе Flash-накопителей, мышей, видеокамер и т. п.;
• Bluetooth support – поддержка нового Bluetooth-интерфейса (радиосеть);
• Kernel hacking – используется для отладки ядра операционной системы Linux.
Ссылки
• Red Hat Linux 7.2 The Official Red Hat Linux Customization Guide.
• The Linux Kernel on Red Hat Linux Systems – обновление ядра операционной системы.
• www.gnu.org/software/grub/ – домашняя страница GRUB.
• www.redhat.com/support/docs/howto/kernel-upgrade/kernel-upgrade.html – Upgrading.
• /usr/src/linux-2.4/Documentation – большой объем документации, посвященный ядру операционной системы Linux и ее модулям.
• Kernel-HOWTO (The Linux Kernel HOWTO) – описание конфигурирования и компиляции ядра (см. гл. 13).Глава 17 DNS
DNS – это Доменная Система Имен (Domain Name System). DNS преобразует символические имена машин в IP-адреса и наоборот – из IP-адреса в символическое имя. Для чего это нужно? Во-первых, человеку легче запомнить осмысленное имя – типа vasya.ru чем 195.66.195.42, а для компьютера проще передать четыре байта адреса, чем 50–60 байтов имени. Во-вторых, за одним и тем же IP-адресом могут скрываться сотни различных доменов. Когда-то, на заре эры глобальных сетей, все пары «имя-IР-адрес» хранились в файле /etc/hosts. Со временем, когда компьютеров в сети стало тысячи и десятки тысяч, эти файлы превратились в монстров, на смену которым пришли DNS-серверы.
DNS-сервер представляет собой базу данных, в которой для тысяч компьютеров хранится соответствие символического имени компьютера IP-адресу. В сети существуют десятки тысяч серверов DNS, которые обмениваются информацией с другими серверами DNS.
DNS – это иерархическая система. Вершина записывается как"." (точка) и произносится как root (корень). В корне существует некоторое количество доменов верхнего уровня (Top Level Domains, TLDs), наиболее известными из которых являются ORG, COM, EDU, GOV, MIL, NET, RU, UA и т. п.
При поиске машины запрос обрабатывается рекурсивно, начиная с корня. Если нужно найти адрес машины user.ogpu.odessa.ua, то ваш сервер имен должен найти сервер имен, который обслуживает иа. Он запрашивает корневой сервер (.), который выдает список серверов иа. Из полученного списка выясняется, какие серверы имен обслуживают иа. Затем запрашивается сервер (выбирается по определенному алгоритму или берется первый в полученном списке) чтобы узнать, какие серверы обслуживают odessa.ua. Затем берется сервер из полученного списка и выясняется, кто обслуживает ogpu.odessa.ua, и уже у этого сервера узнается IP-адрес компьютера user.ogpu.odessa.ua. А чтобы в следующий раз не повторять этот поиск, полученную пару "имя—IP-адрес" ваш сервер DNS сохраняет в своей базе данных.
В том случае, если необходимо по IP-адресу узнать имя компьютера, опять используется DNS-сервер. Для этих целей существует псевдодомен in-addr.arpa и в нем точно так же прописываются адреса, только порядок следования цифр обратный. Например, для адреса 195.66.195.22 запрос получится как к 22.195.66.195.in-addr.aipa, а схема поиска ответа остается такая же.
По своим функциональным обязанностям различают два вида DNS-серверов – обычный и кэширующий.
• Кэширующий сервер DNS используется для локального хранения запрошенных пользователем пар «имя—IP-адрес», что при интенсивном общении со многими Web-серверами позволяет экономить время на DNS-запросах. Кэширующий сервер не отвечает на внешние DNS-запросы.
• обычный сервер DNS – это полнофункциональный сервер, позволяющий получать, передавать и синхронизировать DNS-данные с другими DNS-серверами.
Настройка сетевых параметров
Поскольку настройка (и функционирование) DNS-сервера затрагивает практически все сетевые параметры, работоспособность DNS-сервера зависит от правильной конфигурации сети. В современных дистрибутивах, если вы выбрали «устанавливать DNS-сервер», конфигурирование его производится автоматически. Однако разработчик дистрибутива рассчитывает на абстрактную среднестатистическую систему, которой, как показывает практика, не существует. Поэтому следует убедиться, что с сетевыми настройками у вас все в порядке.
host.conf
Следующая запись в файле host.conf означает, что при поиске хостов система сначала посмотрит в /etc/hosts, а потом только обратится к серверу DNS:
order hosts,bind
/etc/hosts
В этом файле должны находиться пары «IP-адрес—имя»:127.0.0.1 localhost localhost.localdomain
192.168.0.1 user
192.168.0.2 user2Причем обязательно должна присутствовать следующая строка:
127.0.0.1 localhost localhost.localdomain
/etc/resolf.conf
В этом файле должны находиться строки, подобные приведенным: