如何制作RPM包

部署服務(wù)過程中經(jīng)常獲取代碼,安裝的需求,一般運維方法有寫安裝腳本,在將腳本和包遠程cp到目標(biāo)文件。因為有些繁瑣的步驟,將需要安裝的包,還有腳本打包成RPM包不失為一種高效簡單的方法。目標(biāo)機器只需要加入新的yum源,然后yum install就可以了。

目標(biāo)機器加入新的yum源方法:

新yum源文件格式:test.repo

[test]

name=test - $basearch

baseurl=yum源的地址

enabled=1

gpgcheck=0

cp?test.repo /etc/yum.epo/

下面來講一下制作RPM包的方法:

首先,機器上需要安裝必要的軟件

yum install rpm-build

yum install rpmrebuild

yum install rpmdevtools

想要修改rpmbuild的默認(rèn)路徑,修改文件?/root/.rpmmacros

例如:

cat /root/.rpmmacros

%_topdir /data/rpmbuild

將rpmbuild路徑修改到 /data/rpmbuild下面了。

運行命令,rpmdev-setuptree? 在當(dāng)前目錄下生成rpmbuild 目錄,rpmbuild目錄就是編譯用的目錄。生成的目錄結(jié)構(gòu)為:

rpmbuild/

├── BUILD

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

一、生成??test.spec

將需要的步驟編輯? ?test.spec 文件 放到? rpmbuild/SPECS;

test.spec記錄了變成rpm包的步驟,其中,test.spec包含以下幾個步驟:

第一部分:變量定義

例如:

%global? ? test_dir /opt/test

這三個值分別對應(yīng):?

%變量屬性? 變量名? 變量值

軟件說明,例如Name,Version,Summary 總結(jié)

Source0: 需要用到的文件名?

Source關(guān)鍵字指定所有需要用到的文件

%description 描述

%prep 編譯前的階段,可以做一些解壓包,創(chuàng)建用戶等操作

%build 這個階段為建立前的階段, 如make等操作

%install

部署的關(guān)鍵步驟,安裝包的階段,如 make install

%clean

部署完成之后的清理步驟

%files

部署涉及到的文件,說明文檔(doc),配置文件(config)及執(zhí)行程序,還可定義文件存取權(quán)限,擁有者及組別。

%post

mkdir -p /var/log/supervisord

pip install -r ${RPM_BUILD_ROOT}requirements.txt

如果在安裝完成之后,想要在目標(biāo)機器上執(zhí)行一系列操作,可以把shell命令放在 %post部分。例如以上,安裝完成之后,pip 安裝軟件包。

%changelog

變更日志

%

寫好test.spec是關(guān)鍵一步,里面有很多宏定義和寫作規(guī)范,在制作的過程中,有自己的語法規(guī)則,比如文件 SOURCES 指定編號,后面執(zhí)行這個文件的用途;

關(guān)鍵字介紹:

install命令,可以將文件copy到指定的目錄下,并且指定文件的權(quán)限

install -m 640 %{SOURCE0}/agent/supervisord.conf ${RPM_BUILD_ROOT}/etc/

將%{SOURCE0}/agent/supervisord.conf? 文件cp到?${RPM_BUILD_ROOT}/etc/,cp之后的文件權(quán)限是640。

%setup

setup 安裝之前對代碼包操作,操作的對象是Source0,操作完之后,程序進入到目標(biāo)目錄

setup 可以帶多個參數(shù), 比如?

%setup -q? 相當(dāng)于對源文件的壓縮包執(zhí)行?tar -xof

%setup -u? ?對于Source0中帶有參數(shù)的,可以做參數(shù)的替換

Name: cello

Source0: https://example.com/%{name}/release/hello-%{version}.tar.gz

%prep

%setup -n hello

其中?hello 和?cello 名字是不同的,這種情況下需要執(zhí)行要壓縮的文件名。


%setup -a and -b?

Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz

Source1: examples.tar.gz

%prep

%setup -a 1

Source1 也是壓縮包,在進入到工作目錄之后,Source1也需要操作的時候。 -a after

相應(yīng)的?%setup -b 1 是進入工作目錄之前需要壓縮的文件,-b before

需要的文件放到?rpmbuild/SOURCES 下面。

關(guān)于目錄

首先要確定rpm包在目標(biāo)機器的安裝目錄是什么?編譯目錄和安裝目錄的關(guān)系。

BUILDROOT 下面有關(guān)項目的目錄是在什么時候創(chuàng)建的?

二、命令

spectool -g -R SPECS/test.spec

rpmbuild -bb SPECS/test.spec

可以看出命令執(zhí)行過程,如果順利執(zhí)行完畢,會在?rpmbuild/RPMS 目錄下面生成目標(biāo)rpm包。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容