1.安裝 rpm-build 包
yum install rpm-build
可以先查看下rpmbuild版本,如果有就不需要再安裝了
rpmbuild --version
2.安裝 rpmdevtools
yum install rpmdevtools
3.創(chuàng)建工作空間
rpmdev-setuptree是rpmdevtools中帶的初始化環(huán)境腳本铆隘,執(zhí)行后會在用戶主目錄下創(chuàng)建rpmbuild目錄和.rpmmacros文件缔赠,同時(shí)生成所需的子目錄和默認(rèn)的控制參數(shù)缰猴,執(zhí)行:
rpmdev-setuptree
自動生成的目錄結(jié)構(gòu):
-- rpmbuild
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
|-- SRPMS
4.創(chuàng)建 SPEC 文件
SPEC文件控制整個(gè)rpm的打包過程避诽,包含了打包的全部信息和控制參數(shù),可以使用 rpmdev-newspec 命令來創(chuàng)建一個(gè)初始的SPEC文件踪旷,SPEC文件需放入rpmbuild/SPECS目錄
rpmdev-newspec zookeeper.spec
SPEC 腳本主要定義了打包過程中的幾個(gè)階段的配置:
(1)信息定義階段 :定義軟件包的名字植捎、版本等信息和打包過程中用到的變量等
(2)制作準(zhǔn)備階段 :解壓源碼包衙解、補(bǔ)丁包并打補(bǔ)丁
(3)編譯階段 :設(shè)置編譯參數(shù)并編譯源碼
(4)安裝階段 :定義安裝過程所執(zhí)行的命令,包括安裝前、安裝后焰枢、卸載前蚓峦、卸載后執(zhí)行的操作
(5)清理階段 :清理打包過程中用到的目錄文件等
(6)文件設(shè)置階段 :要打包的文件和目錄,并設(shè)置文件權(quán)限等
目前我的SPEC沒有指定軟件源碼包路徑(Source0參數(shù))医咨,我是直接將文件夾打包枫匾,所直接將文件夾放到/root/rpmbuild/BUILDROOT/apache-zookeeper-3.6.1-1.x86_64/opt/zookeeper(opt/zookeeper必須是根據(jù)大家自己配置的打包目錄一致)
# 1.信息定義階段
### 軟件名字,要與spec的文件名一致
Name: apache-zookeeper
### 軟件主版本號
Version: 3.6.1
### 發(fā)行編號拟淮,每打包一次值遞增干茉,主版本號發(fā)布新版后需重置該值
Release: 1
### 一行簡短的軟件簡介,結(jié)尾不要加標(biāo)點(diǎn)
Summary: Zookeeper is a highly reliable distributed coordination service
Group:
### 軟件許可
License: Apache 2.0
### 軟件項(xiàng)目主頁
URL: https://zookeeper.apache.org/
### 放置在SOUIRCES目錄的軟件源碼包名很泊,可以指定多個(gè):source1角虫、source2等
#Source0: %{name}.%{version}.tar.gz
### 在 install 階段的測試安裝目錄,方便寫files
#buildroot: %_topdir/BUILDROOT
#BuildRequires: go
### 安裝軟件包時(shí)所需的依賴包列表委造,可以指定版本如 bash >= 1.1.1
#Requires: readline-devel,pcre-devel,openssl-devel
### 程序的詳細(xì)多行描述戳鹅,每行必須小于等于 80 個(gè)字符,空行表示開始新段
%description
Zookeeper 3.6.1
# 2.準(zhǔn)備階段
%prep
## 靜默模式解壓并進(jìn)入解壓后的目錄,也常用:%autosetup -n %{name}
# 3. 編譯階段
%build
# 4.安裝階段
%install
### 刪除之前的殘留文件
## rpm安裝前制行的腳本
%pre
### $1==1 代表的是第一次安裝昏兆,2代表是升級枫虏,0代表是卸載
#if [ $1 == 1 ];then
# /usr/sbin/useradd -r %{nginx_user} 2> /dev/null
#fi
## rpm安裝后制行的腳本
%post
###卸載前執(zhí)行的腳本
%preun
###卸載后執(zhí)行的腳本
%postun
rm -rf opt/zookeeper
# 5.清理階段
%clean
### 刪除buildroot目錄
rm -rf %{buildroot}
# 6.文件設(shè)置階段
%files
### 設(shè)定默認(rèn)權(quán)限,如果下面沒有指定權(quán)限爬虱,則繼承默認(rèn)
%defattr (-,root,root)
###要打包的文件和目錄隶债,在執(zhí)行完rpmbuild -bi后,參考%{rootbuild}下生成的文件和目錄
/opt/zookeeper
編寫完 SEPC 文件后跑筝,可以通過 rpmlint 檢查是否有配置錯(cuò)誤
rpmlint motan-go.spec
5.執(zhí)行打 rpm 包命令
cd /root/rpmbuild/SPECS
rpmbuild -ba zookeeper.spec
6.安裝測試RPM包
rpm -Uvh apache-zookeeper-3.6.1-1.x86_64.rpm
******特別備注下死讹,如果需要編譯的程序在編譯前可以指定到同一目錄打包然后整個(gè)目錄打包
例:export DESTDIR=/opt/zookeeper
./make.sh
./make.sh install
參考資料
ZooKeeper從源碼到RPM包制作過程詳解
http://www.erik-ly.com/2019/12/29/ZooKeeper-rpm/
CentOS 如何打 RPM 包
https://idevz.org/2017/07/centos-%E5%A6%82%E4%BD%95%E6%89%93-rpm-%E5%8C%85/