有个小问题一直没闹明白:CentOS的内核源代码从哪里下?

如果是linux主线的代码,可以github上获取了:linux(4.5之后的版本)。但需要注意centos并不是使用的linux主线的内核,而是redhat自己维护的。

查了下资料,在这做个笔记。

centos的内核源码获取方式参考这里的说明

centos将源码都归档到了git.centos.org,但如果直接去看 kernel rpm git , 你会发现根本找不到代码的影子。

centos用了一个特别的办法。

[user@host]$ git clone https://git.centos.org/git/rpms/kernel.git 
[user@host]$ git clone https://git.centos.org/git/centos-git-common.git
[user@host]$ cd kernel
# 举例说我们要修改 centos7 的内核
[user@host]$ git checkout c7
# get_sources会分析当前git目录,下载对应的kernel压缩包
[user@host]$ ../centos-git-common/get_sources.sh

在kernel目录下执行get_sources.sh时,脚本会分析kernel目录下的.kernel.metadata文件,这个文件记录了当前版本需要对应的kernel源代码文件的sha值。

4cddbe6531170fad4a6dd31f10512e6bd4298fbd SOURCES/kernel-abi-whitelists-693.tar.bz2
43853d8a8a8c9ff26f3efc87757a197321f83e79 SOURCES/linux-3.10.0-693.21.1.el7.tar.xz
95b9b811c7b0a6c98b2eafc4e7d6d24f2cb63289 SOURCES/rheldup3.x509
d90885108d225a234a5a9d054fc80893a5bd54d0 SOURCES/rhelkpatch1.x509
5a7d05a8298cf38d43689470e8e43230d8add0f9 SOURCES/centos-kpatch.x509
c61172887746663d3bdd9acaa263cbfacf99e8b3 SOURCES/centos-ldup.x509
6e9105eb51e55a46761838f289a917611cad8091 SOURCES/centos.cer

之后会去 ${SURL}/${pn}/${br}/${fsha} (如 https://git.centos.org/sources/kernel/c7/{fsha}) 通过curl下载对应的文件,最终会在SOURCES目录下得到刚下载的的linux-3.10.0-693.21.1.el7.tar.xz压缩包,解压即可。