自制mysql.rpm安装包
RPM安装比源码更快更方便,更利于统一版本,省去了繁琐的编译过程,下面以制作mysql的rpm安装包为例。
编译环境
1、 安装rpm-build;
检查是否配置rpm环境
1 # sudo yum list | grep rpm 2 This system is not registered with RHN. 3 RHN support will be disabled. 4 redhat-rpm-config.noarch 8.0.45-32.el5 installed 5 rpm.x86_64 4.4.2.3-22.el5 installed 6 rpm-build.x86_64 4.4.2.3-22.el5 installed 7 rpm-libs.x86_64 4.4.2.3-22.el5 installed 8 rpm-python.x86_64 4.4.2.3-22.el5 installed
若未安装则:
# sudo yum install rpm-build
2、创建rpm编译目录
(1)选定目录,选择一个可进行写操作的目录,这里选择根目录/home/wyett;
(2)进入目录,创建如下文件夹
1 # cd /home/wyett 2 # sudo mkdir mysql 3 # cd mysql 4 # sudo mkdir BUILD RPMS SOURCES SPECS SRPMS
BUILD //解压后的tar.gz包
RPMS //编译后的RPM
SOURCES //放编译需要的文件mysql-xxx.tar.gz,*.cnf
SPECS //*.spec编译脚本
SRPMS //src格式的rpm包存放的位置
3、预先准备mysql-x.x.x.tar.gz源码安装包,下载地址:http://downloads.mysql.com/archives/community/,放在/home/wyett/mysql/SOURCES/下面。
4、准备mysql-company-xxx.spec文件,放在/home/wyett/mysql/SPECS/目录下面
这样,编译环境部署完成,目录结构如下:
1 # pwd 2 /home/wyett/mysql 3 # tree 4 . 5 |-- BUILD 6 |-- RPMS 7 |-- SOURCES 8 | `-- mysql-xxx.tar.gz 9 |-- SPECS 10 | |-- mysql-xxx-xxx.spec 11 | `-- mysql-xxx-xxx.spec 12 `-- SRPMS
准备spec文件
Spec文件包括三部分,introduction section,编译部分,files部分;
1、introduction section部分,包括一些变量定义:
1 ################################################### 2 #File name:mysql-company-x.x.x-release.x86_64.spec 3 #Author :wyett 4 #Date :Oct 15,2013 5 # 6 ################################################### 7 8 %define _topdir /home/wyett/mysql 9 %define name mysql 10 %define version x.x.x 11 %define release dba.4 12 %define serial 1 13 %define userpath /usr/local/mysql 14 %define myusr mysql 15 %define mygrp mysql 16 %define buildroot %{_topdir}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 17 18 BuildRoot:%{buildroot} 19 Summary:Mysql.rmp package of the company 20 License:GPL 21 Name:%{name} 22 Version:%{version} 23 Release:%{release} 24 Vendor:Mysql package of the company 25 Url:http://www.company.com/ 26 SOURCE0:%{name}-%{version}.tar.gz 27 #SOURCE1:my3306.cnf 28 BuildRequires:ncurses-devel 29 Group:Application/Databases
%define这部分变量可以自己指定,不要也可以,不过定义后修改方便,其中:
_topdir 定义了rpm工作的根目录,上文中提到,需要有写权限
Buildroot 定义了rpm包安装后的根目录,相当于咱们编译安装的 /目录,rpm打包就打包这部分;
下面部分需要注意:
BuildRoot:%{buildroot} //编译安装的根目录
SOURCE0:%{name}-%{version}.tar.gz //tar包
SOURCE1:my3306.cnf //配置文件
BuildRequires:ncurses-devel //mysql编译安装时需要的环境包
2、编译部分,包括
%description 文字性描述
%prep 包括解压命令和其他一些shell脚本
%setup –q 解压tar包到BUILD目录
%build 预编译,如果再需要重新编译,修改这部分就行
./configure
Make
%setup 安装,安装到BuildRoot(即${RPM_BUILD_ROOT})目录下
%clean 清理一些编译过程的目录
%file 需要打包的文件目录
1 %description 2 The rpm package for the company 3 4 %prep 5 %setup-q -n %{name}-%{version} 6 7 %build 8 ./configure \ 9 --prefix=%{userpath} \ 10 --with-comment=Source \ 11 --with-server-suffix=-enterprise-gpl \ 12 --with-mysqld-user=mysql \ 13 --without-debug \ 14 --with-charset=latin1 \ 15 --with-extra-charsets=big5,ascii,gb2312,gbk,utf8 \ 16 --with-client-ldflags=-all-static \ 17 --with-mysqld-ldflags=-all-static \ 18 --with-plugins=csv,innobase,myisam,heap,partition \ 19 --enable-local-infile 20 make -j 8 21 22 23 %install 24 if 25 getent group %mygrp >/dev/null 26 then 27 : OK group %mygrp already present 28 else 29 /usr/sbin/groupadd -r %mygrp 2>/dev/null || : 30 fi 31 if 32 id %myusr > /dev/null 2>&1 33 then 34 : OK user %myusr already present 35 else 36 /usr/sbin/useradd -g %mygrp -s /sbin/nologin -c "User for Mysql" -d /var/tmp %myusr 2> /dev/null || : 37 fi 38 if ! [ -d %{buildroot}/mysqldata ] 39 then 40 %{__mkdir} -p %{buildroot}/mysqldata 41 fi 42 43 make install DESTDIR=%{buildroot} INSTALLDIRS=vendor 44 install -m 755 %{SOURCE1} %{buildroot}/mysqldata/mysql/data/mysql3306/my3306_master.cnf 45 #install 46 %{__rm} -rf %{buildroot}/usr/local/mysql/sql-bench 47 %{__rm} -rf %{buildroot}/usr/local/mysql/mysql-test 48 49 50 %clean 51 %post 52 53 if 54 getent group %mygrp >/dev/null 55 then 56 : OK group %mygrp already present 57 else 58 /usr/sbin/groupadd -r %mygrp 2>/dev/null || : 59 fi 60 if 61 id %myusr > /dev/null 2>&1 62 then 63 : OK user %myusr already present 64 else 65 /usr/sbin/useradd -g %mygrp -s /sbin/nologin -c "User for Mysql" -d /var/tmp %myusr 2> /dev/null || : 66 fi 67 /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/mysqldata/mysql/data/mysql3306 68 chown mysql:mysql /mysqldata -R
注:在mysql 5.5及以上版本中,不再对./configure支持,需要cmake进行编译安装,相关参数请参考:
http://blog.csdn.net/seteor/article/details/7249513
3、生成rpm包的打包目录,默认BUILDROOT目录,无法修改
1 %files 2 %defattr (-,root,root) 3 %{userpath}/ 4 /mysqldata
生成rpm包
rpmbuild命令,过程可以分阶段
-bb 制作成二进制 // # sudo rpmbuild –bb mysql.spec
-bs 源码形式
-ba 源码和二进制两种形式
-bl 制作后检测buildroot生成但没有包含到rpm包中的文件,注意如果生成未包含进去会出错
-bc 只执行到%
-bi 只执行到%install段
-bp 只执行到%prep段