L  i  n  u  x    P  a  r  k
при поддержке ВебКлуба
Назад Оглавление Вперед

Глава 5 Конфигурирование и создание оптимизированных, безопасных ядер (Часть 2)

В это главе
Ядро Linux
Создание аварийных загрузочных дискет
Безопасность ядра
Компиляция ядра
Инсталляция нового ядра
Удаление программ, файлов и строк связанных с модулями
Создание новой аварийной дискеты
Создание аварийного загрузочного флоппи-диска
Обновление ⌠/dev■ входов

Инсталляция нового ядра.

1. Копируйте ⌠/usr/src/linux/arch/i386/boot/bzImage■ из дерева исходных кодов ядра в каталог ⌠/boot■ и дайте ему новое имя.

[root@deep linux]# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-kernel.version.number

Замечание. Я рекомендую название подобное vmlinuz-2.2.14, потому что если вы хотите создать новый спасательный или загрузочные диски при помощи mkbootdisk, то она требует некоторой точности, например vmlinuz-2.2.14 вместо vmlinuz-2.2.14.a

2. Копируйте ⌠/usr/src/linux/System.map■ из дерева исходных кодов ядра в каталог ⌠/boot■ и дайте ему новое имя.

[root@deep linux]# cp /usr/src/linux/System.map /boot/System.map-kernel.version.number

3. Переместитесь в каталог /boot и создайте символические ссылки vmlinuz и System.map.

[root@deep linux]# cd /boot
[root@deep /boot]# ln -fs vmlinuz-kernel.version.number vmlinuz
[root@deep /boot]# ln -fs System.map-kernel.version.number System.map

Мы должны пересоздать ссылки ⌠vmlinuz■ и ⌠System.map■ на новую версию ядра. Иначе lilo будет использовать старое ядро.

4. Удалите устаревшие и ненужные файлы из каталога ⌠/boot■, чтобы освободить место на диске:

[root@deep /boot]# rm -f module-info
[root@deep /boot]# rm -f initrd-2.2.xx.img

⌠module-info■ это ссылка на каталог с модулями к старому ядру. Так как мы инсталлируем новое ядро, мы не нуждаемся в потерянных ссылках. Файл ⌠initrd-2.2.xx■ содержит инициализационный образ RAM диска, который выступает как система пока не будут доступны диски. Этот файл будет существовать и будет инсталлирован в ходе установки сервера, если вы имеете SCSI диск. Все необходимые драйвера сейчас встроены в ваше монолитное ядро, поэтому спокойно удаляйте этот файл.

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

Помните, что мы должны создать три символические ссылки в ⌠/usr/include■, которые являются точками входа в заголовочные файлы ядра Linux. Каталог ⌠/usr/include■ содержит все заголовочные файлы вашей системы, которые нужны для компиляции новых программ. Ссылки asm, linux и scsi используются когда программам нужно знать некоторые функции времени компиляции ядра инсталлированного на вашей системе. Программы вызывают другие заголовочные файлы из каталога ⌠include■ когда им нужна специальная информация, зависимости и т.д.

[root@deep /]# mkdir -p /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/asm-generic /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/asm-i386 /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/linux /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/net /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/video /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/scsi /usr/src/linux-2.2.14/include
[root@deep /]# rm -rf /usr/src/linux
[root@deep /]# cd /usr/src
[root@deep src]# ln -s /usr/src/linux-2.2.14 linux

Первое, мы создаем новый каталог ⌠linux-2.2.14■, базирующийся на версии ядра, которое мы инсталлируем для более легкой интерпретации, затем мы копируем туда каталоги asm-generic, asm-i386, linux, net, video, и scsi из ⌠/usr/linux/include■. После этого мы удаляем каталог в котором компилировали новое ядро и создаем в ⌠/usr/src■ ссылку ⌠linux■, указывающую на ⌠linux-2.2.14■. Последний шаг позволяет сэкономить место на диске. Ядро в разархивированном виде занимает около 75M, а каталоги ⌠include■ √ 3M.

6. В заключении нам необходимо редактировать файл ⌠/etc/lilo.conf■, чтобы сделать новое ядро, загружаемым по уолчанию.

Шаг 1.

Редактируем файл lilo.conf (vi /etc/lilo.conf) и делаем соответствующие изменения в линии ⌠image=/boot/■:

[root@deep /]# vi /etc/lilo.conf
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00
restricted
password=somepasswd
image=/boot/vmlinuz-kernel.version.number #(добавьте здесь имя вашего нового ядра).
label=linux
root=/dev/sda6
read-only

Замечание. Не забудьте удалить строку ⌠initrd=/boot/initrd-2.2.12-20.img■, так как она нам больше ну нужна.

Шаг 2.

Когда имя нового ядра было внесено в файл ⌠/etc/lilo.conf■, как это было описано выше, мы должны дать следующие команды, чтобы изменения вступили в силу:

[root@deep /]# /sbin/lilo -v
LILO version 21, [Copyright 1992-1998 Werner Almesberger
Reading boot sector from /dev/sda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.2.14
Added linux *
/boot/boot.0800 exits √ no backup copy made.
Writing boot sector.

ВАЖНОЕ ЗАМЕЧАНИЕ: Если вы сказали No на вопрос ⌠Unix98 PTY support (CONFIG_UNIX98_PTYS)■ во время конфигурирования ядра, то отредактируйте файл ⌠/etc/fstab■ и удалите следующую строку:

none 	/dev/pts 	devpts 	gid=5,mode=620	 0 0

Удаление программ, файлов и строк связанных с модулями.

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

Шаг 1.

kmod и другие программы, управляющие модулями, включенные в RPM пакет ⌠modutils■ используют файл ⌠conf.modules■, который находится в каталоге ⌠/etc■. В этом файле определяется, например, какие Ethernet карты вы имеете и какие параметры настройки она использует. Так как мы не используем модулей в нашем новом ядре, мы удаляем файл ⌠conf.modules■ и полностью деинсталлируем пакет ⌠modutils■.

[root@deep /]# rm -f /etc/conf.modules
[root@deep /]# rpm -e --nodeps modutils

Шаг 2.

Теперь необходимо редактировать файл ⌠rc.sysinit■ и закомментировать все строки, в которых упоминается ⌠depmod -a■, вставив в их начало символ ⌠#■. Это нужно потому, что при загрузке система читает скрипт ⌠rc.sysinit■ для поиска модульных зависимостей.

Под Red Hat Linux 6.1

Комментируем строку 260 в rc.sysinit file (vi +260 /etc/rc.d/rc.sysinit):

if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

должна читаться:

#if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

Комментируем строки с 272 по 277 в rc.sysinit file (vi +272 /etc/rc.d/rc.sysinit):

if [ -L /lib/modules/default ]; then
INITLOG_ARGS= action "Finding module dependencies" depmod -a default
else
INITLOG_ARGS= action "Finding module dependencies" depmod -a
fi
fi

должны читаться:

# if [ -L /lib/modules/default ]; then
# INITLOG_ARGS= action "Finding module dependencies" depmod -a default
# else
# INITLOG_ARGS= action "Finding module dependencies" depmod -a
# fi
#fi

ЗАМЕЧАНИЕ: Процедура описанная выше связана с пакетом initscripts-4_70-1 package дистрибутива Red Hat Linux 6.1.

Под Red Hat Linux 6.2

Комментируем строку 243 в rc.sysinit file (vi +243 /etc/rc.d/rc.sysinit):

if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

должна читаться:

#if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

Комментируем строки с 255 по 260 в rc.sysinit file (vi +255 /etc/rc.d/rc.sysinit):

if [ -L /lib/modules/default ]; then
INITLOG_ARGS= action "Finding module dependencies" depmod -a default
else
INITLOG_ARGS= action "Finding module dependencies" depmod -a
fi
fi

должны читаться:

# if [ -L /lib/modules/default ]; then
# INITLOG_ARGS= action "Finding module dependencies" depmod -a default
# else
# INITLOG_ARGS= action "Finding module dependencies" depmod -a
# fi
#fi

Замечание. Еще раз повторим, вся эта часть (⌠Удаление программ, файлов и строк связанных с модулями.■) требуется только если вы ответили No на вопрос ⌠Enable loadable module support (CONFIG_MODULES)■ при конфигурировании ядра.

Шаг 3.

Когда система перезагрузится и вы подключитесь к серверу, проверьте версию используемого ядра:

[root@deep /]# uname -a
Linux deep.openna.com 2.2.14 #1 Mon Jan 10 10:40:35 EDT 2000 i686 unknown
[root@deep]#

Поздравляем.

Создание новой аварийной дискеты

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

Подключитесь к системе, вставьте новую дискету и выполните следующую команду:

[root@deep /]# mkbootdisk --device /dev/fd0 2.2.14
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press <Enter> to continue or ^C to abort:

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

Создание аварийного загрузочного флоппи-диска.

Так как создать спасательную дискету можно только с модульными ядрами, мы должны найти другой путь загрузки системы с дискеты если ядро на жестком диске испорчено. Это возможно с помощью аварийной загрузочной дискеты. Вы должны создать ее немедленно после первой удачной загрузки системы и подключения к ней как root.

Для создания аварийной загрузочной дискеты сделайте следующее:

Шаг 1.

Вставьте дискету и форматируйте ее, используя команду:

[root@deep /]# fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done

Шаг 2.

Копируйте файл vmlinuz из каталога ⌠/boot■ на дискету:

[root@deep /]# cp /boot/vmlinuz /dev/fd0
cp: overwrite `/dev/fd0'? y

vmlinuz √ это символическая ссылка на реальной ядро.

Шаг 3.

Определяем корневой раздел ядра:

[root@deep /]# rdev
/dev/sda12 /

Корневой раздел ядра √ это раздел, где находится корневая файловая система. В этом примере, корневой раздел - ⌠dev/sda12■; на вашей системе это имя может быть другим.

Шаг 4.

Устанавливаем корневой раздел ядра:

[root@deep /]# rdev /dev/fd0 /dev/sda12

В качестве корневого раздела ядра используется значение полученной на предыдущем шаге.

Шаг 5.

Маркируем корневой раздел как только для чтения:

[root@deep /]# rdev -R /dev/fd0 1

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

Шаг 6.

Вставьте загрузочную дискету в дисковод A: и перезагрузите систему:

[root@deep /]# reboot

Обновление ⌠/dev■ входов

Если вы добавили новое устройство в вашу систему или провели крупное обновление ядра (например, из версии 2.2.9 к 2.2.15), то необходимо обновить ваши входы в ⌠/proc■ для предотвращения проблем с потерянными устройствами. Мы можем решить эту задачу при помощи скрипта MAKEDEV. Он сканирует каталог ⌠/proc■, где все устройства связываются с драйверами ядра. Специальная опция ⌠update■ позволяет утилите MAKEDEV создать новые

устройства, которые вы сконфигурировали в вашем ядре и удалить ненужные.

Для обновления входов в ⌠/proc■ выполните следующие команды:

[root@deep /]# cd /dev [root@deep /dev]# ./MAKEDEV update


Назад Оглавление Вперед