Package-Management

xyz > xyz-beta(或 alpha、rc 等)的增量 RPM 包版本“數字”

  • April 6, 2020

為了發布某些軟體的幾個不同版本的 RPM 包,我正在尋找一種方法來指定被認為是“升級”的版本“編號”,並包括幾個預發布版本的區別,例如(按順序):“2.4.0 alpha 1”、“2.4.0 alpha 2”、“2.4.0 alpha 3”、“2.4.0 beta 1”、“2.4.0 beta 2”、“2.4.0 候選版本”、 “2.4.0 最終版”、“2.4.1”、“2.4.2”等

我遇到的主要問題是 RPM 認為“2.4.0”早於“2.4.0.alpha1”,所以我不能只在最終版本號的末尾添加後綴。

我可以嘗試“2.4.0.alpha1”、“2.4.0.beta1”、“2.4.0.final”,這會起作用,除了“候選發布版”會被認為晚於“2.4.0.final” ”。

我考慮的另一種方法是使用 RPM 版本號的“epoch:”部分(epoch: 前綴在主版本號之前考慮,因此“1:2.4.0”實際上早於“2:1.0.0”) . 通過在 epoch: 欄位中添加時間戳,所有版本都按照 RPM 的預期排序,因為它們的版本似乎隨時間遞增。但是,當同時在幾個主要版本上發布新版本時,這會失敗(例如,2.3.2 在 2.4.0 之後發布,但它們的 RPM 版本是“20121003:2.3.2”和“20120928:2.4”。 0”和 2.3.2 上的系統無法“升級”到 2.4.0,因為 rpm 將其視為舊版本)。在這種情況下,yum/zypper/etc 拒絕升級到 2.4.0,這就是我的問題。

我可以使用哪些版本號來實現這一點,並確保 RPM 始終認為版本號是有序的。或者如果不是版本號,RPM 打包中的其他機制?

注意 1:我想保留規範文件的“Release:”欄位以用於其原始目的(對於同一版本的打包軟體,包的多個版本,包括打包更改)。

注意 2:這應該適用於主要發行版的目前生產版本,例如 RHEL/CentOS 6 和 SLES 11。但我對不涉及重新編譯 rpm 的解決方案也很感興趣!

注意 3:在類 Debian 系統上,dpkg 在版本號中使用一個特殊組件,即“~”(波浪號)字元。這會導致 dpkg 將後綴計算為“負”排序,因此“2.4.0~anything”將出現在“2.4.0”之前。然後,正常排序適用於“~”之後,因此“2.4.0~alpha1”位於“2.4.0~beta1”之前,因為“alpha”按字母順序位於“beta”之前。我不一定希望對 RPM 包使用相同的方案(我很確定不存在這樣的等價物),所以這只是僅供參考。

官方 rpm 指南說明瞭如何執行此操作,並連結到範例頁面。這是一個範例,說明如何使用非常常見的版本控制方案,該方案使用三個級別的預發布版本 (a、b、rc)(不幸的是,rpm 使得它的支持有點複雜):

  • 1.0.0a1 -> 1.0.0-0.1.a1
  • 1.0.0b1 -> 1.0.0-0.1.b1
  • 1.0.0b2 -> 1.0.0-0.1.b2
  • 1.0.0b2,第二個版本(1.0.0b2 的包裝調整)-> 1.0.0-0.2.b2
  • 1.0.0rc1 -> 1.0.0-0.1.rc1
  • 1.0.0 -> 1.0.0-1
  • 1.0.1a1 -> 1.0.1-0.1.a1
  • 1.0.1 -> 1.0.1-1

Fedora 有一套指導方針來設置預發布包的版本/發布號。基本上,您使用最終版本的版本號Version,並以Release數字開頭0.,一個遞增的數字,然後alpha是 ,beta或其他任何內容。您根本不會在最終版本中使用字母數字標籤final

請注意,您不能指望 RPM 支持 Debian 樣式的波浪號版本控制。幾個發行版禁用了此功能。

引用自:https://serverfault.com/questions/454462