Packaging

建構沒有基礎包的 RPM 子包

  • August 26, 2020

根據 RPM 文件/指南 ( http://ftp.rpm.org/max-rpm/ch-rpm-subpack.html ),可以使用子包通過單個 SPEC 文件建構多個 RPM 包。在提到的連結中,包 foo、foo-server、foo-client 和 bazlib 被建構和打包。

在範例中,SPEC 文件有一個名為 foo 的基礎/父包(伺服器、客戶端和 bazlib 是子包):

Name: foo
Version: 2.7
Release: 1
Source: foo-2.7.tgz
License: probably not
Summary: The foo app, and the baz library needed to build it
Group: bogus/junque
%description
This is the long description of the foo app, and the baz library needed to
build it...

%package server
Summary: The foo server
Group: bogus/junque
%description server
This is the long description for the foo server...

%package client
Summary: The foo client
Group: bogus/junque
%description client
This is the long description for the foo client...

%package -n bazlib
Version: 5.6
Summary: The baz library
Group: bogus/junque
%description -n bazlib
This is the long description for the bazlib...

...snipped

建構這些包會產生這些包:

# rpmbuild -ba foo-2.7.spec
* Package: foo
* Package: foo-server
* Package: foo-client
* Package: bazlib

...snipped

幾個問題:

1.) 基礎/父包 foo 是否有一些特殊用途,例如 RPIO 中的一些附加標誌/屬性?或者從 RPM 的角度來看,包 foo 是否等於它的所有子包?如果是這樣,為什麼這些包被稱為子包(包這個詞意味著一種特殊的關係)?

2.) 假設我通過子包將產品與多個二進製文件(toola、toolb、toolc)打包在一起,有沒有辦法禁用基礎/父包?在我的情況下,不需要特殊的基礎/父包,因為所有工具包都被平等對待(這個問題與問題 1 相關)。

我想有可能只建構工具(基礎/父包)和工具,工具b,工具,但不將工具添加到儲存庫。但這在某種程度上感覺是錯誤的(也許可以將 toola 用作基礎包,將 toolb 和 toolc 用作子包?)。

  1. 就二進制 RPM 而言,主包和它的子包是相等的。我可以想到子包被稱為子包的幾個原因:它們被描述為主包的“變體”,從中繼承了許多欄位(儘管它們可以被覆蓋),甚至預設取名;從源碼包的角度來看,它們是整個源碼包的子包,與主包同名。
  2. 如果不需要主包,請確保其%files列表為空,並且不會生成。請參閱“使用 %files 列表控制包”部分

引用自:https://unix.stackexchange.com/questions/606380