互联网上有大量推荐CentOS系统更新到ELRepo内核的文章和教程,也有不在少数的生产环境服务器被更新为ELRepo内核,但是这种行为明显背离了使用CentOS发行版稳定的初衷,也不符合ELRepo的目标,生产环境使用ELRepo内核也会有明显的隐患。

参考ELRepo About

ELRepo是什么

ELRepo是用于红帽Enterprise Linux发行版的社区仓库。

ELRepo目前专注于硬件相关的软件包,以提高您使用Enterprise Linux的体验。比如包括了存储、网络、图形、硬件监控、声音和网络摄像头驱动程序。

ELRepo所有的软件包都是基于RHEL内核构建的,并且与RHEL内核保持兼容性的重建发行版兼容。ELRepo包与CentOS Stream内核不兼容,与破坏了内核ABI兼容性的重建发行版不兼容。

ELRepo为什么存在

ELRepo的存在是为了满足社区对目前还没有被发行版本身或其他第三方仓库满足的enhance Enterprise Linux软件包的需求。

Enterprise Linux的主要优势之一是它的稳定性。然而,这种稳定性有时意味着发行版内核可能不支持最新的硬件。考虑到在过去几年中主线内核所支持的硬件方面取得的巨大进步,ELRepo的目标是将内核驱动程序反向移植到kABI-tracking kmod包中,以扩展和增强发行版内核的功能。驱动程序可以直接从上游项目(例如,ALSA声音驱动程序),从主线内核(例如,coretemp和it87硬件监控驱动程序)或直接从设备供应商(如Intel或Realtek)反向移植。ELRepo通常能够比Red Hat在RHEL内核中更快地反向移植最新版本的驱动程序。

ELRepo还提供了Red Hat选择在RHEL内核中禁用或不再希望支持或维护的遗留驱动程序。这些遗留驱动程序包括SCSI/SAS存储驱动程序、以太网和WiFi驱动程序。关于RHEL内核中硬件弃用的更多细节可以在这里找到。

谁应该使用ELRepo

如果你的硬件使用正常,那么你就不需要使用ELRepo。

但是,如果你的网络或声音不工作,或者没有检测到你的网络摄像头,那么你可能需要更新驱动程序。也许发行版内核中缺少你需要的功能,例如对文件系统(NTFS、JFS)的支持。所有这些都可以使用驱动程序包来解决,而不必编译一个全新的内核或等待上游为你的设备添加支持。

使用ELRepo内核会面临什么问题

ELRepo内核使用Linux Kernel的long-term和mainline版本源码编译,这些版本没有经过长期验证,可能缺少生产环境需要的运行稳定性。

更新ELRepo内核后,kdump可能无法启动,内核崩溃也就无法生成vmcore文件。

ELRepo内核并不提供debuginfo包,参考http://lists.elrepo.org/pipermail/elrepo-devel/2018-March/000657.html,即使崩溃之后生成了vmcore文件,也没有办法使用crash工具分析原因。

生产环境服务器崩溃后没有办法分析崩溃原因这种事就很让人崩溃。

如何启用kdump及vmcore-dmesg

如果实在想要使用ELRepo内核,还需要尽量在系统崩溃后可以记录崩溃原因,那么至少需要让kdump和vmcore-dmesg工具正常工作,这样在内核崩溃时还可以保留一个vmcore-dmesg.txt可以记录到栈信息。

如果更新ELRepo后kdump服务没有正常启动,可能是因为内核启动参数中crashkernel参数没有正确配置,比如默认安装的Centos7、Centos8内核启动参数中crashkernel=auto在更新内核到6.8后无法正确的保留内存,可以更新/etc/default/grub文件中启动参数,可以参考RHEL相关文档。以4G内存虚拟机为例,可以设置为crashkernel=233M,high crashkernel=72M,low,再运行grub2-mkconfig -o /boot/grub2/grub.cfg更新grub2配置,重启后观察kdump服务情况。

vmcore-dmesg.txt生成依赖/sbin/vmcore-dmesg工具,高版本内核需要对应版本的vmcore-dmesg,使用命令/sbin/vmcore-dmesg /proc/kcore可以测试是否工作正常,如果无法正常工作需要下载并编译新版vmcore-dmesg

PS:/etc/kdump.conf中core_collector行可以注释掉,如果保留,具体影响忘记了。

使用命令echo c > /proc/sysrq-trigger手动触发一个panic验证是否可以正常生成vmcore-dmesg.txt