编译内核及制作RPM包[原创] 不指定

root , 2010/02/03 11:49 , Linux , 评论(6) , 阅读(55822) , Via 本站原创 | |
一、前言
       由于目前部分平台所使用的Linux发行版版本比较低,自带的内核版本远低于主流内核,无法使用到一些优秀的新内核特征,包括对我们比较有用的per-task storage I/O、改善在SMP系统中I/O的吞吐量、Ext4文件格式、虚拟化支持等。因此决定采用目前最新稳定版内核Linux-2.6.32.6(更新于2010-01-25)进行重新编译,生成一个更加小巧、稳定、安全、高效率的新内核。

二、编译步骤
第一步:
引用

# cd /home
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.5.tar.gz
# tar -zxvf linux-2.6.32.5.tar.gz -C /usr/src
# cd /usr/src
# ln -s linux-2.6.32.5 linux
# cd linux

第二步:
引用

# make mrproper (初次编译内核这步也可以省略,方便第二次编译初始用。)
# make menuconfig
# make bzImage && make modules && make modules_install(需30~40分钟,具体看服务器配置)
# make install

如需制作RPM内核安装包,运行以下命令,相当于第二步的操作,但不编译本机内核。
# make rpm
生成位置:
/usr/src/redhat/RPMS/x86_64/kernel-2.6.32.6-2.x86_64.rpm
/usr/src/redhat/SRPMS/kernel-2.6.32.6-2.src.rpm

三、安装步骤
1、二进制rpm包安装步骤
# rpm -ivh  kernel-2.6.32.6-1.x86_64.rpm
# vi /boot/grub/menu.lst添加以下并修改default项。
引用

    title CentOS (2.6.32.6)
    root (hd0,0)
    kernel /vmlinuz-2.6.32.6 ro root=LABEL=/
    initrd /initrd-2.6.32.6.img

# cd /lib/modules && mkinitrd /boot/initrd-2.6.32.6.img 2.6.32.6/
2、RPM源码包安装步骤,好处便是在原有基础上再进行编译,更灵活。
引用

# rpm -Uvh kernel-2.6.32.6-2.src.rpm
# rpmbuild -bp --target=$(arch) /usr/src/redhat/SPECS/kernel-2.6.32.6-2.spec
# cd /usr/src/redhat/BUILD/kernel-2.6.32.6-2
# vi Makefile <-- Change "EXTRAVERSION" to avoid kernel overwriting
# cp /lib/modules/2.6.32.6/build/.config .
# make menuconfig
# 重复第二步

四、ChangeLog
引用

2.1、裁减了51M内核模块,目前大小为46M。
2.2、No Forced Preemption(Server)适合服务器环境的禁止内核抢占。
2.3、High Memory Support->64GB。
2.4、Default I/O scheduer(Deadline)使用Deadline作硬盘存取排程器,非常适合IO较大的数   据库服务器。
2.5、添加Ext4 FileSystem。
2.6、删除Dell laptop support、Toshiba Laptop support。
2.7、开启Netfilter支持。
2.8、Export task/process statistics through netlink(sys task相关选项)。
2.9、Enable extended accounting over taskstats(sys task相关选项)。
2.10、Enable per-task storage I/O accounting(sys task相关选项)。
2.11、Support for Large Block Devices (LBD) - 支持超过 2TB 大小的储存设备。
2.12、Support for Large Single Files (LSF) - 支持处理超过 2TB 大小的文件
2.13、裁减sound card support。
2.14、裁减Bluetooth subsystem support。
2.15、裁减Wireless。
2.16、裁减Kernel hacking 。

如需编译后的RPM包请联系我(文件太大,不好传)。
kernel-2.6.32.6-2.x86_64.rpm(17M)
kernel-2.6.32.6-2.src.rpm(84M)

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
Tags: , ,
少林功夫好
2015/06/04 14:44
# vi Makefile <-- Change "EXTRAVERSION" to avoid kernel overwriting 这一步到底是啥意思?修改makefile文件的内容?修改什么了?
shanks
2014/02/28 17:45
求助,为什么我编译出来的rpm包有几百兆,我也没有弄什么新东西,就只是默认的config,还有,我把这个rpm包在别的机器上安装的时候,提示我一堆kernel-firmware信息,这是安装出错了么
xtang Email
2011/12/20 12:04
请问下,我按照大师做出来的包。不会生成kernel-devel,这样的结果会造成一些软件 无法编译安装,比如 keepalived configure  后不支持Use IPVS Framework       : noIPVS sync daemon support : no 请问下应该如何解决
ISEEK Email
2011/12/12 11:21
拜读了刘天斯兄的文章  谢谢了。
Fans
2011/02/24 23:13
大师,我按你写的方法#make rpm 安装后要手动去mkinitrd 创建IMG文件。帮忙看一下make rpm自动创建的SPEC文件是不是有问题?感谢
Name: kernel
Summary: The Linux Kernel
Version: 2.6.34.8
Release: 1
License: GPL
Group: System Environment/Kernel
Vendor: The Linux Community
URL: http://www.kernel.org
Source: kernel-2.6.34.8.tar.gz
BuildRoot: /var/tmp/%{name}-%{PACKAGE_VERSION}-root
Provides:  kernel-2.6.34.8
%define __spec_install_post /usr/lib/rpm/brp-compress || :
%define debug_package %{nil}

%description
The Linux Kernel, the operating system core itself

%prep
%setup -q

%build
make clean && make %{?_smp_mflags}

%install
%ifarch ia64
mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules
mkdir -p $RPM_BUILD_ROOT/lib/firmware
%else
mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules
mkdir -p $RPM_BUILD_ROOT/lib/firmware
%endif
INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} KBUILD_SRC= modules_install
%ifarch ia64
cp $KBUILD_IMAGE $RPM_BUILD_ROOT/boot/efi/vmlinuz-2.6.34.8
ln -s efi/vmlinuz-2.6.34.8 $RPM_BUILD_ROOT/boot/
%else
%ifarch ppc64
cp vmlinux arch/powerpc/boot
cp arch/powerpc/boot/$KBUILD_IMAGE $RPM_BUILD_ROOT/boot/vmlinuz-2.6.34.8
%else
cp $KBUILD_IMAGE $RPM_BUILD_ROOT/boot/vmlinuz-2.6.34.8
%endif
%endif
cp System.map $RPM_BUILD_ROOT/boot/System.map-2.6.34.8
cp .config $RPM_BUILD_ROOT/boot/config-2.6.34.8
%ifnarch ppc64
cp vmlinux vmlinux.orig
bzip2 -9 vmlinux
mv vmlinux.bz2 $RPM_BUILD_ROOT/boot/vmlinux-2.6.34.8.bz2
mv vmlinux.orig vmlinux
%endif

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr (-, root, root)
%dir /lib/modules
/lib/modules/2.6.34.8
/lib/firmware
/boot/*
刘天斯 回复于 2011/02/28 14:21
修改grob.conf后reboot就知道了。
GARREY
2011/02/19 23:23
刘大师,内核编辑完后make rpm生成的RPM文件安装后怎么不能生成/boot/initrd.img
必须手动生成呢,是不是要重新编辑kernel.spec?
刘天斯 回复于 2011/02/20 00:05
可以生成,请检查哪个步骤是否有误了。
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]