【编译打包】Atlas-2.2.1-1.el7.centos.src.rpm

Atlas 是奇虎360 开源的一个数据库中间件,基于mysql-proxy,做了大量改造,是一个适合国情的高性能的mysql中间件。

官方提供源码下载和rpm下载,但是发现没有SRPM源码包,于是研究了一番,发现了不少问题,自行实现了spec文件,主要解决如下问题:

1、依赖包问题

2、实现了标准的init脚本,去掉了丑陋的mysql-proxyd

3、使用普通用户权限运行mysql-proxy

4、同时支持CentOS 6和CentOS 7

5、文件路径按照Linux 目录树标准FHS进行分布(/usr/local不符合rpm规范)

6、支持开发包(github上有人提问找不到头文件)

本着GPL精神,我希望将成果贡献给官方,以改进安装体验。Atlas.spec文件内容如下:

%global _enable_debug_package 0
%global debug_package %{nil}
%global __os_install_post /usr/lib/rpm/brp-compress %{nil}

Name:           Atlas
Version:        2.2.1
Release:        1%{?dist}
Summary:        A Proxy for the MySQL Client/Server protocol

License:        GPL
URL:            https://github.com/Qihoo360/Atlas

Source0:        %{name}-%{version}.tar.gz
Source1:        mysql-proxy.cnf
Source2:        mysql-proxy.init

BuildRequires:  flex,libtool
BuildRequires:  glib2-devel >= 2.32.0
BuildRequires:  jemalloc-devel
BuildRequires:  libevent-devel
BuildRequires:  lua-devel >= 5.1
BuildRequires:  mysql-devel
BuildRequires:  openssl-devel
BuildRequires:  pkgconfig

Requires:       openssl
Requires:       jemalloc
Requires:       mysql
Requires:       lua >= 5.1

Conflicts:      mysql-proxy
ExcludeArch:    x86

%description
Atlas is a MySQL protocol-based database middleware project developed
and maintained by infrastructure team of  the Web platform  Department
in QIHU 360 SOFTWARE CO. LIMITED(NYSE:QIHU). It fixed lots of bugs and
added lot of new functions on the basis of MySQL-Proxy 0.8.2.
Currently the project has been widely applied in QIHU,
many MySQL business has connected to the Atlas platform.
The number of read and write requests forwarded by Atlas has reached billions.

%package devel
Summary:    Development files for Atlas
Requires:   Atlas = %{version}-%{release}

%description devel
Development files for Atlas

%prep
%setup -q

%build
%configure         --with-lua         CFLAGS="$CFLAGS -DHAVE_LUA_H"         LDFLAGS="$LDFLAGS -lm -ldl -lcrypto -ljemalloc"

make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
%{__make} DESTDIR=$RPM_BUILD_ROOT install

%{__mkdir} -p $RPM_BUILD_ROOT%{_localstatedir}/log/mysql-proxy
%{__mkdir} -p $RPM_BUILD_ROOT%{_sysconfdir}/mysql-proxy
%{__mkdir} -p $RPM_BUILD_ROOT%{_initrddir}

%{__install} -m 644 -p %{SOURCE1}    $RPM_BUILD_ROOT%{_sysconfdir}/mysql-proxy/mysql-proxy.cnf

%{__install} -m755 %{SOURCE2}    $RPM_BUILD_ROOT%{_initrddir}/mysql-proxy

%clean
%{__rm} -rf $RPM_BUILD_ROOT
make -s clean

%pre
getent group  mysql >/dev/null || groupadd -g 27 -o -r mysql
getent passwd mysql >/dev/null ||     useradd -u 27 -M -N -o -r -g mysql -s /bin/bash     -d /var/lib/mysql mysql
exit 0

%post
ldconfig
chkconfig --add mysql-proxy || :

%postun
ldconfig
chkconfig --del mysql-proxy || :

%files
%defattr(-,root,root,-)
%{_bindir}/mysql-proxy
%{_bindir}/encrypt
%{_bindir}/mysql-binlog-dump
%{_bindir}/mysql-myisam-dump
%exclude %{_bindir}/mysql-proxyd
%config(noreplace) %{_sysconfdir}/mysql-proxy/mysql-proxy.cnf
%{_initrddir}/mysql-proxy
%dir %attr(0755,mysql,mysql) %{_localstatedir}/log/mysql-proxy
%dir %{_libdir}/mysql-proxy
%{_libdir}/mysql-proxy/lua/*
%{_libdir}/mysql-proxy/plugins/*
%{_libdir}/libmysql-*
%{_libdir}/libsql-*
%doc examples/

%files devel
%defattr(-,root,root,-)
%{_includedir}/*.h
%{_libdir}/pkgconfig/mysql-chassis.pc
%{_libdir}/pkgconfig/mysql-proxy.pc

%changelog
* Thu Nov 26 2015 Purple Grape <[email protected]>
- fresh build

注:

1、官方只提供el6的rpm包,但是在CentOS 6上编译,会有依赖不足的问题,glib2版本必须大于2.32.0(CentOS 6官方自带的是2.28.8),于是我将cenots 7的glib2 (2.40.0版本)向下移植到了centos 6,用于解决依赖问题。具体见下面的链接。

百度网盘地址:http://pan.baidu.com/s/1pJpJzo3

时间: 2024-10-08 08:56:54

【编译打包】Atlas-2.2.1-1.el7.centos.src.rpm的相关文章

【编译打包】twemproxy-0.4.0-2.el7.centos.src.rpm

twemproxy 又叫netcracker,是一个高性能的协议路由器(代理服务器),可用于memcached/redis 集群,支持数据分片. 在国外兜了一圈也没发现有人对其进行rpm打包,估计大家都在等redis 3.0 cluster 吧.于是研究了一下,顺手写了个spec 文件.编译安装对autoconf 和m4 有版本要求,所以这个srpm包 只能在centos 7 工作,centos6 上无法直接使用,除非升级依赖包. 由于对centos 7 的systemd 的开机启动脚本还不太熟

【编译打包】twemproxy-0.4.1-7.el7.centos.src.rpm

twemproxy 是一个快速且轻量级的memcached/redis 反向代理服务器,用于搭建轻量级的memcached/redis集群. 跟之前的打包版本相比,改进如下 1.版本升级为0.41 2.更好的解决依赖问题 3.使用普通用户身份执行 4.systemd支持 使用方法: unzip twemproxy.zip cd twemproxy ls #twemproxy-0.4.1-7.el7.centos.src.rpm  twemproxy-0.4.1-7.el7.centos.x86_

【编译打包】fastdfs-5.0.5-7.el7.centos.src.rpm

官方的spec文件功能不够完整,仅仅能够完成rpm打包,但是rpm包安装时会有各种问题.极少看到有人反馈spec文件问题,估计使用rpm包进行安装的,只有我一人.而使用rpm安装,可以省略重复无意义且容易出错的编译过程,提升软件安装体验. (文末有百度网盘的链接) 我对官方的spec文件进行了大幅改造,对默认配置文件也进行了适当调整,改进如下: 1.启动脚本 /usr/bin/stop.sh 和/usr/bin/restart.sh 名字过于霸气,抛弃! 原fdfs_trackerd和fdfs_

Java 编译打包命令

背景 编译 打包 解压 运行 参考 背景 我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活 编译 比如我要编译包名为 com.demo,全称为 com.demo.Main 的这个类,同时将生成的文件指定到当前目录下的 bin 文件夹下,那么在么做呢? Main.java 内容: 1 package com.demo; 2 public class Main{ 3 4 public s

使用mysql5.7.16头文件库文件编译安装atlas

最近mysql数据库升级到5.7.16,而中间件atlas之前是基于mysql5.6编译的,打算重新编译下atlas并使用mysql5.7.16的库文件头文件.这里主要介绍下编译过程遇到问题及解决方法. 由于需要glib版本要大于2.32以上,centos6.6系统自带的glib版本为2.28,因此需要重新编译安装2.32以上的glib,这里安装2.34版本的glib需要依赖pcre大于8.31 一.编译安装pcre8.35 # ./configure --prefix=/usr/local/g

前端工程编译打包优化尝试

近期对公司前端项目的文件组织结构和编译打包方式做了一些调整,记录如下. 1. 文件结构总览 1.1 开发环境说明 随着项目逐渐庞大,考虑到代码的组织维护以及项目架构的可扩展性,采用前后端分离的部署方案.前端项目作为独立的项目维护,由后台提供Restful API进行交互. 前端项目采用了AngularJS框架,Jade模板编写网页,基于Nodejs环境使用bower进行依赖管理,使用gulp编译和打包. 1.2 项目文件总体结构 app:使用gulp编译打包生成的路径: master:jade.

Ant编译打包Android工程流程

一.Ant编译打包android工程步骤 二.Ant apk签名 1.keystore签名    定义自己的签名文件 生成keystore文件:keytool -genkey -alias android.keystore -keyalg RSA - validity 20000 -keystore android.keystore 对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.

Storm-0.9.2-incubating源代码编译打包

近期遇到一些同学询问Storm-0.9.2-incubating源代码编译打包的问题,现将编译步骤说明例如以下: 1.凝视掉project各pom文件里关于maven插件(maven-gpg-plugin)的内容,目的是规避错误: 当然,该错误也能够忽略,即能够不进行上述凝视操作 2.在project根文件夹下运行maven命令: mvn clean compile package -P dist -Dmaven.test.skip=true 3.进入文件夹:storm-dist/binary,

ANT编译打包&WIFI调试& adb shell常用命令

ANT编译打包 1:用ADT工具自带的打包:    1:切换到项目目录: 运行,android update project -p . android update project -p ./ --library ../com.example.plugin1.ifs 2:刷新:多了两个目录, 3:local.properties配置: sdk.dir=E:\\samy\\adt-huixin_x86-20140321\\sdk  key.store=./keystore/**** key.sto