রিপিকার্নহ্যাক কী?


96

যখন একটি করছেন apt-get upgradeআমার RPi 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'
...
...
...

আমি লিনাক্স কার্নেল বৈশিষ্ট্যগুলিতে খুব শিক্ষিত নই এবং এটি আরপিআই-এর সাথে বেশ সুনির্দিষ্ট মনে হচ্ছে।

আমার প্রশ্ন: এই সব কি?

'ডাইভারশন' কী? এই সমস্ত ফাইল (গ্রুপ হিসাবে) যা উল্লেখ করা হচ্ছে তা আসলে কী করে? 'Rpikernelhack' কী?

আমি কিছুটা গুগল করলাম এবং খুব সহজেই আকর্ষণীয় কিছু খুঁজে পেলাম না। আমি অনুমান করি যে আমিই এই বিষয়ে আগ্রহী না তাই আমি আশা করি এটি একটি উপযুক্ত প্রশ্ন!


3
অবশ্যই একমাত্র কৌতুহলী নয় - আমি এটিও জানতে চাই।
Joan

আমিও. আমি যখন করছি তখন তারা বেশ দীর্ঘ সময় নিয়েছিল 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। @ গোল্ডিলোকসের লিঙ্কটি --packageপরিষ্কারভাবে ব্যাখ্যা করেছে ।
পিএনডিএ

2
@Qbicdesign আমি মনে করি যে "হ্যাক" শব্দটি আপনার বোঝার উপর নির্ভর করে । একটি সাধারণ ব্যবহার হ'ল এমন কিছু বিষয়কে বোঝানো যা সম্ভবত কোনও সমস্যার আদর্শ বা সঠিক সমাধান নয় তবে কাজ করে, কমপক্ষে একটি চিমটি বা ন্যূনতম প্রচেষ্টা সহ, সুতরাং যে কেউ কেবল স্পষ্টভাবে ইঙ্গিত করছে (article নিবন্ধটির শুরুতে একটি কোনও কিছুর সমাধান নয়, তবে প্রচলিত থিমটি "অনুচিত" = "এমন কিছু ব্যবহার করা হবে যার উদ্দেশ্য নয়" = "অগত্যা ভুল নয়, সম্ভবত চালাকও")।
স্বর্ণিলকস

উত্তর:


67

"আরপিকার্নেলহ্যাক" একটি নকল প্যাকেজ নাম এবং একটি ডিরেক্টরি নাম যা হ্যাকের অংশ হিসাবে ব্যবহৃত হয় (কোনও সমস্যার নোংরা তবে প্রশ্রয়জনক সমাধানের অর্থে) রাস্পবেরি পাই ফাউন্ডেশন একটি ফ্যাট 32 পার্টিশন তৈরি / বুট করার সিদ্ধান্ত নিয়েছে এবং dpkg ফ্যাট 32 এর সাথে ভাল হয় না। আমিই সেই ব্যক্তি যিনি প্রথমে ধারণাটি নিয়ে এসেছিলেন, যদিও এটি পরে অন্যদের দ্বারা পরিমার্জন করা হয়েছিল।

dpkg একটি ফ্যাট 32 পার্টিশনে নতুন ফাইলগুলি ইনস্টল করবে (পথে কিছু সতর্কতা বানিয়েছে) তবে এটি যদি ফ্যাট 32 পার্টিশনে কোনও বিদ্যমান ফাইল আপডেট করার চেষ্টা করে তবে এটি ব্যর্থ হয় (iirc এটি হার্ডলিংক তৈরি করে পুরানো ফাইলটির ব্যাকআপ তৈরি করার চেষ্টা করে) এবং ফ্যাট 32 হার্ডলিঙ্কগুলি সমর্থন করে না)।

লোকেরা (আমাকে সহ) পাই কার্নেল এবং ফার্মওয়্যারের ডিবে প্যাকেজগুলি তৈরি করার চেষ্টা শুরু করে যখন তারা এই সমস্যার মধ্যে পড়েছিল, একটি প্যাকেজ শুরুতে ইনস্টল হবে তবে এটি আপগ্রেড করার চেষ্টা করা ব্যর্থ হবে, আউট হবে।

আমার কর্মসূচীটি ছিল (আবু) dpkg এ "ডাইভার্সন" বৈশিষ্ট্যটি ব্যবহার করা। এই বৈশিষ্ট্যটির উদ্দেশ্য ছিল ফাইলগুলি ডাইভার্ট করার অনুমতি দেওয়া হয়েছিল যাতে সেগুলি স্থানীয়ভাবে পরিবর্তিত সংস্করণ বা অন্য প্যাকেজের সংস্করণগুলি দিয়ে প্রতিস্থাপন করা যায়, তবে আমি ডিএনপিইজি এটির ইনস্টলেশন কাজগুলি এমনভাবে সঞ্চালন করতে সক্ষম হয়েছি d লিনাক্স পার্টিশন এবং তারপরে ফাইলটি তার চূড়ান্ত স্থানে স্থানান্তরিত করুন।

বিবর্তনের জন্য আপনাকে "প্যাকেজের নাম" বা "স্থানীয়" নির্দিষ্ট করতে হবে। আপনি যদি কোনও প্যাকেজের নাম নির্দিষ্ট করে থাকেন তবে ডাইভার্সনটি আপনার নির্দিষ্ট করা ব্যতীত সমস্ত প্যাকেজগুলির মালিকানাযুক্ত ফাইলগুলিকে প্রভাব ফেলবে (এখানে উদ্দেশ্যটি হ'ল প্যাকেজটিকে অন্য প্যাকেজের মালিকানাধীন কোনও ফাইল ডাইভার্ট করার অনুমতি দেওয়া এবং তারপরে তার নিজস্ব সংস্করণ ইনস্টল করা)। ফাইলগুলি ডাইভার্ট করার জন্য আমারও একটি ডিরেক্টরি দরকার ছিল।

ইনস্টল করা কার্নেল প্যাকেজের নাম ব্যবহার করা হ্যাকটিকে অকার্যকরভাবে উপস্থাপন করতে পারে। "স্থানীয়" ব্যবহার করাও ভুল বলে মনে হয়েছিল, যেহেতু এটি স্থানীয় সিসাদমিন দ্বারা ব্যবহারের জন্য সংরক্ষিত থাকার কথা। সুতরাং আমার একটি জাল প্যাকেজ নাম প্রয়োজন যা কোনও কিছুর সাথে দ্বন্দ্ব হওয়ার সম্ভাবনা ছিল না। আমি "rpikernelhack" নিয়ে এসেছি, আমি ডিরেক্টরি নামের জন্যও একই স্ট্রিংটি ব্যবহার করেছি।


4
এই উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। এটি নকশা এবং নামকরণের সিদ্ধান্তের প্রতি খুব অন্তর্দৃষ্টিপূর্ণ ছিল। ইন্টারনেটটি আমার পক্ষে একটি যাদু জায়গা যা এই ছেলের কাছ থেকে প্রতিক্রিয়া পেতে সক্ষম হয়েছিল যিনি আসলে এই নির্দিষ্ট অংশটিতে প্রশ্নে কাজ করেছেন।
MD-7

চূড়ান্ত স্পষ্টতার জন্য ধন্যবাদ, কেবল আমার আরপিআই আপডেট করে এবং এই অদ্ভুত লগ সম্পর্কে অবাক হয়েছিল।
স্ক্লল্প

এফএটি 32 এর সাথে ডিপিকেজি সুন্দরভাবে খেলানো কি পরিষ্কার নয়? আমি প্রস্তাবিত এমআরটি এখানে: salsa.debian.org/cklein-guest/dpkg/
विस

43

এটি কেবলমাত্র সেই বিকাশকারীদের দেওয়া ডিরেক্টরি নাম যা লিনাক্স কার্নেলের জন্য একটি রাস্পবেরি পাই নির্দিষ্ট প্যাচগুলির সেট তৈরি করেছে।

FAT2016 এর কার্নেলের মধ্যে উপস্থিত একটি ফাইল-সিস্টেম দুর্নীতি ইস্যুটি ঠিক করার জন্য এটি রাস্পবিয়ান বিকাশকারীদের দ্বারা ঠিক করা , এটি 2017 কার্নেলের কাছে আপডেট এবং উদ্বেগের কিছু নেই nothing এই কার্নেল আপডেটটি করতে sudo apt install -fআপনার বাগের কারণে সৃষ্ট নির্ভরতা সমস্যাগুলি ঠিক করতে ব্যবহার করতে হবে ( -fম্যান পৃষ্ঠা অনুসারে এই প্রসঙ্গে বোঝানো হয়েছে apt-get(8):

-ফ, --ফিক্স-ভাঙা
ফিক্স; জায়গায় ভাঙা নির্ভরতা সহ একটি সিস্টেম সংশোধন করার চেষ্টা করুন। ...

)


0

এফডাব্লুআইডাব্লু, যখন আমি আরপিআই 3 বি + চলমান প্রসারে 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) হ্যাশ যোগফলগুলি mat সংগ্রহস্থলটি আপডেট হওয়ার সাথে সাথে সম্ভবত এটি ছিল? আমি রিবুট করলাম, এক ঘন্টা অপেক্ষা করলাম, এবং দ্বিতীয় আপডেটটি আপগ্রেড করলাম, কোনও হ্যাশ যোগফল ছিল না, এবং এটিও যখন আমি পেয়েছিলাম 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 20:4:48 GMT 2019 আর্মভ 7 এল জিএনইউ / লিনাক্সের আমার অন্য কোনও ব্যাখ্যা নেই, আমার পোস্টে যেমন বলা হয়েছে, আমার কাছে উপস্থিত রয়েছে বলে মনে হচ্ছে একটি সংগ্রহস্থল আপডেটের সময় প্রথম আপডেট করা হয়েছে (সুতরাং হ্যাশ যোগফল মেলে না?)। এবং দ্বিতীয় আপডেটটি হয় এখনও 4.14.98-v7 + উপলভ্য হয়নি, বা এর্নাল আপডেট হওয়ার আগে আরও ফাইল আপডেট করার আগে? আমি জানি না. আপনি কি? এটি নির্দেশ করার জন্য টিওয়াই
সর্বদা

না, আমার ধারণা নেই। হয়তো সঞ্চিতাগুলি সবেমাত্র আপডেট হয়েছে এবং বেমানান অবস্থায় আছে? যাইহোক ...
ইনগো

আমি ভবিষ্যতে এই সম্ভাবনা সম্পর্কে সচেতন হতে হবে।
সর্বদা_চলাচল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.