【编译打包】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_storaged启动脚本由于调用/usr/bin/stop.sh /usr/bin/restart.sh

新的启动脚本改为调用 /etc/rc.d/init.d/functions 公共函数进行启动、关闭和重启。

2、运行身份

配置文件相关选项默认为空,即探测当前用户身份,这容易误导使用者用root运行程序而造成安全隐患。rpm包安装时会创建普通用户fdfs,配置文件改为,run_by_user=fdfs和run_by_group=fdfs

使用root身份执行启动脚本,程序会自动切换到fdfs用户身份。

4、路径问题

配置文件中的路径,统一归于/var/lib/fastdfs之下,属主fdfs,比如/etc/fdfs/storage.conf

base_path=/var/lib/fastdfs/storage

5、将打包后的二进制包fastdfs-server 拆分成fastdfs-tracker 和fastdfs-storage,便于分别部署。

6、配置文件微调

文件名去掉sample后缀,直接使用conf文件,

将可能被修改的参数放入配置文件前面,方便查找。

附上修改后的fastdfs.spec文件如下:

Name:		fastdfs
Version:	        5.0.5
Release:	        7%{?dist}
Summary:	FastDFS server and client
License:	        GPL
Group:		Arch/Tech
URL:		        https://github.com/happyfish100/fastdfs

BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 

Source0:	%{name}-%{version}.tar.gz

Source1:	fdfs_trackerd.init
Source2:	fdfs_storaged.init
Source10:	fdfs_trackerd.service
Source20:	fdfs_storaged.service

Source3:	tracker.conf
Source4:	storage.conf
Source5:	client.conf
Source6:	http.conf

Requires:	%__cp %__mv %__chmod %__grep %__mkdir %__install %__id

BuildRequires:	gcc
BuildRequires:  glibc-devel
BuildRequires:  libtool
BuildRequires:  make
BuildRequires:	libfastcommon-devel
Requires(post): chkconfig

%description
This package provides tracker & storage of fastdfs

%package  tracker
Summary:  fastdfs tracker
Requires: fastdfs
Requires: libfastcommon

%package  storage
Summary:  fastdfs storage
Requires: fastdfs
Requires: libfastcommon

%package tool
Summary: fastdfs tools
Requires: libfastcommon

%package -n libfdfsclient
Summary: The client dynamic library of fastdfs
Requires: libfastcommon

%package -n libfdfsclient-devel
Summary: The client header of fastdfs
Requires: libfdfsclient

%description tracker
This package provides tracker of fastdfs

%description storage
This package provides storage of fastdfs

%description -n libfdfsclient
This package is client dynamic library of fastdfs

%description -n libfdfsclient-devel
This package is client header of fastdfs client

%description tool
This package is tools for fastdfs

%prep
%setup -q

%build
# FIXME: I need to fix the upstream Makefile to use LIBDIR et al. properly and
# send the upstream maintainer a patch.
# add DOCDIR to the configure part
./make.sh

%install
rm -rf %{buildroot}
DESTDIR=$RPM_BUILD_ROOT ./make.sh install

mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/fdfs
mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/fastdfs/{client,storage,tracker}

cp conf/storage_ids.conf $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/
cp conf/mime.types $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/

rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/init.d/fdfs_storaged 
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/init.d/fdfs_trackerd
rm -rf $RPM_BUILD_ROOT%{_bindir}/restart.sh
rm -rf $RPM_BUILD_ROOT%{_bindir}/stop.sh
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/tracker.conf.sample
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/storage.conf.sample
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/client.conf.sample
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/storage_ids.conf.sample

# install SYSV init stuff
%{__mkdir} -p $RPM_BUILD_ROOT%{_initrddir}
%{__install} -m 755 %{SOURCE1}  $RPM_BUILD_ROOT%{_initrddir}/fdfs_trackerd
%{__install} -m 755 %{SOURCE2}  $RPM_BUILD_ROOT%{_initrddir}/fdfs_storaged
%{__install} -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/tracker.conf
%{__install} -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/storage.conf
%{__install} -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/client.conf
%{__install} -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_sysconfdir}/fdfs/http.conf

%pre
# Add the "fdfs" user
getent group fdfs >/dev/null || groupadd -r fdfs
getent passwd fdfs >/dev/null ||     useradd -r -g fdfs -s /sbin/nologin     -d /var/lib/fastdfs -c "fastdfs user"  fdfs
exit 0

%post tracker
/sbin/chkconfig --add fdfs_trackerd

%preun tracker
service stop fdfs_trackerd || true
/sbin/chkconfig --del fdfs_trackerd

%post storage
/sbin/chkconfig --add fdfs_storaged

%preun storage
service stop fdfs_storaged || true
/sbin/chkconfig --del fdfs_storaged

%postun

%clean
rm -rf $RPM_BUILD_ROOT

pushd common;make -s clean ;popd
pushd tracker;make -s clean ;popd
pushd storage;make -s clean ;popd
pushd test;make -s clean ;popd
pushd client ;make -s clean ;popd

%files
%defattr(-,root,root,-)
%dir %{_sysconfdir}/fdfs
%dir %attr(0755,fdfs,fdfs) %{_sharedstatedir}/fastdfs

%files tracker
%defattr(-,root,root,-)
%{_bindir}/fdfs_trackerd
%{_initrddir}/fdfs_trackerd
%config(noreplace) %{_sysconfdir}/fdfs/tracker.conf
%dir %attr(0755,fdfs,fdfs) %{_sharedstatedir}/fastdfs/tracker

%files storage
%defattr(-,root,root,-)
%{_bindir}/fdfs_storaged
%{_initrddir}/fdfs_storaged
%config(noreplace) %{_sysconfdir}/fdfs/storage.conf
%dir %attr(0755,fdfs,fdfs) %{_sharedstatedir}/fastdfs/storage

%files -n libfdfsclient
%{_libdir}/libfdfsclient*
%config(noreplace) %{_sysconfdir}/fdfs/client.conf
%config(noreplace) %{_sysconfdir}/fdfs/http.conf
%config(noreplace) %{_sysconfdir}/fdfs/mime.types
%config(noreplace) %{_sysconfdir}/fdfs/storage_ids.conf
%dir %attr(0755,fdfs,fdfs) %{_sharedstatedir}/fastdfs/client

%files -n libfdfsclient-devel
%defattr(-,root,root,-)
%{_includedir}/fastdfs/*

%files tool
%{_bindir}/fdfs_monitor
%{_bindir}/fdfs_test
%{_bindir}/fdfs_test1
%{_bindir}/fdfs_crc32
%{_bindir}/fdfs_upload_file
%{_bindir}/fdfs_download_file
%{_bindir}/fdfs_delete_file
%{_bindir}/fdfs_file_info
%{_bindir}/fdfs_appender_test
%{_bindir}/fdfs_appender_test1
%{_bindir}/fdfs_append_file
%{_bindir}/fdfs_upload_appender

%changelog
* Thu Nov 05 2015  Purple Grape <[email protected]>
- new init scripts
- run as user fdfs by default

* Mon Jun 23 2014  Zaixue Liao <[email protected]>
- first RPM release (1.0)

附件数量较多,移步百度网盘

http://pan.baidu.com/s/1pJszKHP

如果将srpm包经过重新编译,也适用于CentOS 6

时间: 2024-10-15 07:54:05

【编译打包】fastdfs-5.0.5-7.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_

【编译打包】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进行分

在Eclipse配置并编译worldwind java2.1.0源码,选中Src目录下gov.nasa.worldwindx.examples包下ApplicationTemplate.java类文件run时提示“javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V”异常的解决办法

问题现象: 在Eclipse配置并编译worldwind java2.1.0源码,选中Src目录下gov.nasa.worldwindx.examples包下ApplicationTemplate.java类文件run时提示“javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V”异常. 解决办法: 1.定位到报错的方法为WWXML.java文件中的createDocumentBuilder方法: pub

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的,大多又是 0.20 等旧版本版本的做法,即 javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java,但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此

Java 编译打包命令

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

如何编译Apache Hadoop2.6.0源代码

如何编译Apache Hadoop2.6.0源代码 1.安装CentOS 我使用的是CentOS6.5,下载地址是http://mirror.neu.edu.cn/centos/6.5/isos/x86_64/,选择CentOS-6.5-x86_64-bin-DVD1.iso 下载,注意是64位的,大小是4GB,需要下载一段时间的.其实6.x的版本都可以,不一定是6.5. 我使用的是VMWare虚拟机,分配了2GB内存,20GB磁盘空间.内存太小,会比较慢:磁盘太小,编译时可能会出现空间不足的情

6.命令行编译打包运行五个MapReduce程序

对于如何编译WordCount.java,对于0.20 等旧版本版本的做法很常见,具体如下: javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java 但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此编辑和打包自己的MapReduce程序与旧版本有所不同. Hadoop 2.x 版本中的依赖 jar Hadoop 2.x 版本中jar不再集中在一个

编译打包

一.Tarball: (一)文件格式*.tar.gz/*.tar.bz2,解压后包括源代码文件.检测程序文件.相关说明. (二)安装的基础操作: 1.取得源文件,解压 2.查阅解压后的文件(INSTALL/README)取得步骤流程 3.相关属性软件的安装 4.建立makefile:./configure 5.编译make 6.安装:make install (三)利用patch更有源码 下载更新源码文件patch_file,patch.重新编译.安装 二.RPM (一)文件格式:*.rpm (