रिपिकार्नेक क्या है?


96

जब apt-get upgradeमेरे आरपीआई 3 पर कर रहे हैं , आउटपुट की कई लाइनें इस तरह दिखाई देती हैं:

Adding 'diversion of /boot/bcm2708-rpi-b-plus.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b-plus.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-cm.dtb to /usr/share/rpikernelhack/bcm2708-rpi-cm.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2709-rpi-2-b.dtb to /usr/share/rpikernelhack/bcm2709-rpi-2-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2710-rpi-3-b.dtb to /usr/share/rpikernelhack/bcm2710-rpi-3-b.dtb by rpikernelhack'
Adding 'diversion of /boot/kernel.img to /usr/share/rpikernelhack/kernel.img by rpikernelhack'
Adding 'diversion of /boot/kernel7.img to /usr/share/rpikernelhack/kernel7.img by rpikernelhack'
Adding 'diversion of /boot/COPYING.linux to /usr/share/rpikernelhack/COPYING.linux by rpikernelhack'
...
...
...

मैं लिनक्स कर्नेल सुविधाओं पर बहुत शिक्षित नहीं हूं और यह आरपीआई के लिए बहुत विशिष्ट लग रहा है।

मेरा सवाल है: यह सब क्या है?

Ersion डायवर्सन ’क्या है? इन सभी फ़ाइलों (एक समूह के रूप में) को संदर्भित किया जा रहा है, वास्तव में क्या करते हैं? R रिपिकार्नेक ’क्या है?

मैंने थोड़ी सी गुगली की और आसानी से कुछ भी दिलचस्प नहीं पाया। मुझे लगता है कि मैं इस बारे में उत्सुक नहीं हूँ, इसलिए मुझे आशा है कि यह एक उपयुक्त प्रश्न है!


3
निश्चित रूप से केवल वही नहीं है जो उत्सुक है - मैं भी जानना चाहूंगा।
जोआन

मैं भी। जब मैं कर रहा था तब उन्होंने काफी लंबा समय लिया apt-get upgrade
कोंग चून हो

2
शायद उतना रोमांचक नहीं जितना आप सोचते हैं - मुझे लगता है कि यहाँ "हैक" पैकेज मैनेजमेंट सिस्टम पर है, कर्नेल के लिए नहीं। debian.org/doc/debian-policy/ap-pkg-diversions.html
गोल्डीलॉक्स

यहाँ preinstभाग से एक नमूना है dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img:। @goldilocks 'लिंक स्पष्ट --packageरूप से बताता है ।
PNDA

2
@qbicdesign मुझे लगता है कि शब्द "हैक" की आपकी समझ पर टिका है । एक सामान्य उपयोग किसी ऐसी चीज़ का संदर्भ देना होगा जो शायद किसी समस्या का आदर्श या उचित समाधान नहीं है, लेकिन कम से कम चुटकी में या कम से कम प्रयास के साथ, इसलिए कोई व्यक्ति केवल इस बात का संकेत दे रहा है (उस लेख की शुरुआत में एक isn किसी भी चीज़ का हल नहीं है, लेकिन सामान्य विषय "अनुचित" = "कुछ इस तरह से उपयोग करना होगा कि उसका इरादा नहीं था" = "जरूरी नहीं कि गलत हो, शायद चालाक भी हो")।
गोल्डीलॉक्स

जवाबों:


67

"rpik कर्नेलैक" एक नकली पैकेज नाम और एक निर्देशिका नाम है जिसका उपयोग हैक के एक भाग के रूप में किया जाता है (एक समस्या के गंदे लेकिन समीचीन समाधान के रूप में) इस तथ्य के इर्द-गिर्द काम करने के लिए कि रास्पबेरी पाई फाउंडेशन ने एक fat32 पार्टीशन बनाने / बूट करने का निर्णय लिया। और dpkg fat32 के साथ अच्छी तरह से नहीं मिलता है। मैं वह था जो शुरू में विचार के साथ आया था, हालांकि इसे बाद में दूसरों द्वारा परिष्कृत किया गया था।

dpkg एक fat32 पार्टीशन पर नई फाइल्स इंस्टॉल करेगा (रास्ते में कुछ चेतावनियों को उभारते हुए), लेकिन अगर यह किसी फैट32 पार्टीशन पर मौजूदा फाइल को अपडेट करने की कोशिश करता है, तो यह विफल हो जाएगा (iirc यह एक हार्डलिंक बनाकर पुरानी फाइल का बैकअप बनाने की कोशिश करता है। और fat32 हार्डलिंक का समर्थन नहीं करता है)।

जब लोग (मेरे सहित) ने पी कर्नेल और फ़र्मवेयर के डेब्यू पैकेज बनाने की कोशिश शुरू की तो वे इस समस्या में भाग गए, एक पैकेज शुरू में स्थापित हो गया लेकिन इसे अपग्रेड करने की कोशिश करना विफल हो जाएगा, ouch।

Dpkg में "डायवर्सन" सुविधा का उपयोग करने के लिए (ab) मेरा काम था। इस सुविधा का उद्देश्य फ़ाइलों को डायवर्ट करने की अनुमति देना था, ताकि उन्हें स्थानीय रूप से संशोधित संस्करणों या किसी अन्य पैकेज से संस्करणों के साथ बदला जा सके, लेकिन मैं इसे अनुचर स्क्रिप्ट से इस तरह से उपयोग करने में सक्षम था कि dpkg अपने स्थापना कार्यों को पूरा करेगा लिनक्स विभाजन और फिर फ़ाइल को अंत में अपने अंतिम स्थान पर ले जाएं।

विविधता के लिए आपको "पैकेज नाम" या "स्थानीय" निर्दिष्ट करना होगा। यदि आप एक पैकेज का नाम निर्दिष्ट करते हैं, तो डायवर्जन आपके द्वारा निर्दिष्ट सभी को छोड़कर सभी पैकेजों के स्वामित्व वाली फ़ाइलों को प्रभावित करेगा (यहां आशय यह है कि एक पैकेज दूसरे पैकेज के स्वामित्व वाली फ़ाइल को हटाने और फिर अपने स्वयं के संस्करण स्थापित करने की अनुमति देता है)। फ़ाइलों को डायवर्ट करने के लिए मुझे एक निर्देशिका की भी आवश्यकता थी।

कर्नेल पैकेज के नाम के उपयोग से हैक अप्रभावी हो जाता है। "स्थानीय" का उपयोग करना भी गलत लग रहा था, क्योंकि इसे स्थानीय सिसडमिन द्वारा उपयोग के लिए आरक्षित माना जाता है। इसलिए मुझे एक नकली पैकेज नाम की आवश्यकता थी जो किसी भी चीज के साथ संघर्ष करने की संभावना नहीं थी। मैं "रिपिकार्नेक" के साथ आया था, मैंने निर्देशिका नाम के लिए भी इसी स्ट्रिंग का उपयोग किया था।


4
इस उत्तर के लिए बहुत बहुत धन्यवाद। यह डिजाइन और नामकरण के फैसले के प्रति बहुत ही व्यावहारिक था। इंटरनेट मेरे लिए एक जादू की जगह है जो उस व्यक्ति से प्रतिक्रिया प्राप्त करने में सक्षम है जिसने वास्तव में इस विशिष्ट टुकड़े पर काम किया था।
एमडी -7

बस मेरे आरपीआई को अपडेट कर रहा था और इस अजीब लॉग के बारे में सोच रहा था, अंतिम स्पष्टीकरण के लिए धन्यवाद।
schlump

FAT32 के साथ अच्छी तरह से dpkg खेलने के लिए क्लीनर नहीं होगा। यहाँ एमआर I सुझाव है: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136

43

यह डेवलपर्स द्वारा दिया गया केवल निर्देशिका नाम है, जिसने लिनक्स कर्नेल के लिए पैच का एक विशिष्ट रास्पबेरी पाई बनाया है।

यह FAT2016 कर्नेल में मौजूद फाइल-सिस्टम भ्रष्टाचार मुद्दे को ठीक करने के लिए रास्पियन डेवलपर्स द्वारा एक फिक्स है , 2017 कर्नेल के लिए यह अपडेट है और चिंता की कोई बात नहीं है। इस कर्नेल अपडेट को बनाने के लिए आपको sudo apt install -fबग के कारण निर्भरता के मुद्दों को ठीक करने के लिए उपयोग करने की आवश्यकता है ( -fइस संदर्भ में, मैन पेज के अनुसार apt-get(8):

-f, - उपसर्ग-टूटा हुआ
फिक्स; जगह में टूटी हुई निर्भरता के साथ एक प्रणाली को सही करने का प्रयास। ...

)


0

FWIW, यह फिर से तब हुआ जब मैंने एक rpi3b + रनिंग स्ट्रेच पर 2019-02-28 पर अपडेट अपग्रेड किया। डायवर्सन की 182 लाइनें ... rpikernalhack ... जिनमें से एक नमूना है:

Preparing to unpack .../17-raspberrypi-kernel_1.20190215-1_armhf.deb ...
Adding 'diversion of /boot/bcm2708-rpi-0-w.dtb to /usr/share/rpikernelhack/bcm2708-rpi-0-w.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b-plus.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b-plus.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-cm.dtb to /usr/share/rpikernelhack/bcm2708-rpi-cm.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2709-rpi-2-b.dtb to /usr/share/rpikernelhack/bcm2709-rpi-2-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2710-rpi-3-b-plus.dtb to /usr/share/rpikernelhack/bcm2710-rpi-3-b-plus.dtb by rpikernelhack'

...
...

यदि यह मदद करता है, तो एक घंटे पहले मैंने एक अद्यतन अपग्रेड किया था और यह (2) हैश राशि बेमेल था। शायद यह ठीक ही था क्योंकि रिपॉजिटरी को अपडेट किया जा रहा था? मैंने रिबूट किया, एक घंटे इंतजार किया, और दूसरा अपडेट अपग्रेड किया, कोई हैश राशि बेमेल नहीं थी, और वह भी तब जब मुझे डायवर्सन की 182 लाइनें मिलीं ... rpikernalhack।

परिणामी संस्करण:

pi@___:~ $ uname -a
Linux ISS 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux
pi@___:~ $

निश्चित रूप से जब मैं कहता हूं कि 'अपडेट अपग्रेड', मेरा मतलब है ...

sudo apt-get update
sudo apt-get upgrade

मैंने इसे पोस्ट किया, अजीब तरह से, एक उत्तर के रूप में, इसकी लंबाई के कारण, यह उम्मीद करते हुए कि यह चयनित उत्तर को समृद्ध करेगा, यह दर्शाता है कि इस तरह की चीज पिछले वर्ष से एक बार 'फिक्स' नहीं है।


1
मुझे समझ नहीं आ रहा है कि आपका अपग्रेड एक पुराने कर्नेल के साथ क्यों समाप्त होता है। वर्तमान कर्नेल 4.14.98-v7 + है
इंगो

मैंने एक अपडेट अपग्रेड किया और कुछ मिनट पहले रिबूट किया। गुठली अब है: लिनक्स आईएसएस 4.14.98-v7 + # 1200 एसएमपी मंगल फरवरी 12 20:27:48 GMT 2019 armv7l GNU / लिनक्स मेरे पास इसके अलावा अन्य कोई स्पष्टीकरण नहीं है, जैसा कि मेरी पोस्ट में कहा गया है, मुझे प्रतीत होता है रिपॉजिटरी अपडेट के समय पहला अपडेट कर रहा है (इसलिए हैश राशि बेमेल है?)। और दूसरा अपडेट या तो अभी तक 4.14.98-v7 + उपलब्ध नहीं है, या, कर्नेल को अपडेट करने से पहले अपडेट करने के लिए अधिक फाइलें थीं? मुझे नहीं पता। क्या आप? इसे इंगित करने के लिए TY।
हमेशा_लर्निंग

नहीं, मुझे अंदाजा नहीं है। हो सकता है कि रिपॉजिटरी सिर्फ अद्यतन और एक असंगत स्थिति में थी? वैसे भी ...
इंगो

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