RSS
 

Как быстро собрать, обновить ядро CentOS.

16 Дек

3dCentosLogo_by_atti-simon

В этой статье описано как просто и быстро пересобрать или обновить ядро для CentOS и сделать rpm пакет.

1. Устанавливаем необходимые rpm пакеты.
yum install ncurses-devel gcc gcc-c++ make rpm-build m4 redhat-rpm-config unifdef

2. Скачиваем исходники ядра.
Исходники ядра для CentOS 5 можно найти в репозитариях.
http://mirror.yandex.ru/centos/5/updates/SRPMS/
http://mirror.centos.org/centos/5/os/SRPMS/
http://mirror.centos.org/centos/5/updates/SRPMS/

3. Устанавливаем rpm пакет в /usr/src/redhat.
На момент написания статьи последней была версия Linux 2.6.18-92.1.13.
rpm -i kernel-2.6.18-92.1.13.el5.src.rpm

4. Распаковываем исходный код ядра Linux.
rpmbuild -bp --target=`uname -m` kernel-2.6.spec

5. Настраиваем новую конфигурацию ядра Linux.
Копируем конфигурационный файл ядра.
cd \
/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
cp configs/kernel-2.6.18-`uname -m`.config .config

Изменяем конфигурацию ядра.
make menuconfig
В первую строку нового конфигурационного файла .config добавляем тип платформы, под которую собираем ядро.
vim .config
Для i386 добавляем
# i386
Для x86_64 добавляем
# x86_64
Копируем созданный файл обратно в папку configs.
cp .config configs/kernel-2.6.18-`uname -m`.config
cp configs/* \
/usr/src/redhat/SOURCES/

6. Редактируем spec файл.
vim /usr/src/redhat/SPECS/kernel-2.6.spec

в 23 строчке изменить:
%define with_debug %{?_without_debug: 0} %{!?_without_debug: 1}
на
%define with_debug 0

в 29 строчке изменить:
%define with_debuginfo %{?_without_debuginfo: 0} %{!?_without_debuginfo: 1}
на
%define with_debuginfo 0

в 32 строчке изменить:
%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1}
на
%define with_kabichk 0

в 69 строчке можно добавить собственный идентификатор ядра:
%define buildid .your_identifier

с 4779 строчки необходимо закомментировать 26 строк:
#if a rhel kernel, apply the rhel config options
#%if 0%{?rhel}
#  for i in %{all_arch_configs}
#  do
#   mv $i $i.tmp
#   $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-rhel-generic $i.tmp > $i
#   rm $i.tmp
#  done
#%ifarch ppc64 noarch
#  #CONFIG_FB_MATROX is disabled for rhel generic but needed for ppc64 rhel
#  for i in kernel-%{kversion}-ppc64.config
#   do
#   mv $i $i.tmp
#   $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-rhel-ppc64-generic #$i.tmp > $i
#   rm $i.tmp
#  done
#%endif
#%endif
#if a olpc kernel, apply the olpc config options
#%if 0%{?olpc}
#  for i in %{all_arch_configs}
#   do
#   mv $i $i.tmp
#   $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-olpc-generic $i.tmp > $i
#   rm $i.tmp
#  done
#%endif

в 5021 строчке изменить:
%_sourcedir/kabitool -b . -d %{_tmppath}/kernel-$KernelVer-kabideps -k $KernelVer -w $RPM_BUILD_ROOT/kabi_whitelist
на
# %_sourcedir/kabitool -b . -d %{_tmppath}/kernel-$KernelVer-kabideps -k $KernelVer -w $RPM_BUILD_ROOT/kabi_whitelist

после строчки 5055 небходимо добавить строку
touch symsets-$KernelVer.tar.gz
if [ -e $RPM_BUILD_ROOT/Module.kabi ]; then
#  mv $RPM_BUILD_ROOT/Module.kabi $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
fi
cp symsets-$KernelVer.tar.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
меняется на
if [ -e $RPM_BUILD_ROOT/Module.kabi ]; then
mv $RPM_BUILD_ROOT/Module.kabi $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
fi
touch symsets-$KernelVer.tar.gz
cp symsets-$KernelVer.tar.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

7. Собираем ядро.
cd /usr/src/redhat/SPECS/
rpmbuild -bb --target=`uname -m` \
--with baseonly kernel-2.6.spec

Вот и все :).

 
  1. Обновление ядра до версии 2.32

    02.03.2011 at 11:16 дп

    Добрый день!
    Скажите пожалуйста, как обновить ядро до версии 2.32, у меня ядро версии 2.18…
    В вашем примере Вы обновляете ядро только до версии 2.6.18-92.1.13, и даже в репозитариях которые Вы указали старые версии ядер. Хочу установить ipt_netflow, а ему нужна версия ядра 2.30.

     
  2. admin

    02.03.2011 at 12:53 пп

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

     
  3. admin

    02.03.2011 at 12:56 пп

    olemskoi.ru
    Обновляем ядро CentOS 5 на 2.6.36 (перепечатка)

    Комментариев нет

    Если у Вас есть необходимость использовать более «свежее» ядро чем идет в дистрибутиве, можно воспользоваться репозиторием elrepo

    Устанавливаем репозиторий rpm -ihv http://elrepo.org/linux/elrepo/el5/i386/RPMS/elrepo-release-5-1.el5.elrepo.noarch.rpm

    Включаем репозиторий поставив enabled=1 в /etc/yum.repos.d/elrepo.repo [elrepo-kernel] name=ELRepo.org Community

    Enterprise Linux Kernel Repository — el5 baseurl=http://elrepo.org/linux/kernel/el5/$basearch/ http://elrepo.reloumirrors.net/kernel/el5/$basearch/ http://mirror.solvention.de/elrepo.org/linux/kernel/el5/$basearch/ http://ftp.ines.lug.ro/elrepo/kernel/el5/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0

    Устанавливаем ядро yum install kernel-ml Loaded plugins: fastestmirror Loading mirror […]

     
  4. Обновление ядра до версии 2.32

    02.03.2011 at 4:31 пп

    Спасибо!
    Сегодня проверю, надеюсь что получится обновить…

     
  5. Обновление ядра до версии 2.32

    02.03.2011 at 6:15 пп

    Обновил как Вы написали, вот что получилось:
    [root@localhost ~]# cat /proc/version
    Linux version 2.6.18-194.32.1.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jan 5 17:53:09 EST 2011
    Кажется не обновилось

     
  6. Обновление ядра до версии 2.32

    02.03.2011 at 7:33 пп

    Извините, ядро обновилось… УРА УРА УРА
    Я просто не выбрал в грубе с какого ядра грузится )))
    Груб грузит старое ядро, новое надо выбрать

     
  7. Обновление ядра до версии 2.32

    02.03.2011 at 7:34 пп

    Версия ядра стало аж 2.6.37 )))))))))))

     
  8. admin

    03.03.2011 at 4:16 пп

    Поздравляю :)) !!