CentOS: замена ядра 2.6 на 3.10

Автор: | 23/10/2014
 

centos-logo-new-4Система:

# cat /etc/redhat-release
CentOS release 6.5 (Final)

Текущее ядро:

# uname -r
2.6.32-431.29.2.el6.i686

Ядро 3.10 было выбрано, т.к. оно используется в CentOS 7. См. также тут>>>.

1. Зависимости

Для сборки и компиляции ядра 3.10 нам понадобятся:

  • GCC последней версии;
  • пакет Ncurses;
  • обновление всех текущих пакетов до последней версии;

Устанавливаем зависимости, если их нет, и обновляем остальные пакеты:

# yum install gcc ncurses ncurses-devel
# yum -y update

2. Загрузка исходных кодов

Качаем исходники ядра с сайта https://www.kernel.org:

# cd /tmp
# wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.10.tar.bz2

Распаковываем архив в каталог /usr/src:

# tar xfp linux-3.10.tar.bz2 -C /usr/src/

По завершению – меняем каталог:

# cd /usr/src/linux-3.10/

3. Конфигурирование ядра

Что бы создать новую конфигурацию – выполняем:

# make menuconfig

При использовании Putty – переключите кодировку в UTF-8.

CentOS: замена ядра 2.6 на 3.10

Что бы использовать конфигурацию старого ядра – выполните:

# make oldconfig

Во время настройки будут выдаваться запросы на указание настроек, которых нет в 2.6, и которые появились в 3.10 (и их будет много).

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

# make defconfig
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#

4. Сборка ядра

Теперь пора запустить сборку ядра:

# make
scripts/kconfig/conf --silentoldconfig Kconfig
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
  ...

Пока ядро собирается – можно порассматривать создаваемые объектные файлы:

# objdump -h drivers/acpi/acpica/evhandler.o

drivers/acpi/acpica/evhandler.o:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000307  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000004  00000000  00000000  0000033c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000340  2**2
                  ALLOC
  3 .rodata       0000000a  00000000  00000000  00000340  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .comment      0000002d  00000000  00000000  0000034a  2**0
                  CONTENTS, READONLY
  5 .note.GNU-stack 00000000  00000000  00000000  00000377  2**0
                  CONTENTS, READONLY
# readelf -h drivers/acpi/acpica/evhandler.o
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          968 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         11
  Section header string table index: 8
# nm drivers/acpi/acpica/evhandler.o
00000000 r _acpi_module_name
         U acpi_ev_attach_region
         U acpi_ev_cmos_region_setup
         U acpi_ev_default_region_setup
         U acpi_ev_detach_region
00000000 T acpi_ev_has_default_handler
0000021e t acpi_ev_install_handler
000002a0 T acpi_ev_install_region_handlers
0000002f T acpi_ev_install_space_handler
         U acpi_ev_io_space_region_setup
         U acpi_ev_pci_bar_region_setup
         U acpi_ev_pci_config_region_setup
         U acpi_ev_system_memory_region_setup
         U acpi_ex_cmos_space_handler
         U acpi_ex_data_table_space_handler
         U acpi_ex_pci_bar_space_handler
         U acpi_ex_pci_config_space_handler
         U acpi_ex_system_io_space_handler
         U acpi_ex_system_memory_space_handler
00000000 D acpi_gbl_default_address_spaces
         U acpi_gbl_root_node
         U acpi_ns_attach_object
         U acpi_ns_get_attached_object
         U acpi_ns_validate_handle
         U acpi_ns_walk_namespace
         U acpi_ut_acquire_mutex
         U acpi_ut_create_internal_object_dbg
         U acpi_ut_release_mutex
         U acpi_ut_remove_reference

В процессе сборки есть обозначения:

  CC      net/ipv4/netfilter/ipt_REJECT.o
  CC      net/ipv4/netfilter/ipt_ULOG.o
  LD      net/ipv4/netfilter/built-in.o
  CC [M]  net/ipv4/netfilter/nf_nat_l3proto_ipv4.o
  CC [M]  net/ipv4/netfilter/nf_nat_proto_icmp.o
  LD [M]  net/ipv4/netfilter/nf_nat_ipv4.o

ССC compiler, при компиляции объекта;
LD – линкер;
[M] – модуль ядра.

Сборка завершена:

...
Setup is 13340 bytes (padded to 13824 bytes).
System is 5319 kB
CRC 82fb4151
Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 10 modules
  CC      net/ipv4/netfilter/ipt_MASQUERADE.mod.o
  LD [M]  net/ipv4/netfilter/ipt_MASQUERADE.ko
  CC      net/ipv4/netfilter/iptable_nat.mod.o
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  CC      net/ipv4/netfilter/nf_nat_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_nat_ipv4.ko
  CC      net/netfilter/nf_nat.mod.o
  LD [M]  net/netfilter/nf_nat.ko
  CC      net/netfilter/nf_nat_ftp.mod.o
  LD [M]  net/netfilter/nf_nat_ftp.ko
  CC      net/netfilter/nf_nat_irc.mod.o
  LD [M]  net/netfilter/nf_nat_irc.ko
  CC      net/netfilter/nf_nat_sip.mod.o
  LD [M]  net/netfilter/nf_nat_sip.ko
  CC      net/netfilter/xt_LOG.mod.o
  LD [M]  net/netfilter/xt_LOG.ko
  CC      net/netfilter/xt_mark.mod.o
  LD [M]  net/netfilter/xt_mark.ko
  CC      net/netfilter/xt_nat.mod.o
  LD [M]  net/netfilter/xt_nat.ko

Сборка заняла около 50 минут.

5. Установка ядра и модулей

Выполняем установку.  Тут файл будет помещён  каталог в /boot, и внесены изменения в /boot/grub/grub.conf:

# make modules_install install

На ошибки вида:

ERROR: modinfo: could not find module dm_region_hash
ERROR: modinfo: could not find module dm_log
ERROR: modinfo: could not find module dm_mod

пока не обращаем внимания.

Проверяем установку:

 # ls -l /boot/ | tail -n 4
-rwxr-xr-x. 1 root root  4006368 Jun 19 23:16 vmlinuz-2.6.32-431.20.3.el6.i686
-rwxr-xr-x. 1 root root  4006304 Sep  9 23:38 vmlinuz-2.6.32-431.29.2.el6.i686
-rwxr-xr-x. 1 root root  4002656 Nov 22  2013 vmlinuz-2.6.32-431.el6.i686
-rw-r--r--. 1 root root  5459776 Oct 22 18:38 vmlinuz-3.10.0
# cat /boot/grub/grub.conf | grep "3.10"
title CentOS (3.10.0)
        kernel /vmlinuz-3.10.0 ro root=/dev/mapper/vg_mainhome-lv_root rd_NO_LUKS rd_LVM_LV=vg_mainhome/lv_root rd_LVM_LV=vg_mainhome/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM LANG=en_US.UTF-8 rhgb quiet
        initrd /initramfs-3.10.0.img

Перезапускаем машину:

# shutdown -r now

Broadcast message from root@main-home
        (/dev/pts/2) at 18:42 ...

The system is going down for reboot NOW!

В меню GRUB есть новое ядро:

CentOS: замена ядра 2.6 на 3.10

После загрузки проверяем:

# uname -r
3.10.0

Смотрим dmesg на предмет ошибок, и проверяем версию там:

 # cat /var/log/dmesg | grep "Linux version"
[    0.000000] Linux version 3.10.0 (root@main-home) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Wed Oct 22 18:29:38 EEST 2014

Готово.

Очень полезные ссылки при сборке и настройке ядра:

http://cateee.net
http://www.linux.org