自制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
View Code

      若未安装则:

# 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
View Code

    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
View Code

 

准备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
View Code

  %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
View Code

  注:在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
View Code

 

生成rpm

rpmbuild命令,过程可以分阶段

         -bb    制作成二进制                               // # sudo rpmbuild –bb mysql.spec

         -bs    源码形式

         -ba    源码和二进制两种形式

         -bl    制作后检测buildroot生成但没有包含到rpm包中的文件,注意如果生成未包含进去会出错

         -bc    只执行到%

         -bi    只执行到%install段

         -bp    只执行到%prep段

 

 

  

 

 

 

 

 

 

posted @ 2014-01-09 15:16  wyett  阅读(715)  评论(0编辑  收藏  举报