Чтение онлайн

ЖАНРЫ

Стахнов Алексей Александрович

Шрифт:

Глава 16 Обновление и компиляция ядра

Системный администратор рано или поздно сталкивается с необходимостью обновления ядра операционной системы Linux. И возникает дилемма – искать новое ядро операционной системы в виде инсталляционного пакета или самостоятельно скомпилировать его из исходных текстов.

Рассмотрим более простой вариант – обновление ядра операционной системы Linux из пакета RPM, созданного специалистами фирмы Red Hat.

Обновление ядра операционной системы Linux

Мир не без добрых людей. Как правило, почти все производители дистрибутивов Linux производят выпуск обновленных пакетов программ, в том числе и ядра операционной системы. Это, правда, происходит с некоторой временной задержкой, да и не всегда в инсталляционных пакетах выходят все версии ядра операционной системы.

Дальнейшее описание процесса обновления ядра операционной системы будет основываться на документе "Red Hat Linux 7.2 The Official Red Hat Linux Customization Guide".

Подготовка к обновлению

ядра операционной системы

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

Прежде чем создать загрузочную дискету, надо выяснить, какая версия ядра установлена в вашей операционной системе. Самый канонический способ – выполнить следующую команду:

uname -r

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

/sbin/mkbootdisk kernelversion

где kernelversion – версия ядра, полученная с помощью команды uname.

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

Следующим этапом подготовки будет определение всех установленных пакетов, относящихся к ядру операционной системы. Для этого выполним команду:

rpm -qa | grep kernel

В результате вы получите что-то подобное:

kernel-headers-2.4.7–3

kernel-2.4.7–3

kernel-source-2.4.7–3

kernel-doc-2.4.7-3

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

• для обновления ядра операционной системы – загружаем только kernel-2. 4. XX.;

• для перекомпилирования ядра операционной системы – необходимо загрузить пакеты kernel-headers-2.4.хх, kernel-source-2.4.хх.

Загрузку необходимых пакетов можно осуществить напрямую с FTP-сервера. Список доступных зеркал находится по адресу www.redhat.com/download/mirror.html

Обновление ядра операционной системы

Теперь, когда все необходимые пакеты получены, можно приступать к обновлению ядра операционной системы. Выполнить это можно двумя способами:

• командой rpm -Uvh kernel-2.4.хх. i386.rpm – обновить ядро операционной системы;

• командой rpm ivh kernel-2.4.хх. i386.rpm – установить понос ядро операционной системы.

Второй способ позволит в случае, если новое ядро вызывает проблемы, безболезненно «откатиться» (roll back, downgrade) на старое ядро операционной системы.

Аналогично обновляются пакеты с исходными текстами ядра операционной системы Linux.

Для проверки обновления ядра выполните следующую команду:

Is -l /boot

Вы должны увидеть следующий файл: vmlinuz-2.4jcc.

После обновления ядра операционной системы необходимо осуществить конфигурирование загрузчика (boot loader).

Конфигурирование загрузчика

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

...

Предупреждение

Будьте предельно внимательны во время конфигурирования загрузчика – если вы ошибетесь, операционная система Linux не сможет загрузиться. В этом случае придется воспользоваться заблаговременно созданной загрузочной дискетой и внимательно переконфигурировать загрузчик.

В дистрибутиве Red Hat Linux 7.2 существует возможность при инсталляции выбрать устанавливаемый загрузчик – GRUB или LILO. Поэтому рассмотрим конфигурирование обоих загрузчиков.

GRUB

Если у вас установлен загрузчик GRUB, вы должны отредактировать файл /boot/grub/grub.conf.

Типичный конфигурационный файл GRUB приведен ниже:

# NOTICE: You have a /boot partition. This means that

# all kernel paths are relative to /boot/

default=0

timeout=30

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.7–3)

root (hd0,0)

kernel /vmlinuz-2.4.7–3 ro root=/dev/hda3

initrd /initrd-2.4.7–3.img

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

# NOTICE: You have a /boot partition. This means that

# all kernel paths are relative to /boot/

default=0

timeout=30

splashimage=(hd0,0)/grub/splash.xpm.gz

title My new kernel (2.4.12)

root (hd0,0)

kernel /vmlinuz-2.4.12 ro root=/dev/hda3

initrd /initrd-2.4.12.img

title Red Hat Linux (2.4.7–3)

root (hd0,0)

kernel /vmlinuz-2.4.7–3 ro root=/dev/hda3

initrd /initrd-2.4.7–3.img

После редактирования конфигурационного

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

2. Убедившись, что загрузка происходит без эксцессов и система функционирует нормально, удалите из конфигурационного файла описание старой версии ядра.

LILO

Конфигурирование LILO в целом похоже на конфигурирование GRUB. Конфигурационный файл LILO находится по адресу /etc/lilo.conf.

Типичный файл /etc/lilo.conf похож на тот, что приведен ниже:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

message=/boot/message

linear

default=linux

image=/boot/vmlinuz-2.4.7–3

label=linux

initrd=initrd-2.4.7–3.img

read-only

root=/dev/hda5

Аналогично GRUB, модернизацию конфигурационного файла LILO производим в два этапа. 1. Сначала получим файл, где прописаны оба ядра – старое и новое:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

message=/boot/message

linear

default=linux

image=/boot/vmlinuz-2.4.12

label=new Linux kernel

initrd=initrd-2.4.12.img

read-only

root=/dev/hda5

image=/boot/vmlinuz-2.4.7–3

label=Linux

initrd=initrd-2.4.7–3.img

read-only

root=/dev/hda5

Для того чтобы внесенные в конфигурационный файл изменения вступили в силу, необходимо выполнить следующую команду: /sbin/lilo. Если все в порядке, на экране появятся следующие строки:

Added linux * Added new Linux kernel

Символ * после linux обозначает, что секция, помеченная как linux, является загружаемой по умолчанию.

2. Проверьте, как функционирует новое ядро. Если проблем нет – уберите из конфигурационного файла LILO секцию, относящуюся к старому ядру.

Компиляция ядра операционной системы Linux

Ядро операционной системы Linux может быть двух типов – монолитное и модульное.

Модульное ядро — это такое ядро, где драйверы почти всех устройств не вкомпилированы в него, а содержатся во внешних модулях, загружаемых по мере необходимости. С одной стороны, это несколько замедляет работу ядра, а с другой – нет необходимости пересобирать ядро при установке какого-нибудь нового аппаратного устройства.

Монолитное ядро — это ядро, в котором все необходимые драйверы в него вкомпилированы. Недостатком такого ядра является необходимость пересобирать ядро операционной системы при появлении новых аппаратных устройств, а достоинством – сравнительно небольшой объем ядра операционной системы и повышенная ее производительность. Мы рассмотрим компиляцию и модульного ядра, и монолитного.

Для чего пересобирают ядро? Каковы аргументы «за» и "против"?

«За» компиляцию ядра операционной системы

Рассмотрим аргументы «за».

• Основная причина для самостоятельной компиляции ядра – выход новых версий ядра операционной системы Linux. Как правило, в новых версиях добавляются новые функциональные возможности и исправляются замеченные ошибки. К сожалению, большинство сборщиков дистрибутивов отстают в выпусках «фирменных» ядер операционной системы, а иногда даже делают доступным новую версию ядра операционной системы только с выходом новой версии дистрибутива.

• Пересборка ядра используется для оптимизации ядра операционной системы Linux конкретно под имеющийся набор аппаратных средств – процессора, чипсета материнской платы, контроллеров, сетевых плат, видеокарт и т. п.

• Компиляцию ядра осуществляют так же для включения специфических свойств ядра , которые появляются в нем после наложения специальных «заплаток» – (патчей), разрабатываемых отдельными программистами или группами. Обычно эти свойства связаны с безопасностью системы или с функционированием экзотических аппаратных средств. Наиболее известен вариант «альтернативного» ядра от Алана Кокса (Alan Кох).

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

«Против» компиляции ядра операционной системы

Против компиляции ядра операционной системы есть столько же пунктов (если не больше), сколько и «за».

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

• При неправильно сконфигурированном или неверно установленном новом ядре операционной системы (это вытекает из предыдущего пункта) получаем проблемы вплоть до полной потери работоспособности операционной системы.

• Это противоречит принципу "работает – не трогай". Если ядро операционной системы работает устойчиво и его функционирование всех удовлетворяет – зачем его компилировать?

• Если вы решили уменьшить объем ядра операционной системы, изъяв все лишнее, не забудьте: почти все свойства ядра операционной системы вынесены в загружаемые модули, поэтому сэкономить удастся только пятьдесят-сто килобайт.

Поделиться с друзьями: