本文介绍如何通过mysql的源码包进行RPM包的打包。
主要的流程包括: 获取源码包-》解压-》在解压中编译并生成spec文件-》创建RPM工作目录-》拷贝spec文件和源码包到工作目录-》进行打包
获取源码包:
源码包可以到官网下载,或者到lanchpad上用bazaar下载。 从官网上一般只能下载最新GA的社区版,lanchpad上一般是最新的源码,虽然可以通过bazaar的版本管理revert到期望的版本,但有时候找不到期望版本对应的revno(bzr中标识修改版本的编号)。 如果想下载不同版本的GA的社区版和企业版对应的代码,可以到percona的网站上下载: http://s3.amazonaws.com/percona.com/downloads/community/mysql-5.5.18.tar.gz
具体的版本可以用来替换5.5.18。
注:mysql5.0以后,基本所有GA的社区版都是单数,GA的企业版都是双数。 企业版版本上一般要稍微落后与社区版。 例如目前,GA的社区版是5.5.19,GA的企业版是5.5.18。
生成spec文件:
mysql中的spec文件需要通过编译生成,生成后的spec文件在support-file文件夹内。
注:在编译过程中mysql通过cmake的configure_file命令通过mysql.spec.sh文件生成mysql.spec文件
创建工作目录:
新建一个工作目录,在其中新建如下文件夹:
shell>mkdir-prpm/{BUILD,RPMS/i386,SOURCES,SPECS,SRPMS}
BUILD目录:编译时存放临时文件
SOURCES目录:存放.tar.gz源码包
SPECS目录:存放spec文件
RPMS目录:存放打包好的rpm文件
SRPMS目录:存放src.rpm文件。
修改/home/【用户名】/.rpmmacros文件 (如果没有就新建)
添加如下内容:
%_topdir 工作目录路径
注:如果是X86_64机器,把i386替换一下就好
拷贝spec文件和源码包到工作目录:
把spec文件放到SPECS目录 (通过指定
_topdir 可以在任意地方执行spec文件
)
把源码包放到SOURCES目录
进行打包:
到SPECS目录,执行:
>rpmbuild -ba mysql.spec
执行结束后生成的rpm包就在
RPMS/i386下了。
关于打补丁:
mysql默认生成的 mysql.spec并不支持打补丁,所以需要我们自己写脚本去打补丁,或修改mysql.spec.sh文件。
下面是一个脚本例子: 这个脚本是在解压后没有进行编译的源码的上运行的
#!/bin/sh
#take patches
这里是打补丁,使用的是patch命令,也可以使用quilt
PS_DIR=$PWD
echo $PS_DIR
(cd patches; cat `cat series`) | patch -p1 -N -d $PS_DIR
#build rpm directory
rm -rf ~/rpmbuild
mkdir ~/rpmbuild
mkdir ~/rpmbuild/BUILD && mkdir ~/rpmbuild/BUILDROOT
mkdir ~/rpmbuild/RPMS && mkdir ~/rpmbuild/SOURCES && mkdir ~/rpmbuild/SPECS && ~/rpmbuild/SRPMS
#create tar.gz file
cd ../ && tar -zcvf mysql-5.5.18.tar.gz mysql-5.5.18
mv mysql-5.5.18.tar.gz ~/rpmbuild/SOURCES/
#rpmbuild
cd mysql-5.5.18/support-files && rpmbuild -ba mysql.5.5.18.spec
关于直接修改mysql.spec.sh:
1. 添加依赖的gcc与libaio-devel
在spec.sh文件的的开始部分有个
# ----------------------------------------------------------------------------
# Distribution support
# ----------------------------------------------------------------------------
在其后的每个�fine distro_buildreq 中添加cmake libaio-devel
如:
�fine distro_buildreq
gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client readline-devel zlib-devel cmake libaio-devel
找到spec文件中如下部分
####################
# Main spec file section
####################
在其后添加patch定义:
Patch: p.patch
Patch1:p1.patch
Patch2:p2.patch
最后找到预处理脚本程序的地方:
%prep
%setup -T -a 0 -c -n %{src_dir}
在其后添加打补丁的操作:
cd %{src_dir}
%patch -p1
%patch1 -p1
%patch2 -p1