1
使用rpmdev-setuptree命令,可以在当前用户下生成以下结构文件夹
rpmbuild/
BUILD
RPMS
SOURCES
SPECS
SRPMS
当然,也可以手动新建 cd ~/rpmbuild; mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
2
将准备的包hello-2.8.2.2.tar.gz 放到rpmbuild/SOURCES 必须是 tar.gz 结尾
这里的压缩包的名字 版本号 必须标准化,以下面编辑的 *.spec 文件内存对应
压缩包中的内容是 你要放到 Linux 根文件下的路径结构,hello-2.8.2.2.tar.gz解压开来 是一个文件夹 hello-2.8.2.2/{usr,lib,etc}
3
关键配置文件
#cat SPECS/hello.spec
Name: hello
Version:2.8.2.2
Release:cm5162.p0.7.el7
Summary:xxxxx
Group: System
License:GPL
URL: http://www.cloudera.com
Source0: %{name}-%{version}.tar.gz
BuildRoot: %_topdir/BUILDROOT
#BuildRequires:
Requires: nc,ftp,gcc
%description
测试rpmbuildxxxxxx
%prep
%setup -q
%build #之间不准有空行
%install #之间不准有空行
#make install DESTDIR=%{buildroot}
#rm -rf %{buildroot}/*
cp -rp %_topdir/BUILD/%{name}-%{version}/* %{buildroot} ##很重要
#下面的几步pre、post、preun、postun 没必要可以不写
%pre
echo "rpm安装前制行的脚本"
%post
echo "安装后执行的脚本"
%preun
echo "卸载前执行的脚本"
%postun
echo "卸载后执行的脚本"
rm -rf /usr/tmp/abccccc
%clean
#rm -rf %{buildroot}
%files
/usr/tmp/abccccc #经测试 必须写到abccccc路径,若是只写到/usr或/usr/tmp/ ,按装的时候会包 路径冲突错误
%doc
%changelog
示例
Name:cloudera-manager-agent
Version:5.16.2
Release:cm5162.p0.7.el7
Summary:The Cloudera Manager Agent
Group:System
License:Proprietary
URL:http://www.cloudera.com
Source0:%{name}-%{version}.tar.gz
#BuildRequires:
#Requires:/sbin/chkconfig,python >= 2.4.3-43,bind-utils,psmisc,libxslt,zlib,sqlite,cyrus-sasl-plain,openssl,cyrus-sasl-gssapi,fuse,portmap,cloudera-manager-daemons = 5.16.2,perl,/usr/sbin/ss,/sbin/ip,fuse-libs,/lib/lsb/init-functions,httpd,mod_ssl,openssl-devel,python-psycopg2,MySQL-python
%description
The Cloudera Manager Agent.
The Agent is deployed to machines running services managed by Cloudera Manager.
%prep
%setup -q
%build
%install
cp -rp %_topdir/BUILD/%{name}-%{version}/* %{buildroot}
%pre
%post
#unzip /usr/lib64/cmf/agent.zip
/bin/gzip -r -d /usr/lib64/cmf/agent/build/env/lib64
##为什么会有解压操作
##因为这里的包里有.so结尾的文件,在rpmbuild -bb 制作时,会报一些.so文件ERROR,所以只能先将这些文件提前使用gzip -r .../lib 文件压缩,然后在安装完后再执行解压操作
#gzip 不能压缩文件夹,可以使用gzip -r 文件夹 这样只是把文件夹内的文件全部压成了 .gzip 的文件了
/bin/gzip -r -d /usr/lib64/cmf/agent/build/env/lib
chkconfig --add cloudera-scm-agent
[ -e /usr/share/hue/desktop/desktop.db ] && ([ ! -e /var/lib/hue-db-backup ] && (install -d -o hue -g hue /var/lib/hue-db-backup || mkdir -p /var/lib/hue-db-backup) || true) && (umask 077; cp /usr/share/hue/desktop/desktop.db /var/lib/hue-db-backup/desktop.db.$(date +'%Y%m%d.%H%M%S')) || true
/usr/sbin/useradd cloudera-scm -d /var/lib/cloudera-scm-server -s /sbin/nologin
[ ! -d /var/lib/cloudera-scm-agent ] && mkdir /var/lib/cloudera-scm-agent; chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-agent
[ ! -d /var/log/cloudera-scm-agent ] && mkdir /var/log/cloudera-scm-agent; chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-agent
%preun
service cloudera-scm-agent stop > /dev/null
if [ $1 = 0 ]; then
chkconfig --del cloudera-scm-agent
fi
%postun
echo "卸载后执行的脚本"
#rm -rf /usr/lib64/cmf ##这些删除可加可不加
#rm -rf /usr/sbin/cmf-agent
#rm -rf /etc/cloudera-scm-agent
#rm -rf /etc/init.d/cloudera-scm-agent
#rm -rf /etc/default/cloudera-scm-agent
echo "删除完成"
%clean
%files
#%defattr (-,root,root,0755)
#%attr(644, root, root) %{_lib}/cmf
#%attr(755, root, root) %{_sbindir}/cmf-agent
/etc/cloudera-scm-agent/
##精确到自己的目录,若是直接写 /etc 安装的时候会报 文件冲突
/etc/default/cloudera-scm-agent
/etc/init.d/cloudera-scm-agent
/usr/lib64/cmf
/usr/sbin/cmf-agent
/var/log/cloudera-scm-agent/
%doc
%changelog