zoukankan      html  css  js  c++  java
  • 自制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段

      

     

    静水流深
  • 相关阅读:
    Java安装以及环境变量配置
    IPython绘图和可视化---matplotlib
    Tensorboard可视化(关于TensorFlow不同版本引起的错误)
    Tensorboard可视化
    关于Tensorflow安装opencv和pygame
    perl将json转换成xml
    cnblogs终于把以前内容的管理权还给我了~
    final评论2
    final评论1
    psp
  • 原文地址:https://www.cnblogs.com/wyett/p/mysql_rpmbuild.html
Copyright © 2011-2022 走看看