Linux下基于官方源代码RPM包构建自定义MySQL RPM包
rpmbuild时不要以root用户执行!
方法一:
1、首先安装rpmbuild
#yum install rpm-build gcc gcc-c++ cmake bison ncurses-devel zlib glibc libaio-devel gperf -y
2、下载官方源码包(tar.gz格式),并解压
#wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz
#tar -xvf mysql-5.6.15.tar.gz
3、新建RPM文件夹
#cd mysql-5.6.15
#mkdir rpm
4、把准备好的spec文件拷贝到新建的rpm文件夹,然后开始重建RPM包,生成的RPM包放在 ~/rpmbuild/RPMS/x86_64 文件夹下。
#rpmbuild -bb mysql.spec (会在当前用户家目录生成rpmbuild文件夹)
方法二:
如果想要查看原版spec文件,在原版基础上进行修改spec文件的话用以下方法:
1、首先安装rpmbuild
#yum install rpm-build gcc gcc-c++ cmake bison ncurses-devel zlib glibc libaio-devel gperf -y
2、下载官方源代码RPM包
wget http://cdn.mysql.com/Downloads/MySQL-5.6/MySQL-5.6.26-1.el6.src.rpm
3、把上述下载的RPM包下载到home目录,然后执行
#rpmbuild ~ 会在家目录生成rpmbuil以及下面的BUILD BUILDROOT RPMS SOURCES SPECS SRPMS子空目录结构
#rpm -ivh MySQL-5.6.26-1.el6.src.rpm
#ls rpmbuild -R 目录结构显示如下:
rpmbuild: BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
rpmbuild/BUILD:
rpmbuild/BUILDROOT:
rpmbuild/RPMS:
rpmbuild/SOURCES:
mysql-5.6.26.tar.gz
rpmbuild/SPECS:
mysql.spec
rpmbuild/SRPMS:
4、开始修改生成的mysql.spec文件
#vim rpmbuild/mysql.spec
主要修改 #Build full release 部分的安装mysql时所需的编译参数。注意增加参数时,上一行尾添加 \
5、根据 mysql.spec 文件构建自定义生成的RPM包,生成的RPM包放在 ~/rpmbuild/RPMS/x86_64 文件夹下
#rpmbuild -bb mysql.spec
------------------------------------------
rpmbuild这个工具打包的过程大致如下:
编写spec指定打包的过程
将源码压缩包放在SOURCES目录下,
将源码解压缩到BUILD目录,执行make命令
将make install 的结果放在BUILDROOT目录下,
最后将BUILDROOT下编译好的二进制文件制作成RPM包。
并且可以指定在RPM安装之前,安装之后,卸载等过程执行的命令
mysql.spec文件示例:
Name: mysql
Version:5.5.37
Release: %(echo $RELEASE)%{?dist}
License: GPL
URL: http://downloads.mysql.com/archives/get/file/mysql-5.5.37.tar.gz
Group: applications/database
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
Packager: wjoyxt@126.com
Autoreq: no
#Source: %{name}-%{version}.tar.gz
prefix: /project/class2/mysql
Summary: MySQL 5.5.37
%description
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
and robust SQL (Structured Query Language) database server. MySQL Server
is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software.
%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%define __os_install_post %{nil}
%build
cd $OLDPWD/../
CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
CXX=g++
CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
export CFLAGS CXX CXXFLAGS
cmake . \
-DSYSCONFDIR="%{prefix}" \
-DCMAKE_INSTALL_PREFIX="%{prefix}" \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_PROFILING=1 \
-DWITH_DEBUG=0 \
-DWITH_VALGRIND=0 \
-DENABLE_DEBUG_SYNC=0 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_SSL=bundled \
-DWITH_UNIT_TESTS=0 \
-DWITH_ZLIB=bundled \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=0 \
-DINSTALL_LAYOUT=STANDALONE \
-DCOMMUNITY_BUILD=1 \
-DWITH_READLINE=1 \
-DMYSQL_SERVER_SUFFIX='-r5436'
make -j `cat /proc/cpuinfo | grep processor| wc -l`
%install
cd $OLDPWD/../
make DESTDIR=$RPM_BUILD_ROOT install
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*
%pre
%post ln -s %{prefix}/lib %{prefix}/lib64
%preun
%changelog
参考资料:http://blog.csdn.net/renfengjun/article/details/41635101
cmake . \
-DSYSCONFDIR="/opt/mysql" \
-DCMAKE_INSTALL_PREFIX="/opt/mysql" \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_PROFILING=1 \
-DWITH_DEBUG=0 \
-DWITH_VALGRIND=0 \
-DENABLE_DEBUG_SYNC=0 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_SSL=bundled \
-DWITH_UNIT_TESTS=0 \
-DWITH_ZLIB=bundled \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=0 \
-DINSTALL_LAYOUT=STANDALONE \
-DCOMMUNITY_BUILD=1 \
-DWITH_READLINE=1 \
-DMYSQL_SERVER_SUFFIX='-r5436'
---------------------------------------------------------------------------------------
RPM包制作过程
1、 将需要制作的源码包放到/usr/src/redhat/SOURCES 目录下
2、 在/usr/src/redhat/SPECS 目录下编写SPEC脚本
3、 在/usr/src/redhat/SPECS目录下,输入 rpmbuild –bb “spec文件的名字” 以后,就开始编译了
4、 编译成功以后,在/usr/src/redhat/RPMS/x86_64下会找到所编译成功的RPM包
实际上RPM包的制作原理就是根据spec脚本文件,将软件安装到指定的虚拟目录中,按照指定的格式进行打包。安装RPM包的时候,按照指定的格式安装到指定的目录下。
Linux下基于官方源代码RPM包构建自定义MySQL RPM包的更多相关文章
- Linux下基于.NET5开发CAX应用
<<.NET5下的三维应用程序开发>>一文中介绍了如何在.NET5下使用AnyCAD开发应用程序.相比.NET4.x,.NET5一大进步便是可以跨平台,即可以在Linux.Ma ...
- Linux下基于LDAP统一用户认证的研究
Linux下基于LDAP统一用户认证的研究 本文出自 "李晨光原创技术博客" 博客,谢绝转载!
- Linux下Maven私服Nexus3.x环境构建操作记录【转】
Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...
- Linux下Maven私服Nexus3.x环境构建操作记录
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79553747 私服介绍 私服是指私有服务器,是架设在局域网的一种特殊的远程仓库, ...
- Linux下基于LVM调整分区容量大小的方法
Linux下调整分区容量大小的方法(适用于centos6-7) 说明:以下方法均使用centos6.9和centos7.4进行测试. Centos6分区容量调整方法 1.web分区空间不足,新添加一块 ...
- Linux下基于多线程的echo
准备开始写一些Linux 下网络编程以及多线程的blog,就从这个简单的echo程序开始吧. 在echo的服务端使用多线程与客户进行通信,可以实现一个服务端程序同时连接多个客户的功能.那么,到底在服务 ...
- 【linux】linux下yum安装后Apache、php、mysql默认安装路径
原文:http://blog.csdn.NET/u010175124/article/details/27322757apache:如果采用RPM包安装,安装路径应在 /etc/httpd目录下apa ...
- linux下memcached安装 和redis安装,jdk,tomcat,mysql 安装
一.memcached安装yum search memcachedyum -y install memcachedmemmcached -h service memcached restartc ...
- linux下部署php项目-Apache、php、mysql关联
linux下部署php项目环境可以分为两种,一种使用Apache,php,mysql的压缩包安装,一种用yum命令进行安装. 使用三种软件的压缩包进行安装,需要手动配置三者之间的关系.apache和p ...
随机推荐
- gphoto2 canon eos450d
hjs@ubuntu:~$ gphoto2 --capture-image-and-download ...
- 常见企业IT支撑【6、跳板机Jumpserver】
Jumpserver是国内一款开源的轻便的跳板机系统,他们的官网:http://www.jumpserver.org/ 使用这款软件意在提高公司内部登录生产环境服务器的便捷性,权限分配细化,以及后台管 ...
- gcc gdb调试 (三)
编写代码过程中少不了调试.在windows下面,我们有visual studio工具.在linux下面呢,实际上除了gdb工具之外,你没有别的选择.那么,怎么用gdb进行调试呢?我们可以一步一步来试试 ...
- C# 5.0中引入了async 和 await
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...
- css transition transform animation例子讲解
1.transition属性: transition属性是一个速记属性有四个属性:transition-property , transition-duration, transition-timin ...
- JavaWeb中读取文件资源的路径问题 -- 转自新浪博客
在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存 ...
- DOM操作之获取HTML、文本和值
在前面的知识中,我们有提到一个text()方法用来获取文本,其实,在jQuery中,获取HTML和文本的方法有很多,下面依次演示这些方法. 在开始操作前,我们先在html中添加如下代码,后期所有的操作 ...
- GIS(地理信息系统)
ylbtech-杂项:GIS(地理信息系统) 地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统 ...
- crontab 执行脚本,报错/home/scripts/eyeMonitor.sh: line 8: node: command not found
报错现象:在shell下执行node没有任何问题,但crontab自动运行就会报错. 原因:node的安装路径:/root/.nvm/versions/node/v6.7.0/bin/node Sh ...
- 1030 Travel Plan (30 分)
1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, toge ...