Centos 7 bind服务rpm包制作
1.安装 rpm-build 包
yum install rpm-build
rpmbuild --version
2.安装 rpmdevtools
yum install rpmdevtools
3.创建工作空间
rpmdev-setuptree是rpmdevtools中带的初始化环境脚本,执行后会在用户主目录下创建rpmbuild目录和.rpmmacros文件,同时生成所需的子目录和默认的控制参数,执行:
rpmdev-setuptree
自动生成的目录结构:
-- rpmbuild
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
|-- SRPMS
4.创建 SPEC 文件
SPEC文件控制整个rpm的打包过程,包含了打包的全部信息和控制参数,可以使用 rpmdev-newspec 命令来创建一个初始的SPEC文件,SPEC文件需放入rpmbuild/SPECS目录
rpmdev-newspec named.spec
SPEC 脚本主要定义了打包过程中的几个阶段的配置:
(1)信息定义阶段 :定义软件包的名字、版本等信息和打包过程中用到的变量等
(2)制作准备阶段 :解压源码包、补丁包并打补丁
(3)编译阶段 :设置编译参数并编译源码
(4)安装阶段 :定义安装过程所执行的命令,包括安装前、安装后、卸载前、卸载后执行的操作
(5)清理阶段 :清理打包过程中用到的目录文件等
(6)文件设置阶段 :要打包的文件和目录,并设置文件权限等
# 1.信息定义阶段
### 自定义打包
%define _binaries_in_noarch_packages_terminate_build 0
### 软件名字,要与spec的文件名一致
Name: named
### 软件主版本号
Version: 1.1.0
### 发行编号,每打包一次值递增,主版本号发布新版后需重置该值
Release: 0
### 一行简短的软件简介,结尾不要加标点
Summary: om dns service
### 软件许可
License: Apache 2.0
### 类别
Group: Applications/Internet
### 软件项目主页
URL: https://www.qianxin.com
### 放置在SOUIRCES目录的软件源码包名,可以指定多个:source1、source2等
#Source0: %{name}.%{version}.tar.gz
### 在 install 阶段的测试安装目录,方便写files
#buildroot: %_topdir/BUILDROOT
#BuildRequires: go
### 安装软件包时所需的依赖包列表,可以指定版本如 bash >= 1.1.1
#Requires: readline-devel,pcre-devel,openssl-devel
Source0: named-1.1.0.tar.gz
Prefix: /usr/local
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-root
Provides: named
Requires(post): /sbin/chkconfig, /sbin/service
Requires(preun): /sbin/chkconfig, /sbin/service
### 程序的详细多行描述,每行必须小于等于 80 个字符,空行表示开始新段
%description
named 1.1.0
# 2.准备阶段
%prep
## 静默模式解压并进入解压后的目录,也常用:%autosetup -n %{name}
# 3. 编译阶段
%build
# 4.安装阶段
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/named
mkdir -p $RPM_BUILD_ROOT/etc/init.d
mkdir -p $RPM_BUILD_ROOT/var/log/named
tar xfz $RPM_SOURCE_DIR/named-%{version}.tar.gz
cp -r $RPM_BUILD_DIR/named $RPM_BUILD_ROOT/usr/local/
## rpm安装前制行的脚本
%pre
if [ $1 == 1 ];then
/usr/sbin/useradd -u 500 named 2> /dev/null
[ ! -d '/var/log/named' ] && mkdir -p /var/log/named
fi
## rpm安装后制行的脚本
%post
chmod +x /usr/local/named/inst/named
bash /usr/local/named/inst/init.sh
###卸载前执行的脚本
%preun
###卸载后执行的脚本
%postun
rm -rf /usr/local/named
/sbin/chkconfig --del named
# 5.清理阶段
%clean
rm -rf $RPM_BUILD_ROOT
# 6.文件设置阶段
%files
### 设定默认权限,如果下面没有指定权限,则继承默认
%defattr (-,named,named)
/usr/local/named
/var/log/named
%doc
%changelog
编写完 SEPC 文件后,可以通过 rpmlint 检查是否有配置错误
rpmlint named.spec
5.执行打 rpm 包命令
cd /root/rpmbuild/SPECS
rpmbuild -ba named.spec
6.安装测试RPM包
rpm -Uvh named-1.1.0-1.x86_64.rpm