mysql5.5、5.6打包rpm

作者: ropon 分类: 经验分享 发布时间: 2018-07-06 12:25
1、安装rpm工具包
yum install rpmbuild rpmdevtools -y

2、初始化rpm基础目录,目录结构如下
rpmdev-setuptree
ll /root/rpmbuild/
total 20
drwxr-xr-x 2 root root 4096 Jul 5 15:29 BUILD
drwxr-xr-x 2 root root 4096 Jul 5 15:29 RPMS
drwxr-xr-x 2 root root 4096 Jul 5 15:29 SOURCES
drwxr-xr-x 2 root root 4096 Jul 5 15:29 SPECS
drwxr-xr-x 2 root root 4096 Jul 5 15:29 SRPMS
BUILD RPM构建包的地方,编译、配置等操作都在这个目录下执行
RPMS 打包完成RPM包存放路径
SOURCES MySql源码存放路径
SPECS spec文件存放路径(自动应答文件)

3、本次分享打包mysql-5.6.40,将mysql-5.6.40.tar.gz源码文件上传到SOURCES目录下
#语法:
#TagName: value
#tag名大小写不敏感。

#自定义宏语法:
#%define ropon 2
#使用%{ropon}或者%ropon调用

#RPM包名称,文件中可使用%{name}调用。
Name: MySQL
#RPM包版本号,文件中可使用%{version}调用
Version: 5.6.40
#打包特定版本号,常指第几次打包,其中dist centos6下是.el6,centos7下是.el7。
Release: 1%{?dist}
#RPM包摘要,简单描述RPM包
Summary: MySQL-5.6.40 RPM
prefix: /usr/local/mysql-%{version}

Group: applications/database
License: GPL
URL: http://www.mysql.com

#指定构建需要的源代码,多个源码包,使用Source1,2...,n
Source0: mysql-5.6.40.tar.gz
#_tmppath是/var/tmp
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: cmake
Packager: ropon@west.cn

#autoreqprov用来指定自动产生RPM依赖关系
AutoReqProv: no

#RPM包详细描述
%description
MySQL 5.6.40

%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%define dbrootpwd west.cn
%define datadir /home/mysql

#setup 不加任何选项,仅将软件包打开。
#setup -n newdir 将软件包解压在newdir目录。
#setup -c 解压缩之前先产生目录。
#setup -b num 将第num个source文件解压缩。
#setup -T 不使用default的解压缩操作。
#setup -T -b 0 将第0个源代码文件解压缩。
#setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。

#构建前的准备
%prep
%setup -n mysql-%{version}

#构建
%build
cmake \
-DCMAKE_INSTALL_PREFIX=%{prefix} \
-DMYSQL_DATADIR=%{datadir} \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DTRACE=0 \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DEXTRA_CHARSETS=all

make -j `cat /proc/cpuinfo | grep processor| wc -l`

#安装
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

#rpm安装前执行的脚本
%pre
mkdir -p %{datadir}
useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /home/mysql

#rpm安装后执行的脚本
%post
ln -sf %{prefix} /usr/local/mysql
%{prefix}/scripts/mysql_install_db --basedir=%{prefix} --datadir=%{datadir} --user=mysql
/bin/cp %{prefix}/support-files/mysql.server /etc/init.d/mysqld
sed -i "s@^basedir=.*@basedir=%{prefix}@" /etc/init.d/mysqld
sed -i "s@^datadir=.*@datadir=%{datadir}@" /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

wget -O /etc/my.cnf --no-check-certificate https://mirrors.idiyrom.com/config/my.cnf
sed -i "s@/usr/local/mysql@%{prefix}@" /etc/my.cnf
sed -i "s@/home/mysql@%{datadir}@" /etc/my.cnf
service mysqld start

[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=%{prefix}/bin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep %{prefix} /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=%{prefix}/bin:\1@" /etc/profile
. /etc/profile

%{prefix}/bin/mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by \"%{dbrootpwd}\" with grant option;"
%{prefix}/bin/mysql -e "grant all privileges on *.* to root@'localhost' identified by \"%{dbrootpwd}\" with grant option;"
%{prefix}/bin/mysql -uroot -p%{dbrootpwd} -e "delete from mysql.user where Password='';"
%{prefix}/bin/mysql -uroot -p%{dbrootpwd} -e "delete from mysql.db where User='';"
%{prefix}/bin/mysql -uroot -p%{dbrootpwd} -e "delete from mysql.proxies_priv where Host!='localhost';"
%{prefix}/bin/mysql -uroot -p%{dbrootpwd} -e "drop database test;"
%{prefix}/bin/mysql -uroot -p%{dbrootpwd} -e "reset master;"

rm -rf /etc/ld.so.conf.d/{mysql,mariadb,percona,alisql}*.conf
[ -e "%{prefix}/my.cnf" ] && rm -rf %{prefix}/my.cnf
echo "%{prefix}/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
service mysqld restart
echo "mysql root:%{dbrootpwd}" /root/dbrootpwd.txt

#rpm卸载前执行的脚本
%preun
service mysqld stop
chkconfig --del mysqld
userdel mysql
rm -rf %{prefix}
rm -rf /home/mysql
rm -rf /etc/init.d/mysqld

%clean
rm -rf %{buildroot}

%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*

%changelog

4、执行命令打包
rpmbuild -bb rpmbuild/SPECS/mysql.spec

5、完成后在rpmbuild/RPM目录下就会两个rpm包
-rw-r--r-- 1 root root 52939316 7月 6 10:10 MySQL-5.6.40-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 93863140 7月 6 10:11 MySQL-debuginfo-5.6.40-1.el6.x86_64.rpm

6、直接安装,安装完成后会直接启动Mysql
rpm -ivh MySQL-5.6.40-1.el6.x86_64.rpm

不关闭服务直接卸载
rpm -e --nodeps MySQL-5.6.40-1.el6.x86_64

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!