RHEL6.2下使用rpmbuild编译taobao-kernel手札
来源:互联网 发布:羞辱2破解版优化补丁 编辑:程序博客网 时间:2024/05/22 04:40
正好失业中,就利用这段时间系统的学习下taobao优化的几个系统级开源项目,先从最基本的linuxkernel开始。
先是参考了http://kernel.taobao.org上的 “编译使用淘宝内核”这篇引导文档,但是其中有些点没有提到。按照淘宝的引导文的顺序前进,中间补充我遇到的问题和解决方法。
首先从github下载淘宝内核树
git clone https://github.com/taobao/taobao-kernel.git
然后切换到6u的分支下(因为博主是在rhel6下编译并且是直接安装到rhel6的)
git checkout -b 6u origin/6u
(如果是要编译安装到rhel5的rpm包则需要切换到5u分支,不过目前github的树上好像已经没有5u这个分支了)
接着利用使用项目中自带的脚本来构建build内核所需要的文件
scripts/package.py [--buildid {number}]
其中buildid参数可选,默认为1,仅是用于管理版本,博主是取了自己的ID前两位FE,然后单数表示rhel上的构建,双数表示centos上的构建,所以本次buildid取2551
执行完成以后,项目目录下会生成taobao-kernel-build目录,包含了所有编译内核所需的文件,切换到该目录下。
这里开始遇到了问题,首先按照淘宝的引导文章执行了rpmbuild,因为source文件夹就在当前目录下,所以与原文的命令略有不同:
rpmbuild -bb kernel.spec --define="_sourcedir ."--define="_builddir ./build" --define="_rpmdir./build/rpms"
执行后会报一串依赖缺失,正常来说应该是 elfutils-libelf-develzlib-devel binutils-devel xmlto和asciidoc。其中前面4个都能直接在安装光盘或者官方源找到的(这里可以直
接把安装光盘作为yum的repo速度快,具体方法网上应该很多,这里就不多说了),asciidoc是没有的。刚开始是直接google了,找到了asciidoc在sourceforge的源,然后下载了
源代码之后编译安装,老三步 ./configure make make install,直接asciidoc命令也可以正常执行了,但是你会发现执行上面的rpmbuild时依然会报错,asciidoc依赖缺失,这时
候就开始纳闷了,以为是path的问题,所以分别在/usr/bin/ /usr/local/bin/ /bin/ 下面都建立了asciidoc和a2x的软连接,但是缺失依旧……整个过程中首次感受好无助啊@@
google也无果(可能是关键词不对)反复的看报错信息之后发现,报的错是软件包依赖缺失,而不是找不到系统命令,这时候才恍然大悟源码编译安装的,并不会加入rpm的软
件包索引,所以使用yumlist也是看不到asciidoc installed的,不过光盘也没包,所以只能是去redhat官方的ftp站点,发现有asciidoc的源码包,大概跟系统相关性比较大?所以
需要到本地编译再安装?抱着试试看的心理down下来 rpmbuild然后再安装。具体过程如下
lftp ftp://ftp.redhat.com:/pub/redhat/linux/enterprise/6Server/en/os/SRPMS
get asciidoc-8.4.5-4.1.el6.src.rpm
接着
rpm -ivh asciidoc-8.4.5-4.1.el.src.rpm
这一步只是安装源码,会在当前账户的home目录下建立rpmbuild文件夹,这里不要使用sudo,不然就会把源码安装到/root/下了,安装完源码后切换到~/rpmbuild/SPEC目
录下,会发现asciidoc.spec
rpmbuild -bb asciidoc.spec
执行完成后能在~/rpmbuild/RPMS/noarch/目录下发现已经封装好的asciidoc-*.rpm安装包
yum localinstall asciidoc-*.rpm
安装之,到此依赖问题都解决了,继续执行编译内核的rpmbuild,但是新的问题出现了,一段时间后会报错,是说bzip2 无法找到文件linux-*.tar.bz2,但是这个文件明明就
在当前目录下,sourcedir参数指定也是对的,这个问题大概是因为目录切换而导致相对目录位置混乱了,所以在这里将参数都修改成绝对路径来解决,参数修改如下
rpmbuild -bb kernel.spec --define="_sourcedir/home/ferdi/taobao/taobao-kernel/taobao-kernel-build"--define="_builddir/home/ferdi/taobao/taobao-kernel/taobao-kernel-build/build"--define="_rpmdir /home/ferdi/taobao/taobao-kernel/taobao-kernel-build/build/rpms"
终于顺利执行编译,不过如果机器不是很好的话这里可能要等上1个多小时到2个小时……稍安勿躁……博主用的虚拟机。。。拟机。。。机。。。(以后有钱了一定要买个刀片来玩)
经过漫长的等待终于编译完成,你能在BUILD/rpms/x86_64下面找到所有的rpm包,淘宝的引导文说只要
rpm -ivh kernel*.rpm
就大功告成了!你以为呢?才不会那么简单T。T 首先我的rpm没有自动解决依赖问题,这没啥,我手动按顺序装呗,(其实你如果不需要debug相关的话可以不用看这段),
先安装debug部分的包,首先安装kernel-debuginfo-common,然后kernel-debug-debuginfo,纳尼!他说依赖kernel-debuginfo-common包?没装上?再装一遍……纳尼!他说
我已经装过了! so……debug部分的安装死在这里了……不过这部分不影响正常的kernel安装,所以先不管他,跳过!
kernel部分其实只是使用的话只需要安装kernel-*.rpm就行了,但是kernel的安装依赖kernel-firmware,这里又是一个问题的所在,正常的 rpm -ivh安装kernel-firmware会报
一个警告,说是kernel-firmware软件包有多重指向,因为和官方的同时存在,但是其实你后来安装的这个kernel-firmware压根就没装上,这是 rhel的一个bug,在官方bugzilla能
够查到 bug #671021 centos上并不存在这个问题,这时候可以干脆remove掉原来的kernel-firmware然后再安装,或者使用rpm -Uvh来安装,后者貌似比较先进些@@ 安装完
kernel-firmware后应该能顺利安装上kernel了,至于kernel-headers和kernel-devel可选,如果你需要写驱动之类的就装上,kernel-headers是一定会有冲突的,直接rpm -Uvh就
好了,安装完后重启,大功告成了?
才不会咧……你发现你系统起不来了……报了一堆FATAL,都是the key is rejected by service,看描述应该是签名的问题了,跑去问了 @燕飞 大大,才知道安装自定义的
kernel需要把模块签名的参数改成0,好吧,重新来!
利用官方kernel启动进入系统,修改taobao-kernel-build文件夹下面的kernel.spec文件,其中有一行
%define signmodules 1
将这里的1修改成0,保存后,重新编译安装,这回终于算是完成了~ daz!
啊咧……你们别诅咒我啊,我到最后才说要改模块签名的问题,是因为。。。。。。(我被坑过一次了,当然要让别人也被坑一次啊。。。)问题嘛,自己亲身体验一次
会更加印象深刻@@ 而且如果是先把全文看完再去动手的同学就不会有多来一次了@@ (这个故事告诉我们看博文要看完……)
卖萌结束! 最后感谢霸爷,感谢燕飞大大!
后续会继续跟进centos6系统上的编译和安装,以及相关优化方面的测试,再后续会跟进taobao-jvm的编译,以及taobao-kernel中能profile java进程的perf的使用体验(如果
我忘了记得提醒我。。。)
结尾附上整个过程参考过的博客内容:
http://kernel.taobao.org
http://www.opsers.org/base/way-rhel6-1-kernel-with-rpm-upgrade-to-rhel6-2-bate-kernel.html
http://hi.baidu.com/higkoo/item/dcfef11bc63946cc39cb3034
http://half-blood-rock.blogspot.com/2011/08/rhel61rpmbuild.html
http://wenku.baidu.com/view/0aeb74c3d5bbfd0a7956732b.html
编译好的rpm包放在github: https://github.com/ferdiknight/taobao-kernel
新浪微博:@ferdinand童
欢迎上门讨论@@
- RHEL6.2下使用rpmbuild编译taobao-kernel手札
- RHEL6.1使用rpmbuild方式升级内核
- RHEL6.3使用rpmbuild方式升级内核
- RHEL6.1使用rpmbuild方式升级内核
- RHEL6.1编译内核-kernel-3.0.4
- RHEL6.1编译内核-kernel-3.0.4
- centos7下的rpmbuild初次使用~~~
- RHEL6.2编译安装Umplayer
- Ubutun下编译Kernel
- Centos下使用rpmbuild以及checkinstall制作RPM包
- 使用PB5编译wince下Tiny Kernel内核
- rhel6.2下安装gcc
- rpmbuild命令使用
- rpmbuild 使用笔记
- SRPM 的使用:rpmbuild
- Ubuntu 11.04下编译kernel
- MeeGo的编译办法rpmbuild
- RHEL6下友善之臂交叉编译工具的安装
- c#获取鼠标坐标
- 【学习笔记】Bloom Filter(布隆过滤器)
- I2S总线协议
- LLVM触发非主流方案春天的到来
- 高质量机箱网址
- RHEL6.2下使用rpmbuild编译taobao-kernel手札
- Java 数据结构基本分析
- 用批处理获取当前目录下所有文件的路径
- cocos2d-x系列笔记(8)---在cocos2d-x项目中使用curl与web服务器通信
- 一些感兴趣的知识(链接)
- DTD和Schema
- 树莓派--通过路由器上网
- 第一次 C程序设计上机报告(1)
- winform 导出datatable 到excel