MySQL5.6.12 rpm制作及及自动化部署安装
转自:http://blog.itpub.net/29254281/viewspace-1268918/
首先,下载rpmbuild
yum install rpm-build -y
它是Red Hat用于打RPM包的工具.
安装之后重启计算机,可以看到/root/rpmbuild目录下有如下文件夹
这个工具打包的过程大致如下,
编写spec指定打包的过程
将源码压缩包放在SOURCES目录下,
将源码解压缩到BUILD目录,执行make命令
将make install 的结果放在BUILDROOT目录下,
最后将BUILDROOT下编译好的二进制文件制作成RPM包。
并且可以指定在RPM安装之前,安装之后,卸载等过程执行的命令
首先,下载源码包
http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.14.tar.gz
并将其复制到指定的目录
/root/rpmbuild/SOURCES/mysql-5.6.14.tar.gz
安装编译MySQL需要的依赖包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
编写spec脚本
vim mysql.spec
Name: MySQL
Version: 5.6.14
Release: 1%{?dist}
Summary: MySQL-5.6.14 RPM
Group: applications/database
License: GPL
URL: http://www.mysql.com
Source0: mysql-5.6.14.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: cmake
AutoReqProv: no
%description
MySQL 5.6.14
%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%prep
%setup -n mysql-%{version}
%build
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-5.6.14 \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make -j `cat /proc/cpuinfo | grep processor| wc -l`
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
%pre
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
%clean
rm -rf %{buildroot}
%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /home/mysql/mysql-5.6.14/*
%changelog
这个脚本各个Segment的作用请参考
http://machael.blog.51cto.com/829462/213477
其中
Source0: mysql-5.6.14.tar.gz
这个压缩文件需要放在指定的目录中(/root/rpmbuild/SOURCES)
自动解压的时候,会在这个指定目录中找这个文件
AutoReqProv: no
这个参数必须设置,否则在安装的时候,会显示有依赖包的缺失.实际上是不需要的。
%setup -n mysql-%{version}
解压源码包之后,会进入目录执行build,它默认是根据%{name}和%{version}拼接的目录.
以MySQL为例,在spec中写的name为MySQL,version为5.6.14
那么它会进入MySQL-5.6.14的目录,
但是源码包解压之后的目录是mysql-5.6.14(小写)
所以在setup这个段使用-n参数,匹配这个目录.(就是说默认的设置不灵,需要自己匹配目录)
make -j `cat /proc/cpuinfo | grep processor| wc -l`
查看计算机有几个核,然后多线程编译
这个脚本的过程是这样的
首先解压源码包
%prep
%setup -n mysql-%{version}
然后执行%build的过程,make编译
然后执行%install
将编译之后的代码真实的安装一遍,
它安装的目录是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/home/mysql/mysql-5.6.14/
因为我们指定的安装目录是/home/mysql/mysql-5.6.14/,它相当于在一个沙盒中安装了一遍.
它会将沙盒中安装之后的文件打成RPM包
%files就是指定哪些沙盒中的文件打入RPM包
%files指定的文件是相对路径,绝对路径应该是%{buildroot}/home/mysql/mysql-5.6.14
默认的%{buildroot}就是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/
这个%{buildroot}是由spec文件的BuildRoot设置的
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%pre是RPM安装之前执行的命令
这里主要是创建数据文件的目录和帐号
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post是RPM安装之后执行的命令
这里主要是创建数据库实例,配置服务,配置环境变量
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun是卸载RPM包执行的命令,主要用于清理
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
其实编写spec文件本质上是在写一个回调函数,rpmbuild根据spec的回调函数,生成一个Shell脚本,打包的过程就是执行Shell脚本的过程。
定制RPM安装包可以满足大规模自动化部署的场景
因为它可以
定制配置文件(将配置文件放在ftp或者http上,在%post段下载这个配置文件放在/etc下)
定制安装目录和数据文件,日志文件的目录(生产系统不同的挂载点,底层可能是不同的物理设备)
自动创建帐号,配置服务和环境变量
这些特性在规模很小时微不足道,
比如给研发和测试安装,人家还嫌你有毛病.明明一个rpm能搞定,你还整这么复杂,不是臭显摆吗?
生产环境装一个库运行好几年,再装的时候,这个RPM估计都忘了放哪里了...
但是一旦规模上来了,一天需要装个10台8台的,这个自动化安装的优点就显现出来了
参考:
源码安装MySQL
http://www.cnblogs.com/xiongpq/p/3384681.html
rpmbuild spec文件详解
http://machael.blog.51cto.com/829462/213477
http://www.worldhello.net/2011/04/02/2405.html
AutoReqProv参数的解释
http://blog.csdn.net/peng_zhou/article/details/3530230
MySQL5.6.12 rpm制作及及自动化部署安装的更多相关文章
- 自动化运维之Cobbler自动化部署安装操作系统
Cobbler概述: Cobbler可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会. 在生产环境中,经常批 ...
- mysql5.7.12直接解压zip包,安装过程
MySQL-5.7.12-winx64.zip解压安装方式 1.解压文件到你想要安装的位置. 本人是直接解压到E盘. 2.配置环境变量,在path中放入:E:\mysql-5.7.12-win ...
- Puppet自动化部署-安装及配置(3)
本文介绍Puppet Master及Agent相关的安装及配置. 一. 官网下载Puppet安装YUM源 [root@puppet-master ~]# rpm -ivh https://yum.pu ...
- centos6.8下LNMP (nginx1.8.0+php5.6.10+mysql5.6.12) - 部署手册
在平时运维工作中,经常需要用到LNMP应用框架.以下对LNMP环境部署记录下: 1)前期准备:为了安装顺利,建议先使用yum安装依赖库[root@opd ~]#yum install -y make ...
- MySQL5.7.12新密码登录方式及密码策略
在Centos6.6上安装MySQL5.7.12时,遇到了一个问题 安装后在/root目录下没有发现有.mysql_secret这个文件,所以没有没法按照官方文档上说的那样使用,这里记录下, 解决方式 ...
- MySQL5.7多实例自动化部署脚本
一.安装说明 ------------------------------------------------------ mysql5.7.10_onekey_install.sh自动化部署脚本支持 ...
- 转:mysql5.6.12 for Linux安装
原文链接:http://mmicky.blog.163.com/blog/static/1502901542013635317349/ 1:上www.mysql.org下载64位版本mysql5.6. ...
- tengine rpm制作
最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法. 1 安装centos的开发环境集成包及tengine的依赖包 1 yum group ...
- 自动化部署必备技能—部署yum仓库、定制rpm包
部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...
随机推荐
- 如何将Jenkins multiline string parameter的多行文本优雅的保存为文件
[现象]: 使用multi-line string parameter获取的文本变量,在jenkins shell里面显示为单行文本(空格分割). [问题]:能否转换为多行文本,并存入文件. [解决方 ...
- 关于Git bash 在win10重装系统情况下闪退并生成mintty.exe.stackdump文件的问题
问题内容:在重装win10系统情况下,有可能会出现安装Git后右击Git bash会出现闪退并生成mintty.exe.stackdump文件 个人解决方案:查看网络上各位网友的意见和解决方法后,自己 ...
- 用eFrameWork框架实现快捷搜索
软件系统最大的价值在于用心去帮客户解决各种痛点,需要做好方方面面的工作,数据的快捷搜索就是其中比较重要的一个环节.那么,什么样的搜索方式才是最高效快捷的呢?目前能想到最好的办法是用名称声母检索,用声母 ...
- SQL查询和替换含有回车,空格,TAB,等
---如下是查询语句 --查询名称有退格键 ),item_name) go --查询名称有制表符tab ),item_name) go --查询名称有换行 ),item_name) go --查询名称 ...
- js url 参数 转换成 json 对象数据
some=params&over=here => {"some":"params","over":"here&quo ...
- httpclient 用法
链接地址 https://www.cnblogs.com/mykcode/p/7833090.html 在程序用调用 Http 接口.请求 http 资源.编写 http 爬虫等的时候都需要在程序集中 ...
- Unity的Shader如何控制投影颜色
细节慢慢补充,有几个需要注意的地方,必须要有接收投影的pass也就是Name是ShadowCollector的,必须添加#pragma multi_compile_fwdbase,物体的着色器必须有T ...
- event 自定义事件
自定义事件 1 public class Program 2 { 3 public event EventHandler ehdl=null; 4 public Program() 5 { 6 ehd ...
- 第五章 JVM垃圾收集器(1)
说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...
- 如何使用socket进行java网络编程(一)
笔者进来遇到一个项目,一家公司的系统需要在完成自身业务逻辑的同时,接入到某银行的核心系统(这里准确说应该是前置机)进行一系列的账务处理,然后再将账务处理结果返回给该公司系统. 网络通信采用TCP协议. ...