部署服務(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包。