rpmbuild制作mysql-5.7.17的rpm包


      编译安装一个mysql需要的时间太长了,在批量部署服务器时都是利用rpm包快速安装,网上现成的rpm是很方便,但是我更喜欢自己打包的。这里仅记录一下在Centos6系统中利用rpmbuild工具制作一个mysql-5.7.17版本的rpm包。 

 

1、安装工具包:

 
  1. yum install rpmbuild rpmdevtools -y 
 

2、初始化一个目录结构:

  1. rpmdev-setuptree  

3、查看一下执行上面命令后的目录结构:

  1. [root@rpm-build ~]# tree -L 3 
  2. └── rpmbuild 
  3.     ├── BUILD 
  4.     ├── RPMS 
  5.     ├── SOURCES 
  6.     ├── SPECS 
  7.     └── SRPMS 

4、把原码包mysql-5.7.17.tar.gz上传到SOURCES目录下,并在SPECS目录下添加配置好的mysql.spec文件:

由于在Mysql5.6后都要依赖boost_1_59_0.tar.gz包,所以这里我直接解压到BUILD目录下,不然检测不到;

  1. tar xf boost_1_59_0.tar.gz -C rpmbuild/BUILD/ 

5、配置mysql.spec文件,还需要添加一个my.cnf配置文件到SOURCES目录下;

  1. Name:       mysql 
  2. Version:    5.7.17 
  3. Release:    1%{?dist} 
  4. License:    GPL 
  5. URL:        http://downloads.mysql.com/archives/get/file/mysql-5.7.17.tar.gz 
  6. Group:      applications/database 
  7. Source:     mysql-5.7.17.tar.gz 
  8. BuildRoot:  %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) 
  9. BuildRequires:  cmake 
  10. Packager:   hz328@qq.com 
  11. Autoreq:    no 
  12. #Source: %{name}-%{version}.tar.gz 
  13. prefix: /usr/local/mysql-%{version} 
  14. Summary: MySQL 5.7.17 
  15.  
  16. %description  
  17. The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, 
  18. and robust SQL (Structured Query Language) database server. MySQL Server 
  19. is intended for mission-critical, heavy-load production systems as well 
  20. as for embedding into mass-deployed software. 
  21.  
  22. %define MYSQL_USER mysql 
  23. %define MYSQL_GROUP mysql 
  24.  
  25. %prep 
  26. %setup -n mysql-%{version} 
  27.  
  28.  
  29. %build 
  30.  
  31. #CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing" 
  32. #CXX=g++ 
  33. #CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing" 
  34. #export CFLAGS CXX CXXFLAGS 
  35.  
  36. cmake \ 
  37. -DCMAKE_INSTALL_PREFIX=%{prefix} \ 
  38. -DMYSQL_DATADIR=/data \ 
  39. -DWITH_BOOST=../boost_1_59_0 \ 
  40. -DSYSCONFDIR=/etc \ 
  41. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  42. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  43. -DWITH_MEMORY_STORAGE_ENGINE=1 \ 
  44. -DWITH_READLINE=1 \ 
  45. -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ 
  46. -DMYSQL_TCP_PORT=3306 \ 
  47. -DENABLED_LOCAL_INFILE=1 \ 
  48. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  49. -DEXTRA_CHARSETS=all \ 
  50. -DDEFAULT_CHARSET=utf8 \ 
  51. -DDEFAULT_COLLATION=utf8_general_ci 
  52.  
  53. make -j `cat /proc/cpuinfo | grep processor| wc -l` 
  54.  
  55. %install 
  56. rm -rf %{buildroot} 
  57. make install DESTDIR=%{buildroot} 
  58. cp %{_sourcedir}/my.cnf $RPM_BUILD_ROOT%{prefix}/ 
  59.  
  60.  
  61. %pre 
  62. mkdir -p /data 
  63. useradd -s /bin/nologin -M mysql >/dev/null 2>&1 
  64.  
  65. %post 
  66. /bin/cp %{prefix}/support-files/mysql.server /etc/init.d/mysql 
  67. /bin/cp %{prefix}/my.cnf %{_sysconfdir}/my.cnf 
  68. chkconfig mysql on 
  69. %{prefix}/bin/mysqld --initialize-insecure --basedir=%{prefix} --datadir=/data/mysql --user=mysql 
  70. service mysql start 
  71. chown -R mysql:mysql /data/mysql 
  72. echo "export PATH=.:\$PATH:/usr/local/mysql-%{version}/bin;" >> ~/.bash_profile 
  73. source ~/.bash_profile 
  74.  
  75. ln -s %{prefix}/lib %{prefix}/lib64 
  76.  
  77. %preun 
  78. service mysql stop 
  79. chkconfig --del mysql 
  80. userdel -r mysql >/dev/null 2>&1 
  81. rm -rf /usr/local/mysql-%{version} >/dev/null 2>&1 
  82. rm -rf /data/mysql >/dev/null 2>&1 
  83. rm -rf /etc/init.d/mysql >/dev/null 2>&1 
  84.  
  85. %files 
  86. %defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP}) 
  87. %attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/* 
  88.  
  89. %changelog 

 

6、执行命令打包,需要一点时间看机器的配置;

  1. rpmbuild -bb rpmbuild/SPECS/mysql-5.7.17-new.spec 

7、完成后在rpmbuild/RPM目录下就会两个rpm包;

  1. [root@rhce ~]# ll rpmbuild/RPMS/x86_64/ 
  2. total 267280 
  3. -rw-r--r-- 1 root root  80603892 May 28 19:47 mysql-5.7.17-1.el6.x86_64.rpm 
  4. -rw-r--r-- 1 root root 193088996 May 28 19:48 mysql-debuginfo-5.7.17-1.el6.x86_64.rpm 

 

8、直接安装,安装完成后会直接启动Mysql:

  1. [root@rhce ~]# rpm -ivh rpmbuild/RPMS/x86_64/mysql-5.7.17-1.el6.x86_64.rpm  
  2. Preparing...                ########################################### [100%] 
  3.    1:mysql                  ########################################### [100%] 
  4. Starting MySQL...[  OK  ] 

 

不关闭服务直接卸载:

[root@rhce ~]# rpm -e --nodeps mysql-5.7.17-1.el6.x86_64

Shutting down MySQL..[  OK  ]

#注意这里配置了,在卸载服务时会把mysql目录删除,所以要先备份数据;