Created by JohnnyHughes. Currently maintained by AlanBartlett and AkemiYagi.
1. Maybe you do not need the full kernel source
If you need to compile a kernel driver (module), the chances are you do not really need to install the full kernel source tree. You might just need to install the kernel-devel package. (If, however, you are certain that the full source tree is required, please follow the instructions in Section 2.)
(Note that CentOS-7 32-bit is available through the AltArch i386 SIG.)
You can install the kernel-devel package by:
[root@host]# yum install kernel-devel
If your kernel is not listed by yum because it is in an older tree, you can download it manually from the CentOS Vault.
Look in either the 7.N.YYMM/os/x86_64/Packages/ or the 7.N.YYMM/updates/x86_64/Packages/ directories for the kernel-devel- version.x86_64.rpm
Once you have the proper kernel[-type]-devel- version.arch.rpm package installed, try to compile your module. It should work that way. If it does not, please provide feedback to the module’s developer as this is the way all new kernel modules should be designed to be built.
2. If you really need the full kernel source
If you really must have the kernel source tree, for whatever reason, it is obtainable.
As an ordinary user, not root, create a build tree based on a ~/rpmbuild/ directory:
Now that the source package and tools are installed, unpack and prepare the source files:
[user@host]$ cd ~/rpmbuild/SPECS [user@host SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
The value of $(uname -m) sets the target to the architecture of your current kernel. This is generally accepted, as most people will need either i686 or x86_64 as the target.
The kernel source tree will now be found under the ~/rpmbuild/BUILD/kernel*/linux*/ directory.
Before starting kernel compilation, make sure your system has more than 25GB of free space on the file system. To confirm, you can check the file system free space using df command as shown.
Now compile and install the kernel and modules using following commands (it may take several hours). The compilation process place files under /boot directory and also make a new kernel entry in your grub.conf file.
# make bzImage # make modules # make # make install # make modules_install
Once the compilation completes, reboot the system and verify newly installed Kernel.
That’s it. I hope this article will be much helpful to you all. If you’re facing any problems or difficulties while compiling or installing kernel feel free to ask or post your questions using our comment form below.
Ядро операционной системы является основным ее элементом — оно выполняет функции распределения ресурсов и предоставления интерфейса для взаимодействия с оборудованием. Из соображений безопасности или обеспечения корректной работы современного оборудования может возникнуть необходимость обновления ядра.
1. Проверка текущей версии ядра
Перед обновлением необходимо убедиться, что текущая версия ядра уже не обновлена. Это выполняется командой:
* в данном примере установлено ядро версии 3.10.0.
2. Установка ядра
Перед обновлением ядра, необходимо обновить саму систему:
После стоит перезагрузить систему:
Далее у нас на выбор два способа обновления ядра — с использованием репозитория или вручную, скачав исходник с kernel.org.
С помощью yum
Самый быстрый и безопасный способ обновить ядро CentOS — воспользоваться автоматической установкой из репозитория. Минусом тут является то, что можно установить только ту версию, которая имеется в наличие в данном репозитории.
Последняя версии ядра для CentOS находится в репозитории ELRepo (не путать с EPEL). Сначала устанавливаем его.
Переходим на веб-страницу elrepo.org и копируем ссылку на последнюю версию репозитория для нашей версии операционной системы, например:
* список установленных репозиториев можно посмотреть командой yum repolist.
Теперь можно установить ядро:
yum —enablerepo=elrepo-kernel install kernel-ml
Ручное обновление
Чаще всего, администратор пользуется встроенными в сборку Linux инструментами (как описано выше) — это безопаснее и проще. Однако, если нужной версии ядра нет в репозитории или мы хотим установить тестовую версию, необходима ручная установка.
Ручная установка неадаптированного для определенной сборки Linux ядра — потенциальный риск для системы. Обновление стоит проводить сначала в тестовой среде, а также выполнить резервное копирование всех важных данных.
Для начала переходим на сайт kernel.org и копируем ссылку на нужную версию ядра Linux:
* в данном примере мы скопировали ссылку на нестабильную версию ядра 5.0.
Воспользовавшись ссылкой, скачиваем ядро на компьютер с Linux:
* если система вернет ошибку, нужно установить wget — yum install wget.
Распаковываем скачанный архив:
tar -xvf linux-5.0-rc8.tar.gz -C /usr/src
* в данном примере мы распаковываем архив linux-5.0-rc8.tar.gz в каталог /usr/src.
Переходим в каталог, куда распаковали исходник ядра:
Устанавливаем инструменты для компиляции пакетов:
yum groupinstall «Development Tools»
yum install ncurses-devel openssl-devel bc
Создаем свою конфигурацию для ядра:
Или используем текущую конфигурацию для ядра:
На все вопросы, которые задает система можно отвечать нажатием Enter, чтобы принимать значения по умолчанию.
* процедура может занять много времени.
После устанавливаем ядро и модули:
make modules_install install
3. Применение нового ядра
Хорошей идеей после установки нового ядра будет его проверка. Перезагружаем систему и в окне со списком вариантов загрузки, выбираем с использованием нового ядра.
После загрузки системы тестируем ее, и если все работает, корректно, настраиваем систему на автоматический выбор нужной нам версии.
Чтобы система грузилась с использованием нового ядра, необходимо внести изменения в GRUB:
* данной настройкой мы говорим загрузчику использовать первое ядро для загрузки (первым идет последнее по версии ядро).
Применяем настройки для grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
Можно перезагружать компьютер:
После загрузки проверяем текущую версию ядра:
Если система не загружается после обновления ядра
При установке новой версии ядра, старые версии тоже сохраняются и их можно выбрать при загрузке CentOS.
Если управление осуществляется удаленно по SSH, мы должны подключить монитор к компьютеру и включить его. В процессе загрузки выскочит окно со списком систем:
Выбираем вариант загрузки с предыдущей версией ядра.
Удаление ядра
Рассмотрим несколько сценариев удаления ядра.
1. Удалить конкретную версию.
Выводим список ядер, установленных в системе:
Удаляем ядро командой, на подобие:
yum remove kernel-ml-5.17.6-1.el7.elrepo.x86_64
* где kernel-ml-5.17.6-1.el7.elrepo.x86_64 — ядро в системе, которое будет удалено.
Важно загрузить систему под другой версией ядра, чтобы при удалении не возникло проблем.
2. Чистка системы от устаревших версий ядер.
Мы можем удалить ядра, которые устарели в нашей системе. Для жтого нам нужна утилита yum-utils:
package-cleanup —oldkernels —count=2
* в данном примере мы удалим все ядра, оставив по версии последних два.
Возможные ошибки
1. Фатальная ошибка: : Нет такого файла или каталога.
Причина: в системе не установлен один из пакетов, содержащий необходимые библиотеки.
Решение: необходимо воспользоваться поисковиком, чтобы определить, какой именно пакет необходим для продолжения установки и воспользоваться командой yum install для его установки.
Причина: как и с предыдущей ошибкой, в системе не установлен один из пакетов, содержащий необходимые библиотеки.
Решение: аналогично предыдущему примеру решения проблемы, необходимо воспользоваться поисковиком, чтобы определить, какой именно пакет необходим для продолжения установки и воспользоваться командой yum install для его установки.