Rpikernelhack là gì?


96

Khi thực hiện apt-get upgradetrên RPi 3 của tôi, nhiều dòng đầu ra hiển thị như thế này:

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

Tôi không được giáo dục nhiều về các tính năng nhân Linux và điều này có vẻ khá cụ thể đối với RPi.

Câu hỏi của tôi là: tất cả những thứ này là gì?

'Chuyển hướng' là gì? Tất cả những tập tin này (như một nhóm) đang được tham chiếu, thực sự làm gì? 'Rpikernelhack' là gì?

Tôi đã làm một chút googling và không thể dễ dàng tìm thấy bất cứ điều gì thú vị. Tôi nghĩ rằng tôi không phải là người duy nhất tò mò về điều này vì vậy tôi hy vọng đây là một câu hỏi thích hợp!


3
Chắc chắn không phải là người duy nhất tò mò - tôi cũng muốn biết.
joan

Tôi cũng vậy. Họ đã mất một thời gian khá dài khi tôi đang làm apt-get upgrade.
Kong Chun Ho

2
Có lẽ không thú vị như bạn nghĩ - tôi nghĩ rằng "hack" ở đây là trên hệ thống quản lý gói, không phải kernel. debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks

Đây là một mẫu từ preinstphần : dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img. Liên kết @goldilocks giải thích --packagerõ ràng.
PNDA

2
@qbicdesign Tôi nghĩ rằng bản lề của bạn hiểu từ "hack" . Một cách sử dụng phổ biến sẽ là đề cập đến một cái gì đó có lẽ không phải là một giải pháp lý tưởng hoặc phù hợp cho một vấn đề nhưng hoạt động, ít nhất là trong một tình huống khó khăn hoặc với nỗ lực tối thiểu, vì vậy ai đó chỉ chỉ ra điều đó một cách rõ ràng (phần đầu của bài viết đó không phải là 'không phải là giải pháp cho bất cứ điều gì, nhưng chủ đề chung sẽ là "không đúng" = "sử dụng một cái gì đó theo cách mà nó không có ý định" = "không nhất thiết là sai, thậm chí có thể thông minh").
goldilocks

Câu trả lời:


69

"rpikernelhack" là tên gói giả và tên thư mục được sử dụng như một phần của hack (theo nghĩa là một giải pháp bẩn nhưng phù hợp cho một vấn đề) để giải quyết vấn đề nền tảng Raspberry Pi đã quyết định tạo / khởi động phân vùng fat32 và dpkg không ổn với fat32. Tôi là người ban đầu nảy ra ý tưởng, mặc dù nó đã được những người khác tinh chỉnh sau đó.

dpkg sẽ cài đặt các tệp mới vào phân vùng fat32 (đưa ra một số cảnh báo trên đường đi), nhưng nếu nó cố cập nhật một tệp hiện có trên phân vùng fat32 thì nó sẽ thất bại (iirc nó cố gắng sao lưu tệp cũ bằng cách tạo một liên kết cứng và fat32 không hỗ trợ liên kết cứng).

Khi mọi người (bao gồm cả tôi) bắt đầu thử tạo các gói gỡ lỗi của hạt nhân Pi và phần sụn mà họ gặp phải vấn đề này, một gói sẽ cài đặt ban đầu nhưng cố gắng nâng cấp nó sẽ thất bại, ouch.

Cách giải quyết của tôi là (ab) sử dụng tính năng "chuyển hướng" trong dpkg. Tính năng này nhằm cho phép các tệp được chuyển hướng để có thể thay thế chúng bằng các phiên bản hoặc phiên bản được sửa đổi cục bộ từ gói khác, nhưng tôi có thể sử dụng nó từ các tập lệnh bảo trì theo cách mà dpkg sẽ thực hiện các tác vụ cài đặt của nó trên một Phân vùng Linux và sau đó di chuyển tệp đến vị trí cuối cùng của nó ở cuối.

Chuyển hướng yêu cầu bạn chỉ định "tên gói" hoặc "cục bộ". Nếu bạn chỉ định tên gói thì việc chuyển hướng sẽ ảnh hưởng đến các tệp thuộc sở hữu của tất cả các gói ngoại trừ tên bạn chỉ định (mục đích ở đây là cho phép gói chuyển hướng một tệp thuộc sở hữu của gói khác và sau đó cài đặt các phiên bản của chính nó). Tôi cũng cần một thư mục để chuyển hướng các tập tin.

Sử dụng tên của gói kernel đang được cài đặt sẽ khiến việc hack không hiệu quả. Sử dụng "cục bộ" cũng có vẻ sai, vì điều đó được cho là dành riêng cho sysadmin địa phương. Vì vậy, tôi cần một tên gói giả không có khả năng xung đột với bất cứ điều gì. Tôi đã đưa ra "rpikernelhack", tôi cũng đã sử dụng chuỗi này cho tên thư mục.


4
Cảm ơn bạn rất nhiều vì câu trả lời này. Nó rất sâu sắc đối với các quyết định thiết kế và đặt tên. Internet là một nơi kỳ diệu để tôi có thể nhận được phản hồi từ anh chàng thực sự làm việc về tác phẩm cụ thể này.
MD-7

Chỉ là cập nhật RPi của tôi và tự hỏi về nhật ký kỳ lạ này, cảm ơn vì đã làm rõ cuối cùng.
schlump

Sẽ không sạch sẽ hơn khi khiến dpkg chơi độc đáo với FAT32. Đây là MR tôi đề xuất: salsa.debian.org/cklein-guest/dpkg/merge_Vquests/1/diffs
user1202136

43

Đây chỉ là tên thư mục được cung cấp bởi các nhà phát triển đã tạo ra một bộ bản vá cụ thể của Raspberry Pi cho nhân Linux.

Đây là một bản sửa lỗi của các nhà phát triển Raspbian để khắc phục sự cố FATtham nhũng hệ thống tệp có trong kernel 2016, bản cập nhật này cho kernel 2017 và không có gì phải lo lắng. Để thực hiện cập nhật kernel này, bạn cần sử dụng sudo apt install -fđể khắc phục các sự cố phụ thuộc do lỗi gây ra ( -ftrong ngữ cảnh này có nghĩa là, theo trang man , apt-get(8):

-f, -
Sửa lỗi bị lỗi; cố gắng sửa một hệ thống với các phụ thuộc bị hỏng tại chỗ. ...

)


0

FWIW, điều này xảy ra một lần nữa khi tôi thực hiện nâng cấp cập nhật vào 2019-02-28 trên đoạn đường chạy rpi3b +. 182 dòng chuyển hướng ... rpikernalhack ... trong đó đây là một mẫu:

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'

...
...

Nếu nó giúp, một giờ trước tôi đã thực hiện nâng cấp cập nhật và nó đã tạo ra (2) Hash sum không khớp. Có lẽ nó chính xác như kho lưu trữ đang được cập nhật? Tôi đã khởi động lại, đợi một tiếng đồng hồ và thực hiện nâng cấp bản cập nhật thứ hai, không có sự không phù hợp Hash sum, và đó cũng là khi tôi nhận được 182 dòng chuyển hướng ... rpikernalhack.

Phiên bản kết quả:

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

Tất nhiên khi tôi nói 'cập nhật nâng cấp', ý tôi là ...

sudo apt-get update
sudo apt-get upgrade

Tôi đã đăng bài này, một cách lúng túng, như một câu trả lời, do độ dài của nó, hy vọng nó sẽ làm phong phú thêm câu trả lời đã chọn, cho thấy loại điều này không phải là một lần 'sửa chữa' từ một năm trước.


1
Tôi không hiểu tại sao nâng cấp của bạn kết thúc với một kernel cũ. Hạt nhân hiện tại là 4.14.98-v7 + .
Ingo

Tôi đã thực hiện nâng cấp cập nhật và khởi động lại vài phút trước. Hiện tại, hạt nhân là: Linux ISS 4.14.98-v7 + # 1200 SMP Tue ngày 12 tháng 2 20:27:48 GMT 2019 armv7l GNU / Linux Tôi không có lời giải thích nào cho vấn đề này ngoài, như đã nêu trong bài đăng của tôi, tôi dường như có đang thực hiện cập nhật đầu tiên tại thời điểm cập nhật kho lưu trữ (do đó, tổng Hash không khớp?). Và bản cập nhật thứ hai chưa có sẵn 4.14.98-v7 +, hoặc, có nhiều tệp để cập nhật trước khi cập nhật kernal? Tôi không biết. Phải không TY đã chỉ ra nó.
always_learning

Không, tôi không có ý tưởng. Có lẽ kho lưu trữ vừa được cập nhật và ở trạng thái không nhất quán? Dù sao ...
Ingo

Tôi sẽ nhận thức được khả năng này trong tương lai.
always_learning
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.