Phiên bản gói RPM tăng dần Số điện thoại Số cho xyz> xyz-beta (hoặc alpha, rc, v.v.)


10

Để xuất bản các gói RPM của một số phiên bản khác nhau của một số phần mềm, tôi đang tìm cách chỉ định "số" phiên bản được coi là "nâng cấp" và bao gồm phân biệt một số phiên bản trước khi phát hành, như (theo thứ tự ): "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", "Ứng viên phát hành 2.4.0", "2.4.0 cuối cùng", "2.4.1", "2.4.2", v.v.

Vấn đề chính tôi gặp phải là RPM cho rằng "2.4.0" xuất hiện sớm hơn "2.4.0.alpha1", vì vậy tôi không thể chỉ thêm hậu tố vào cuối số phiên bản cuối cùng.

Tôi có thể thử "2.4.0.alpha1", "2.4.0.beta1", "2.4.0.final", sẽ hoạt động, ngoại trừ "ứng cử viên phát hành" sẽ được xem xét muộn hơn "2.4.0.final ".

Một cách khác tôi đã xem xét là sử dụng phần "epoch:" của số phiên bản RPM (tiền tố epoch: được xem xét trước số phiên bản chính để "1: 2.4.0" thực sự sớm hơn "2: 1.0.0") . Bằng cách đặt dấu thời gian trong trường epoch: tất cả các phiên bản được sắp xếp theo dự kiến ​​của RPM, vì các phiên bản của chúng dường như tăng theo thời gian. Tuy nhiên, điều này không thành công khi các bản phát hành mới được thực hiện trên một số phiên bản chính cùng một lúc (ví dụ: 2.3.2 được phát hành sau 2.4.0, nhưng phiên bản dành cho RPM của chúng là "20121003: 2.3.2" và "20120928: 2.4. 0 "và các hệ thống trên 2.3.2 không thể được" nâng cấp "lên 2.4.0, vì vòng / phút xem nó là phiên bản cũ hơn). Trong trường hợp này, yum / zypper / etc từ chối nâng cấp lên 2.4.0, do đó, vấn đề của tôi.

Tôi có thể sử dụng số phiên bản nào để đạt được điều này và đảm bảo rằng RPM luôn coi số phiên bản là theo thứ tự. Hoặc nếu không phải số phiên bản, cơ chế khác trong bao bì RPM?

Lưu ý 1: Tôi muốn giữ trường "Phát hành:" của tệp spec cho mục đích ban đầu của nó (một số bản phát hành gói, bao gồm thay đổi bao bì, cho cùng một phiên bản của phần mềm đóng gói).

Lưu ý 2: Điều này sẽ hoạt động trên các phiên bản sản xuất hiện tại của các bản phân phối chính, chẳng hạn như RHEL / CentOS 6 và SLES 11. Nhưng tôi cũng quan tâm đến các giải pháp không quá, miễn là chúng không liên quan đến việc biên dịch lại vòng / phút!

Lưu ý 3: Trên các hệ thống giống như Debian, dpkg sử dụng một thành phần đặc biệt trong số phiên bản là ký tự "~" (dấu ngã). Điều này khiến dpkg tính hậu tố là thứ tự "âm", do đó "2.4.0 ~ bất cứ thứ gì" sẽ đến trước "2.4.0". Sau đó, thứ tự thông thường áp dụng sau "~", vì vậy "2.4.0 ~ alpha1" xuất hiện trước "2.4.0 ~ beta1" vì "alpha" xuất hiện trước "beta" theo thứ tự bảng chữ cái. Tôi không nhất thiết tìm cách sử dụng cùng một sơ đồ cho các gói RPM (tôi khá chắc chắn không tồn tại tương đương như vậy), vì vậy đây chỉ là FYI.

Câu trả lời:


4

Các hướng dẫn vòng / phút chính thức cho biết cách thực hiện điều này và liên kết đến một trang ví dụ . Dưới đây là một ví dụ về cách bạn sẽ làm việc với sơ đồ phiên bản rất phổ biến sử dụng ba cấp độ phát hành trước (a, b, RC) (mà vòng tua không may làm cho nó hơi phức tạp để hỗ trợ):

  • 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, phiên bản thứ hai (tinh chỉnh bao bì của 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

Đẹp! Cảm ơn bạn rất nhiều cho việc này. Chỉ một điều trong ví dụ của bạn, có vẻ như với tôi rằng 1.0.0-0.1.rc1 sẽ được sắp xếp hơn 1.0.0-0.2.b2, chắc chắn? Vì vậy, ngay sau khi thành phần "-0.1" được chuyển thành "-0.2", thì thành phần này sẽ vẫn là "-0.2" trong tất cả các số phiên bản trong tương lai. Tôi có hiểu đúng không?
Jonathan Clarke

Tôi nghĩ rằng bạn là chính xác. Tôi sẽ kiểm tra lại đúng cách để làm điều này đúng và cập nhật câu trả lời của tôi.
ngẫu nhiên

Vậy đó là cách đúng đắn?
Sam

6

Fedora có một bộ hướng dẫn để thiết lập phiên bản / số lượng phát hành của các gói phát hành trước . Về cơ bản, bạn sử dụng số phiên bản của bản phát hành cuối cùng Versionvà bắt đầu Releasesố với 0., số tăng dần, và sau đó alpha, betahoặc bất cứ điều gì. Bạn sẽ không sử dụng thẻ chữ và số finalcho bản phát hành cuối cùng.

Lưu ý rằng bạn không thể tin vào RPM có hỗ trợ cho phiên bản dấu ngã kiểu Debian. Một số bản phân phối vô hiệu hóa tính năng này.


Cảm ơn, tôi sẽ xem xét những điều này. Thoạt nhìn, có vẻ như chúng là "hi-jacking" thành phần Phát hành để cho phép các phiên bản alpha / beta / etc ngược dòng, mà tôi thấy hơi cồng kềnh ... IMO, Bản phát hành nên được tăng lên để thay đổi đóng gói, không phải cho các thay đổi trong phần mềm đóng gói.
Jonathan Clarke

2

Tôi không phải là một fan hâm mộ của sự phân biệt alpha / beta. Có mã phát hành và mã chưa phát hành.

Cách tôi thực hiện: Tôi thích Major.minor.build với hệ thống tích hợp liên tục (xem JenkinsCI). Xây dựng số nguyên không bao giờ được thiết lập lại. Thay đổi số phiên bản nhỏ là để thay đổi tương thích ngược. Thay đổi số lượng lớn là giao dịch lớn.

Nếu tiếp thị không thích "xây dựng" là số nguyên lớn, bạn có thể tăng số phụ một lần chỉ để tiếp thị trên các bản dựng được phát hành, và sau đó lại chuyển sang kỹ thuật.


1
Chà, phiên bản alpha / beta cũng được phát hành ... không phải là phiên bản "Final". Và tôi thực sự không có lựa chọn nào về điều đó, tôi chỉ muốn có bao bì tuân theo: /
Jonathan Clarke

0

Tôi đã gặp phải một vấn đề tương tự và tôi phải so sánh các sửa đổi giữa các gói RedHat, Debian, Python và Ruby để thống nhất số bộ và điều này giúp tôi đánh giá "lớn hơn" và "nhỏ hơn" trong mỗi trường hợp:

Đây là so sánh 1.3.0.post0.dev20180213210433 với 1.3.0, YMMV

cho Red Hat (cảm ơn https://utcc.utoronto.ca/~cks/space/blog/linux/RPMShellVersionComparison )

docker run -ti centos:7
yum install rpmdevtools.noarch
rpmdev-vercmp "1.3.0" "1.3.0.post0.dev20180213210433" 
1.3.0 < 1.3.0.post0.dev20180213210433

Đối với Debian:

$ dpkg --compare-versions 1.3.0 gt 1.3.0.post0.dev20180213210433 ; echo $?
1  # false
$ dpkg --compare-versions 1.3.0 lt 1.3.0.post0.dev20180213210433 ; echo $?
0  # true

Đối với Python

>>> from pkg_resources import parse_version
>>> parse_version("1.3.0") > parse_version("1.3.0.post0.dev20180213210433")
False
>>> parse_version("1.3.0") < parse_version("1.3.0.post0.dev20180213210433")
True

Dành cho Ruby

irb(main):001:0> Gem::Version.new("1.3.0") > Gem::Version.new("1.3.0.post0.dev20180213210433")
=> true
irb(main):002:0> Gem::Version.new("1.3.0") < Gem::Version.new("1.3.0.post0.dev20180213210433")
=> false

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.