RPM包製作
阿新 • • 發佈:2021-01-20
RPM包能製作什麼
- 一個應用程式
- 庫檔案
- 配置檔案
- 文件包
製作步驟
創建制作目錄
- BUILD
原始碼解壓以後,放在這個目錄,不用使用者參與,只需提供這個目錄,真正的製作車間。
- RPMS
製作完成的RPM包放在這個目錄。有子目錄,跟硬體架構相關,特定平臺子目錄,i386,ARM等等。交叉編譯。
- SOURCES
所有的原材料。
- SPECS
spec檔案存放目錄,製作RPM包的綱領性檔案。軟體包名.spec。
- SRPMS
SRC格式的RPM包存放目錄。沒有平臺相關的概念。
注意:一般製作RPM包,建議不要用root使用者,所以,以上製作目錄結構,建議使用普通使用者建立,不要用系統預設的。
- 巨集定義
macrofiles:~/.rpmmacros,以最後這個為準
rmpbuild –showrc|grep _topdir
所以切換普通使用者1
%_topdir /home/xxx/rpmbuild
命令:
1
|
# mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
把原始檔放進適當目錄
製作spec檔案(至關重要)
資訊說明段(introduction section)Name,Version,Release,Group必須,其他可選。
rpm -qpi 可以檢視一個rpm包的相關資訊
定義各種tag
- Name:軟體包的名字
- Relocations:是否可換安裝地址。not relocatable
- Version:版本號,至關重要,只能用X.XX.XXX不能使用-
- Release:發行版本號 1%{?dist}
- License:宣告版權,例如:GPLv2
- Group:屬於那個組,不要自己定義,在以下組裡找,只要存在的組就可以 less /usr/share/doc/rpm-4.4.2.3/GROUPS
- URL
- Packager:製作者<郵箱>
- Vendor:提供商
- Summary:概要
- %description:描述
- Source:原始檔,連結,Source0:解壓縮主原材料,Source1:指令碼等等
- BuildRoot:編譯好的程式,臨時安裝根目錄,配合file section,收集哪些檔案,打包到RPM包,最後在clean section中刪除。可以規定任意目錄:/%{_tmppath}/%{name}-%{version}-%{release}-root
- BuildRequires:定義依賴關係,編譯依賴和安裝依賴。
準備段prep section
解壓縮原始碼包到製作目錄,cd進去,設定工作環境、巨集,等等。
單獨的巨集來定義:
- %prep
- %setup -q 靜默模式
製作段build section
1
|
%build
|
安裝段install section
1
|
%install
|
補充:Linux系統install命令:類似於cp
install /etc/fstab /tmp
install -d /tmp/test 建立目錄
install -D /etc/fstab /tmp/noexistsdir/fstab
可以直接指定安裝目標處不存在的目錄,但是要把安裝的原始檔名也指定
指令碼段script section
1
|
%pre安裝前 $1=0,1,2 解除安裝,安裝,升級
|
清理段clean cection
1
|
%clean
|
檔案段files section
除了debug資訊,都要做進RPM包
1
|
%files -f %{name}.lang
|
更改日誌段change log section
1
|
%changelog
|
製作RPM包
rpmbuild命令
-bp 只執行到prep段
-bi 只執行到install段
-bc 只執行到build段
-bb 製作二進位制格式的RPM包
-bs 製作原始碼格式的RPM包
-ba 既製作二進位制格式又製作原始碼格式
-bl 檢查files欄位和buildroot檔案是否一一對應,不一致則報錯
展開rpm原始碼包
rpm2cpio xxxx-src.rpm | cpio -id
到哪去找原始碼包呢?
rpmfind.net
rpm.pbone.net
YUM後的rpm包保留在本地的方法
1
|
# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
|
rpm包預設存放路徑
1
|
/var/cache/yum/base/packages
|
fpm製作rpm包
1
|
# yum install ruby
|