rpikernelhack คืออะไร


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

ฉันไม่ได้รับการศึกษามากนักเกี่ยวกับคุณสมบัติเคอร์เนลลินุกซ์และนี่มันดูค่อนข้างเฉพาะกับ RPi

คำถามของฉันคืออะไรทั้งหมดนี้คืออะไร

'การเบี่ยงเบน' คืออะไร? ไฟล์ทั้งหมดเหล่านี้ (ในกลุ่ม) ที่อ้างอิงอยู่ทำอะไรได้บ้าง? 'rpikernelhack' คืออะไร?

ฉันทำ googling นิดหน่อยและหาอะไรที่น่าสนใจไม่ได้ง่ายๆ ฉันคิดว่าฉันไม่ใช่คนเดียวที่อยากรู้เกี่ยวกับเรื่องนี้ดังนั้นฉันหวังว่านี่เป็นคำถามที่เหมาะสม!


3
แน่นอนไม่ใช่คนเดียวที่อยากรู้อยากเห็น - ฉันต้องการทราบเช่นกัน
joan

ฉันด้วย. apt-get upgradeพวกเขาใช้เวลานานมากเมื่อฉันทำ
งชุนโฮ

2
อาจไม่น่าตื่นเต้นอย่างที่คุณคิด - ฉันคิดว่า "แฮ็ค" ที่นี่อยู่ในระบบการจัดการแพ็กเกจไม่ใช่เคอร์เนล debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks

นี่คือตัวอย่างจากส่วนหนึ่ง:preinst dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.imgลิงก์ @goldilocks 'อธิบาย--packageอย่างชัดเจน
PNDA

2
@qbicdesign ผมคิดว่าขึ้นอยู่กับความเข้าใจของคำว่า"สับ" การใช้งานธรรมดาอย่างหนึ่งจะหมายถึงสิ่งที่อาจไม่ใช่วิธีแก้ปัญหาที่เหมาะสมหรือเหมาะสม แต่ใช้งานได้อย่างน้อยในการเหน็บแนมหรือด้วยความพยายามน้อยที่สุดดังนั้นบางคนจึงแสดงให้เห็นอย่างชัดเจนว่า (ตอนเริ่มต้นของบทความนั้นไม่ชัดเจน ไม่ใช่วิธีการแก้ปัญหาใด ๆ แต่รูปแบบทั่วไปจะเป็น "ไม่เหมาะสม" = "การใช้บางอย่างในแบบที่มันไม่ได้ตั้งใจ" = "ไม่จำเป็นต้องผิดอาจจะฉลาด")
goldilocks

คำตอบ:


67

"rpikernelhack" เป็นชื่อแพคเกจปลอมและชื่อไดเรกทอรีที่ใช้เป็นส่วนหนึ่งของการแฮ็ก (ในแง่ของวิธีการแก้ปัญหาที่สกปรก แต่สะดวกสำหรับปัญหา) เพื่อหลีกเลี่ยงความจริงที่ว่ามูลนิธิ Raspberry Pi ตัดสินใจที่จะสร้าง / บูตพาร์ติชัน fat32 และ dpkg ไม่สอดคล้องกับ fat32 ฉันเป็นคนแรกที่คิดไอเดียแม้ว่ามันจะถูกขัดเกลาโดยคนอื่น

dpkg จะติดตั้งไฟล์ใหม่บนพาร์ติชัน fat32 (แจ้งเตือนไปพร้อมกัน) แต่ถ้าพยายามอัปเดตไฟล์ที่มีอยู่บนพาร์ติชัน fat32 มันจะล้มเหลว (iirc จะพยายามสำรองไฟล์เก่าด้วยการสร้างฮาร์ดลิงก์ และ fat32 ไม่สนับสนุนการเชื่อมโยง)

เมื่อผู้คน (รวมถึงฉัน) เริ่มพยายามที่จะทำแพ็กเกจ deb ของ Pi เมล็ดและเฟิร์มแวร์พวกเขาพบปัญหานี้แพคเกจจะติดตั้งครั้งแรก แต่พยายามที่จะอัพเกรดมันจะล้มเหลว ouch

วิธีแก้ปัญหาของฉันคือ (ab) ใช้คุณสมบัติ "การเบี่ยงเบน" ใน dpkg คุณลักษณะนี้มีวัตถุประสงค์เพื่ออนุญาตให้มีการโอนไฟล์เพื่อให้สามารถแทนที่ด้วยรุ่นที่แก้ไขในเครื่องหรือรุ่นอื่นจากแพ็คเกจอื่น แต่ฉันสามารถใช้งานได้จากสคริปต์ผู้ดูแลในลักษณะที่ dpkg จะทำงานในการติดตั้งบน พาร์ติชัน Linux แล้วย้ายไฟล์ไปยังตำแหน่งสุดท้ายในตอนท้าย

ความหลากหลายนั้นคุณต้องระบุ "ชื่อแพ็คเกจ" หรือ "ท้องถิ่น" หากคุณระบุชื่อแพ็กเกจการผันจะมีผลกับไฟล์ที่เป็นของแพ็กเกจทั้งหมดยกเว้นชื่อที่คุณระบุ ฉันยังต้องการไดเรกทอรีเพื่อโอนไฟล์เป็น

การใช้ชื่อของแพ็คเกจเคอร์เนลที่ติดตั้งจะทำให้การแฮ็คไม่ได้ผล การใช้ "โลคัล" ก็ดูเหมือนผิดเนื่องจากควรจะถูกสงวนไว้สำหรับดูแลระบบภายในเครื่อง ดังนั้นฉันต้องการชื่อแพคเกจปลอมที่ไม่น่าจะขัดแย้งกับสิ่งใด ฉันมากับ "rpikernelhack" ฉันยังใช้สตริงเดียวกันนี้สำหรับชื่อไดเรกทอรี


4
ขอบคุณมากสำหรับคำตอบนี้ มันลึกซึ้งมากต่อการออกแบบและการตัดสินใจตั้งชื่อ อินเทอร์เน็ตเป็นสถานที่ที่วิเศษสำหรับฉันที่จะได้รับการตอบรับจากคนที่ทำงานในเรื่องนี้โดยเฉพาะ
MD-7

เพิ่งอัปเดต RPi ของฉันและสงสัยเกี่ยวกับบันทึกแปลก ๆ นี้ขอบคุณสำหรับการชี้แจงที่ชัดเจนที่สุด
schlump

คงจะดีกว่าไหมถ้าจะทำให้ dpkg เล่นได้ดีด้วย FAT32 นี่คือ MR ที่ฉันแนะนำ: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136

43

มันเป็นเพียงชื่อไดเรกทอรีที่กำหนดโดยนักพัฒนาที่สร้างชุดแพทช์ Raspberry Pi เฉพาะให้กับเคอร์เนลลินุกซ์

มันคือการแก้ไขโดยนักพัฒนา Raspbian เพื่อแก้ไขFATความเสียหายของระบบไฟล์ออกในปัจจุบัน 2016 เคอร์เนลนี้จะอัปเดต 2017 เคอร์เนลและอะไรที่จะต้องกังวลเกี่ยวกับ ในการอัพเดตเคอร์เนลนี้คุณต้องใช้sudo apt install -fเพื่อแก้ไขปัญหาการพึ่งพาที่เกิดจากข้อบกพร่อง ( -fในบริบทนี้หมายถึงตามหน้า man apt-get(8):

-f, - โปรแกรมแก้ไขที่ใช้งานไม่ได้
; พยายามแก้ไขระบบที่มีการพึ่งพาที่ขาด ...

)


0

FWIW เกิดขึ้นอีกครั้งเมื่อฉันอัปเกรดอัปเดตเมื่อวันที่ 2019-02-28 บน rpi3b + ที่ยืดออก การเบี่ยงเบน 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) Hash sum ไม่ตรงกัน อาจเป็นเพราะที่เก็บข้อมูลถูกอัพเดตหรือไม่ ฉันรีบูทรออีกหนึ่งชั่วโมงและทำการอัปเดตอัปเดตครั้งที่สองไม่มีข้อผิดพลาดของ Hash sum และนั่นก็คือเมื่อฉันได้รับการเบี่ยงเบนทาง 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 +
Ingo

ฉันทำการอัปเกรดอัปเดตและรีบูตสองสามนาทีที่ผ่านมา kernal อยู่ในขณะนี้: Linux ISS 4.14.98-v7 + # 1200 SMP อ. ก.พ. 12 20:27:48 GMT 2019 armv7l GNU / Linux ฉันไม่มีคำอธิบายสำหรับเรื่องอื่นนอกเหนือจากที่ระบุไว้ในโพสต์ของฉันฉันดูเหมือนจะมี ทำการอัปเดตครั้งแรกในเวลาที่มีการอัปเดตที่เก็บข้อมูล (ดังนั้นผลรวมแฮชไม่ตรงกัน?) และการอัปเดตครั้งที่สองยังไม่มี 4.14.98-v7 + หรือมีไฟล์เพิ่มเติมให้อัปเดตก่อนที่จะอัปเดต kernal ฉันไม่รู้. คุณ TY สำหรับชี้มันออกมา
always_learning

ไม่ฉันไม่มีความคิด บางทีที่เก็บอาจถูกอัพเดตและอยู่ในสถานะไม่สอดคล้องกันใช่ไหม ยังไงก็ตาม ...
Ingo

ฉันจะต้องตระหนักถึงความเป็นไปได้นี้ในอนาคต
always_learning
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.