一 事因:

线上要配置一个软件,不需要编译,直接把目录cp上去就行,但是需要简单的执行几条命令。

现有配管系统可以直接搞个目录然后写两条执行命令即可。总感觉要标准化点。。。 搞个rpm包吧。

延伸到rpmbuild打包文件和目录 以及执行一些命令。

先白话点没用的:

农业耕作 起源于 刀耕火种 进化到 牲畜耕作 进化到 机械化自动化

运维也是如此呀,开始是 各种源码编译,然后是rpm安装,现在是docker镜像。。


原始点比较有代表性的 curl 以及 wget 安装。。。 

 curl -SsL xxx/xx.sh | bash  或者 wget -SO/tmp/  http://ssss/xxxx.tar.gz 然后执行安装命令


进化到rpm包,以及配管系统

puppet、cfengine、chef、func、fabric、salt


到现在的docker

各种镜像


二 这事怎么搞:

简单说就行怎么打包文件 和 目录:

spec文件

#cd  ~/rpmbuild/SPECS
#cat test-1.0.0.spec 
Name:test 
Version: 1.0.0
Release: 1%{?dist}
License: GPL
SOURCE: %{name}-%{version}.tar.gz 
Group: Customize / Daemons
Packager: [email protected]
URL:http://sssss.com.cn
Summary: GUN X86_64 flume
AutoReqProv: no
%description
Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, 
and moving large amounts of log data. It has a simple and flexible architecture based on 
streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms 
and many failover and recovery mechanisms. It uses a simple extensible data model that allows for 
online analytic application.
%prep
#echo "在安装之前执行的命令,可以替换为创建目录 创建用户等"
rm -rf $RPM_BUILD_ROOT/*
%setup -q
#id kafka || sudo useradd kafka -s /sbin/nologin
%install
install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
%files
%defattr(-,kafka,kafka,-) 
/data0/test/
#%attr(0755,root,root)

%doc
%changelog


源文件夹:

#cd  ~/rpmbuild/SOURCE
#mkdir -p test-1.0.0/data0/test/
#touch test-1.0.0/data0/test/sss.txt
# tar zcvf test-1.0.0.tar.gz test-1.0.0
test-1.0.0/
test-1.0.0/data0/
test-1.0.0/data0/test/
test-1.0.0/data0/test/sss.txt


打包下:

rpmbuild -ba flume-1.8.0.spec

忽略我丑陋的白条条


安装个试试:

#sudo rpm -ivh /usr/home/tenghe/rpmbuild/RPMS/x86_64/test-1.0.0-1.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:test                ########################################### [100%]
# sudo rpm -ql test 
/data0/test
/data0/test/sss.txt

就这样,就把文件 或者说目录搞到机器上了,然后就可以把rpm拿去部署了。


三 简单说几句:

补充说明两点:

1 注意目录层级关系,如果不清楚,可以写个创建看报错,然后慢慢调整。

2 注意打包的文件中是否有库文件,rpmbuild过程默认是自动处理依赖关系,哪怕只是上面这种cp 也会报错

   这时候需要用参数关闭解析依赖:

AutoReqProv: no

   注意 这个在正常制作rpm包的时尽量不要关闭。

The autoreqprov, autoreq, and autoprov Tags — Disable Automatic Dependency Processing
There may be times when RPM‘s automatic dependency processing is not desired. In these cases, the autoreqprov, autoreq, and autoprov tags may be used to disable it. This tag takes a yes/no or 0/1 value. For example, to disable automatic dependency processing, the following line may be used:
AutoReqProv: no      The autoreq and autoprov tags can be used to disable automatic processing of requirementsor "provides" only, respectively.

当autoreqprov 打开时,在RPM 包编译的时候,会执行以下操作:

1)所有打包进RPM的二进制程序需要的共享库都会被分析出来,然后打包进RPM的  requirements 中。

2)所有该RPM提供的 so 文件的名字都会被自动添加到该RPM的 provides 中


事情很简单,但是踩坑了,因为刚才说的两点。。。 特别是第二点,明明就是cp个目录而已,依赖的一堆的库,,, 看着就闹心。

现在记录掉的头发,告知于新手。。。