(यदि आपके इस प्रश्न के बारे में कोई प्रश्न / टिप्पणी है, तो कृपया एक टिप्पणी जोड़ें। या, यदि आपके पास पर्याप्त प्रतिनिधि हैं, तो आप मुझे चैट में भेज सकते हैं।)
सीधे डेबियन के नए संस्करण से बाइनरी पैकेज स्थापित करना - उत्तर नहीं।
मान लीजिए कि आप डेबियन-आधारित वितरण के कुछ संस्करण चला रहे हैं। आप पैकेज का एक और हालिया संस्करण चाहते हैं जो आपके लिए उपलब्ध है। पहली बात यह है कि हर शुरुआत बाइनरी पैकेज को सीधे अपने डेबियन के संस्करण पर स्थापित करने के लिए करने की कोशिश करती है। यह काम कर सकता है या नहीं, यह इस बात पर निर्भर करता है कि आप किस संस्करण पर चल रहे हैं और पैकेज कितना नया है। सामान्य तौर पर, यह प्रक्रिया अच्छी तरह से काम नहीं करेगी।
उदाहरण के लिए उस मामले पर विचार करें, जहां कोई बाइनरी पैकेज को सीधे स्थिर पर परीक्षण / अस्थिर से स्थापित करने का प्रयास कर रहा है। यह सबसे अच्छा होने की संभावना नहीं है, जब तक कि परीक्षण / अस्थिर उस समय स्थिर के बहुत करीब न हो जाए। इसका कारण डेबियन जैसे लिनक्स-आधारित बाइनरी वितरण की प्रकृति के साथ करना है। इस तरह के ऑपरेटिंग सिस्टम साझा पुस्तकालयों पर बहुत अधिक निर्भर करते हैं, और ये निर्भरताएं अक्सर बहुत कसकर संस्करण-निर्भर होती हैं; आवश्यकता से अधिक बार इतना अधिक। डेबियन वर्तमान में संस्करण निर्भरता को "तंग" बनाने का एक अच्छा तरीका नहीं है - यह कहने का एक छोटा तरीका है कि संस्करण निर्भरता बिल्कुल आवश्यक के रूप में प्रतिबंधात्मक है।
उपयोगकर्ता के लिए इसका क्या मतलब है? उदाहरण के लिए मान लीजिए कि आप slrn
डेबियन अस्थिर से डेबियन स्थिर तक कहने की कोशिश कर रहे हैं । यह कैसा दिखेगा?
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
द्वारा उत्पन्न त्रुटि के बावजूद apt
, यहां कोई टूटे हुए पैकेज नहीं हैं। तो, क्या गलत हो गया? समस्या यह है कि जिस संस्करण के खिलाफ libc6
अस्थिर slrn
संकलन किया गया था, वह डेबियन स्थिर पर उपलब्ध की तुलना में अलग है (और उच्चतर संस्करण संख्या है)। ( libc6
जीएनयू सी लाइब्रेरी है। सी लाइब्रेरी किसी भी यूनिक्स जैसी ऑपरेटिंग सिस्टम के लिए केंद्रीय है, और जीएनयू सी लाइब्रेरी वह संस्करण है जो लिनक्स-आधारित ऑपरेटिंग सिस्टम आमतौर पर उपयोग करते हैं।)
इसलिए अस्थिर slrn
को libc6
स्थिर के लिए उपलब्ध उच्चतर संस्करण की आवश्यकता होती है । ध्यान दें कि क्योंकि एक पैकेज को लाइब्रेरी के उच्च संस्करण के खिलाफ संकलित किया गया है, इसलिए उस लाइब्रेरी के उच्च संस्करण की आवश्यकता नहीं है, लेकिन अक्सर ऐसा होता है।
वाक्य रचना
apt-get install slrn/unstable
का अर्थ है: अस्थिर का उपयोग करें slrn
लेकिन अन्य सभी पैकेजों के लिए केवल स्थिर से संस्करणों का उपयोग करें। अधिक सटीक होने के लिए, यह प्राथमिकता संख्याओं का उपयोग करता है। man apt_preferences
विवरण के लिए देखें।
एक भी कर सकते हैं
apt-get install -t unstable slrn
यह काम करने की अधिक संभावना है, लेकिन आप आम तौर पर ऐसा नहीं करना चाहते हैं। क्यूं कर?
इसका मतलब है: स्थिर रूप से संकुल के साथ समान स्तर पर अस्थिर रूप से सभी पैकेजों का इलाज करें । इसलिए यह अस्थिर slrn
से निर्भरता में खींच जाएगा यदि वे उच्चतर संस्करण संख्या के हैं, और वे आम तौर पर होंगे। इसमें आमतौर पर पहले से बताए गए कारणों से जीएनयू सी लाइब्रेरी शामिल होगी। अब, यह दृष्टिकोण आम तौर पर "सफल" होगा, जिसमें निर्भरता परिभाषा से संतुष्ट हो जाएगी (अस्थिर की slrn
निर्भरता है जो अस्थिर में संतुष्ट हैं), लेकिन आप उन पैकेजों के मिश्रण के साथ समाप्त होते हैं जिन्हें अचानक पुस्तकालयों के संस्करणों के साथ चलने के लिए मजबूर किया जाता है। वे किस लिए बनाए गए थे, उससे अलग है। यह शायद अच्छी तरह से समाप्त नहीं होगा।
जवाब है ... बैकपार्ट्स!
तो, ऐसा करने का सही तरीका क्या है? यह आपके सिस्टम पर अधिक हाल के संस्करणों के डेबियन स्रोतों का पुनर्निर्माण करना है, जिसे "बैकपोर्टिंग" के रूप में जाना जाता है। निम्नलिखित मामलों पर विचार करें:
डेबियन के संस्करण के लिए उपलब्ध अतिरिक्त पैकेज के अर्ध-आधिकारिक / आधिकारिक स्रोत हैं।
देखने के लिए पहली जगह डेबियन बैकपोर्ट है , जो डेबियन बैकपोर्ट के लिए आधिकारिक साइट है।
एक ठोस उदाहरण के लिए:
अपनी रिलीज़ के लिए उपयुक्त बैकपोर्ट लाइन जोड़ें और नए पैकेजों को खोजने के लिए अपडेट करें फिर बैकस्पोर्ट्स से स्पष्ट रूप से कुछ स्थापित करें (क्योंकि बैकफ़ॉक्स डिफ़ॉल्ट रूप से निष्क्रिय हो गए हैं)।
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
यह git का नवीनतम स्थिर संस्करण प्राप्त करेगा, जिसमें खिंचाव के साथ शामिल किए गए स्थिर (जैसे 'शामिल' की तुलना में उपयोगी नई सुविधाएँ हैं, जो आपको एकाधिक कॉन्फ़िगर फ़ाइलों को संयोजित करने या ~ / कार्य / परियोजनाओं / बनाम ~ / व्यक्तिगत / के लिए अपना उपयोगकर्ता नाम बदलने की अनुमति देता है परियोजनाओं /)।
देखने के लिए एक और जगह उबंटू अनुरक्षकों द्वारा विभिन्न पीपीए है। आप "packagename PPA" की खोज कर सकते हैं।
ओएस के उस संस्करण के लिए पैकेज के और अधिक हाल के संस्करण उपलब्ध नहीं हैं, लेकिन ओएस के अधिक हाल के संस्करणों / रिलीज के लिए अधिक नवीनतम संस्करण उपलब्ध हैं। यह बैकपोर्टिंग के लिए मानक मामला है।
बैकपोर्टिंग का मतलब है कि आप अपने द्वारा चलाए जा रहे संस्करण पर डेबियन के बाद के संस्करण से डेबियन स्रोतों का पुनर्निर्माण करते हैं। यह प्रक्रिया पैकेज के आधार पर आसान या शामिल और कठिन हो सकती है। यहाँ यह कैसे करना है की एक रूपरेखा है।
शुरुआती के लिए एक संक्षिप्त बैकपोर्टिंग ट्यूटोरियल
संक्षिप्तता के लिए मैं मानूंगा कि आप वर्तमान डेबियन स्थिर, वर्तमान में मट्ठा चला रहे हैं। मैं slrn
उदाहरण के रूप में पैकेज का उपयोग करूँगा ।
सबसे पहले, ध्यान दें कि सभी डेबियन पैकेजिंग फाइलें debian/
स्रोत निर्देशिका के उपनिर्देशिका में रहती हैं ।
पहला चरण यह जांचना है कि क्या अधिक हाल का संस्करण उपलब्ध है। आप इस का उपयोग कर सकते हैं apt-cache policy
।
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
हम बैकपोर्ट लेना चाहेंगे 1.0.1-10
।
चरण 1:
नायब: सुनिश्चित करें कि जिस deb-src
स्रोत संस्करण को आप डाउनलोड करना चाहते हैं उसके लिए लाइनें आपके में दिखाई देती हैं /etc/apt/sources.list
। उदाहरण के लिए, यदि आप अस्थिर संस्करण को डाउनलोड करना चाहते हैं, तो आपको अस्थिर के slrn
लिए deb-src
लाइन की आवश्यकता है, या यह काम नहीं करेगा। ध्यान दें कि आपको deb
स्रोतों को डाउनलोड करने के लिए संबंधित पंक्तियों की आवश्यकता नहीं है , हालांकि apt-cache policy
उस जानकारी का उपयोग करता है, इसलिए यदि आपके पास संगत deb
रेखाएं नहीं हैं , तो apt-cache policy
आपको प्रासंगिक संस्करण नहीं दिखाएंगे। यदि आपके पास deb
लाइनें हैं, तो एक /etc/apt/preferences
या समान प्रविष्टि का उपयोग करके नए संस्करणों को पिन करना न भूलें । /etc/apt/preferences
इस तरह (अस्थिर) के लिए एक प्रविष्टि काम करेगी, उदाहरण के लिए।
Package: *
Pin: release a=unstable
Pin-Priority: 50
यदि आप लाइनों को जोड़ते हैं /etc/apt/sources.list
, तो apt-get update
बाद में दौड़ना न भूलें ।
के लिए स्रोत डाउनलोड करें slrn
। एक अच्छी जगह है /usr/local/src/slrn
।
apt-get source slrn=1.0.1-10
चरण 2:
संस्करण संख्या को थोड़ा बदलें, ताकि अपस्ट्रीम संस्करण से अपने बैकपोर्ट को अलग कर सकें। भागो dch -i
, जो स्वचालित रूप से debian/changelog
फ़ाइल में एक प्रविष्टि जोड़ देगा । उदाहरण के लिए, कुछ इस तरह से देखने के लिए प्रविष्टि बदलें।
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
चरण 3:
स्रोतों के निर्माण का प्रयास। यदि बिल्ड के लिए आवश्यक पैकेज उपलब्ध नहीं हैं, तो प्रयास विफल हो जाएगा। स्रोत निर्देशिका में निर्देशिका बदलें। पैकेज debuild
से उपयोग करें devtools
।
cd slrn-1.0.1/
debuild -uc -us
यदि बिल्ड निर्भरताएं संतुष्ट हैं, तो स्रोत स्रोत के ऊपर के स्तर पर कुछ डेब का निर्माण और उत्पादन करेंगे; इस मामले में /usr/local/src/slrn
।
चरण 4:
मान लीजिए कि बिल्ड निर्भरता संतुष्ट नहीं हैं। फिर आपको बिल्ड निर्भरता स्थापित करने का प्रयास करने की आवश्यकता है। यह काम कर सकता है या नहीं भी कर सकता है, क्योंकि निर्भरता आपके संस्करण के लिए उपलब्ध नहीं हो सकती है, या यदि उपलब्ध हो, तो सही संस्करण में उपलब्ध नहीं हो सकती है।
नायब: यह दुर्भाग्य से डेबियन पैकेजों के लिए आवश्यक नहीं है कि निर्माण निर्भरता के संस्करणों की आवश्यकता होती है जो आवश्यक से अधिक हैं। इसे जांचने के लिए डेबियन में कोई स्वचालित तरीका नहीं है, और अक्सर पैकेज अनुरक्षक तब तक देखभाल नहीं करते हैं जब तक कि यह संबंधित संस्करण / रिलीज पर काम नहीं करता है। इसलिए, निर्भरता संस्करणों पर संदेहपूर्ण रवैया अपनाएं, और सामान्य ज्ञान का उपयोग करें। उदाहरण के लिए, व्यापक रूप से उपयोग किए जाने वाले पैकेज जैसे पायथन और जीएनयू उपकरण उनकी निर्भरता के बहुत विशिष्ट संस्करणों पर निर्भर नहीं होंगे, भले ही डेबियन पैगर सूची में हो।
किसी भी मामले में, आप उन्हें स्थापित करने का प्रयास कर सकते हैं
apt-get build-dep slrn=1.0.1-10
यदि यह सफल होता है, तो पैकेज को फिर से बनाने का प्रयास करें (STEP 2)। अगर यह विफल हो जाता है, तो आगे काम करने की आवश्यकता है। ध्यान दें कि फ़ाइल debuild
में बिल्ड निर्भरता को देखता है debian/control
, और यदि आवश्यक हो तो आप इन्हें बदल सकते हैं। तो चलिए अब हम उसके बारे में बात करते हैं। यहां स्लर्न के लिए बिल्ड डिपेंडेंसी हैं।
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
का उपयोग करने का एक विकल्प apt-get build-dep
इन मैन्युअल रूप से स्थापित करना है, करके
apt-get install debhelper libslang2-dev ...
यदि आप नियंत्रण फ़ाइल में इन मानों को बदलना शुरू करते हैं, तो आपको मैन्युअल इंस्टॉलेशन पर स्विच करना चाहिए, क्योंकि तब आप apt-get build-dep
सही काम नहीं करेंगे।
उपलब्ध सॉफ़्टवेयर के अधिक हाल के संस्करणों का कोई पैक संस्करण नहीं हैं। उपलब्ध विकल्प अधिक हाल के संस्करण को पैकेज करने के लिए हैं।
कई मामलों में, एक नए स्रोतों के साथ संयोजन में सॉफ्टवेयर के पुराने संस्करणों से पैकेजिंग का पुन: उपयोग कर सकता है। यह दृष्टिकोण समस्याओं में चल सकता है, विशेष रूप से पैच जो कि सॉफ्टवेयर के पुराने संस्करणों पर लागू होते हैं, यहां लागू नहीं हो सकते हैं, इसलिए किसी को उन्हें स्रोतों के साथ फिर से सिंक करने की आवश्यकता हो सकती है। 3.0 (रजाई) स्रोत प्रारूप जो अब मानक उपयोग रजाई बन रहा है, और पैच debian/patches
निर्देशिका में स्थित हैं ।
हालाँकि, इन मुद्दों की एक विस्तृत चर्चा इस पद के दायरे से बाहर है।