वृद्धिशील RPM पैकेज संस्करण xyz> xyz-beta (या अल्फा, आरसी, आदि) के लिए "संख्या"


10

कुछ सॉफ़्टवेयर के कई अलग-अलग संस्करणों के RPM पैकेज प्रकाशित करने के लिए, मैं "अपग्रेड" माने जाने वाले संस्करण "संख्या" को निर्दिष्ट करने का एक तरीका ढूंढ रहा हूं, और कई पूर्व-रिलीज़ संस्करणों के भेदभाव को शामिल करता हूं, जैसे (क्रम में) ): "2.4.0 अल्फा 1", "2.4.0 अल्फा 2", "2.4.0 अल्फा 3", "2.4.0 बीटा 1", "2.4.0 बीटा 2", "2.4.0 रिलीज उम्मीदवार", "2.4.0 अंतिम", "2.4.1", "2.4.2", आदि।

मेरे पास इसका मुख्य मुद्दा यह है कि RPM मानता है कि "2.4.0" "2.4.0.alpha1" से पहले आता है, इसलिए मैं अंतिम संस्करण संख्या के अंत में सिर्फ प्रत्यय नहीं जोड़ सकता।

मैं "2.4.0.alp11", "2.4.0.beta1", "2.4.0.final" की कोशिश कर सकता था, जो कि "रिलीज़ उम्मीदवार" को छोड़कर काम करेगा, जिसे बाद में "2.4.0.final" माना जाएगा। "।

एक विकल्प जिसे मैंने माना है वह RPM संस्करण संख्या के "युग:" खंड का उपयोग कर रहा है (युग: उपसर्ग मुख्य संस्करण संख्या से पहले माना जाता है ताकि "1: 2.4.0" वास्तव में "2: 1.0.0" से पहले हो) । युग: क्षेत्र में एक टाइमस्टैम्प लगाकर, सभी संस्करणों को आरपीएम द्वारा अपेक्षित के रूप में आदेश दिया जाता है, क्योंकि उनके संस्करण समय में वृद्धि के लिए दिखाई देते हैं। हालाँकि, यह तब विफल होता है जब एक ही समय में कई प्रमुख संस्करणों पर नए रिलीज़ किए जाते हैं (उदाहरण के लिए, 2.4.2 2.4.0 के बाद जारी किया जाता है, लेकिन RPM के लिए उनका संस्करण "20121003: 2.3.2" और "20120928: 2.4" है। 2.3.2 पर 0 "और सिस्टम 2.4.0 पर" अपग्रेड "नहीं कर सकते, क्योंकि आरपीएम इसे पुराने संस्करण के रूप में देखता है)। इस मामले में, yum / zypper / etc ने 2.4.0 में अपग्रेड करने से इनकार कर दिया, इस प्रकार मेरी समस्या।

इसे प्राप्त करने के लिए मैं किन वर्जन नंबरों का उपयोग कर सकता हूं, और सुनिश्चित करें कि RPM हमेशा वर्जन नंबरों को क्रम में रखने पर विचार करता है। या नहीं तो संस्करण संख्या, RPM पैकेजिंग में अन्य तंत्र?

नोट 1: मैं मूल फ़ाइल के लिए "रिलीज़:" फ़ील्ड को मूल उद्देश्य के लिए रखना चाहूंगा (पैकेज के कई रिलीज़, जिसमें पैकेजिंग परिवर्तन भी शामिल है, पैकेज्ड सॉफ़्टवेयर के एक ही संस्करण के लिए)।

नोट 2: यह आरएचईएल / सेंटोस 6 और एसएलईएस 11. जैसे प्रमुख वितरणों के वर्तमान उत्पादन संस्करणों पर काम करना चाहिए, लेकिन मुझे उन समाधानों में दिलचस्पी है जो बहुत अधिक नहीं हैं, इसलिए जब तक वे आरपीएम को पुन: स्थापित नहीं करते हैं!

नोट 3: डेबियन जैसी प्रणालियों पर, dpkg संस्करण संख्या में एक विशेष घटक का उपयोग करता है जो "~" (टिल्ड) वर्ण है। यह dpkg को "ऋणात्मक" क्रम के रूप में प्रत्यय गिनने का कारण बनता है, ताकि "2.4.0 ~ कुछ" "2.4.0" से पहले आ जाए। फिर, "~" के बाद सामान्य आदेश लागू होता है, इसलिए "2.4.0 ~ अल्फा 1" "2.4.0 ~ बीटा 1" से पहले आता है क्योंकि "अल्फा" वर्णानुक्रम में "बीटा" से पहले आता है। मैं जरूरी नहीं कि आरपीएम पैकेजों के लिए एक ही योजना का उपयोग कर रहा हूं (मुझे पूरा यकीन है कि ऐसा कोई समान मौजूद नहीं है), इसलिए यह सिर्फ FYI है।

जवाबों:


4

आधिकारिक आरपीएम दिशा निर्देशों बता ऐसा करने के तरीके, और करने के लिए लिंक एक उदाहरण पेज । यहां एक उदाहरण दिया गया है कि आप बहुत ही सामान्य संस्करण योजना के साथ कैसे काम करेंगे, जो पूर्व-रिलीज (ए, बी, आरसी) के तीन स्तरों का उपयोग करती है (जो कि आरपीएम दुर्भाग्य से इसे समर्थन करने के लिए थोड़ा जटिल बनाता है):

  • 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

अच्छा! इसके लिए आपको बहुत धन्यवाद। आपके उदाहरण में बस एक बात, यह मुझे प्रतीत होता है कि 1.0.0-0.1.rc1 को 1.0.0-0.2.b2 से अधिक पुराना माना जाएगा, निश्चित रूप से? इसलिए, जैसे ही "-0.1" घटक "-0.2" से टकरा जाता है, यह सभी संस्करण संख्याओं में "-0.2" बना रहना चाहिए। क्या मैं सही समझ रहा हूँ?
जोनाथन क्लार्क

मेरे विचार में तुम सही हो। मैं इसे ठीक से करने के लिए सही तरीके से दोबारा जांच करूंगा और अपने उत्तर को अपडेट करूंगा।
स्टोकैस्टिक 20

तो सही तरीका कौन सा है?
सैम

6

फेडोरा में पूर्व-रिलीज़ पैकेज के संस्करण / रिलीज़ संख्या को सेट करने के लिए दिशानिर्देशों का एक सेट है । मूल रूप से आप उस संस्करण संख्या का उपयोग करते हैं जो अंतिम रिलीज़ में होगी Version, और Releaseसंख्या को 0.एक वृद्धी संख्या के साथ प्रारंभ करें , और फिर alpha, betaया जो भी हो। आप finalअंतिम रिलीज़ के लिए अल्फ़ान्यूमेरिक टैग का उपयोग बिल्कुल नहीं करेंगे ।

ध्यान दें कि आप RPM को डेबियन-स्टाइल टिल्ड वर्जनिंग के लिए समर्थन पर भरोसा नहीं कर सकते हैं। कई वितरण इस सुविधा को अक्षम करते हैं।


धन्यवाद, मैं इन पर गौर करूंगा। पहली नज़र में, ऐसा लगता है कि वे अपस्ट्रीम अल्फा / बीटा / आदि संस्करणों के लिए अनुमति देने के लिए रिलीज़ घटक "हाय-जैकिंग" कर रहे हैं, जो मुझे थोड़ा बोझिल लगता है ... आईएमओ, रिलीज़ को बदलाव के लिए बढ़ाना चाहिए, बदलाव के लिए नहीं। पैकेज्ड सॉफ्टवेयर में।
जोनाथन क्लार्क

2

मैं अल्फा / बीटा भेदों का प्रशंसक नहीं हूं। जारी किया गया कोड और असंबंधित कोड है।

मैं यह कैसे करूँ: मुझे एक प्रमुख एकीकरण प्रणाली पसंद है। एक निरंतर एकीकरण प्रणाली (जेनकिंससीआई देखें)। बिल्ड पूर्णांक कभी भी रीसेट नहीं होता है। लघु संस्करण संख्या परिवर्तन पीछे संगत संगत परिवर्तनों के लिए हैं। प्रमुख संख्या परिवर्तन बड़े सौदे हैं।

यदि मार्केटिंग बड़े बिल्डरों के लिए "बिल्ड" को पसंद नहीं करता है, तो आप केवल जारी किए गए बिल्ड पर मार्केटिंग के लिए एक बार मामूली संख्या में वृद्धि कर सकते हैं, और फिर जब यह इंजीनियरिंग में जाता है।


1
खैर, अल्फा / बीटा संस्करण भी जारी किए जाते हैं ... सिर्फ "फाइनल" संस्करण के रूप में नहीं। और मेरे पास वास्तव में इसके बारे में कोई विकल्प नहीं है, मैं बस पैकेजिंग का पालन करना चाहता हूं: /
जोनाथन क्लार्क

0

मैं एक ऐसी ही समस्या से टकराया और मुझे सुइट संख्या को एकजुट करने के लिए रेडहैट, डेबियन, पायथन पैकेज और रूबी रत्नों के बीच संशोधन की तुलना करनी पड़ी और इससे मुझे प्रत्येक मामले में "इससे अधिक" और "कम" का मूल्यांकन करने में मदद मिली।

यह 1.3.0.post0.dev20180213210433 से 1.3.0, YMMV की तुलना कर रहा है

लाल टोपी के लिए ( 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

डेबियन के लिए:

$ 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

अजगर के लिए

>>> 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

रूबी के लिए

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.