Apa itu rpikernelhack?

96

Saat melakukan apt-get upgradeRPi 3 saya, banyak garis keluaran muncul seperti ini:

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

Saya tidak terlalu terdidik tentang fitur-fitur kernel Linux dan ini terlihat cukup spesifik untuk RPi.

Pertanyaan saya adalah: Ada apa ini?

Apa itu 'pengalihan'? Apa yang sebenarnya dilakukan semua file ini (sebagai grup) yang direferensikan? Apa itu 'rpikernelhack'?

Saya melakukan sedikit googling dan tidak dapat dengan mudah menemukan sesuatu yang menarik. Saya pikir saya bukan satu-satunya yang penasaran tentang ini jadi saya harap ini adalah pertanyaan yang tepat!

MD-7
sumber
3
Tentu bukan satu-satunya yang penasaran - saya ingin tahu juga.
joan
Saya juga. Mereka butuh waktu yang cukup lama ketika saya melakukannya apt-get upgrade.
Kong Chun Ho
2
Mungkin tidak semenarik yang Anda pikirkan - saya pikir "hack" di sini ada pada sistem manajemen paket, bukan kernel. debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks
Berikut ini adalah contoh dari preinstbagian: dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img. Tautan @goldilocks menjelaskan --packagedengan jelas.
PNDA
2
@ qbicdesign Saya pikir itu bergantung pada pemahaman Anda tentang kata "retas" . Salah satu penggunaan umum akan merujuk pada sesuatu yang mungkin bukan solusi yang ideal atau tepat untuk suatu masalah tetapi bekerja, setidaknya dalam keadaan darurat atau dengan sedikit usaha, jadi seseorang hanya menunjukkan bahwa secara eksplisit (yang pada awal artikel itu bukan itu solusi untuk apa pun, tetapi tema umum adalah "tidak patut" = "menggunakan sesuatu dengan cara yang tidak dimaksudkan" = "tidak selalu salah, bahkan mungkin pintar").
goldilocks

Jawaban:

69

"rpikernelhack" adalah nama paket palsu dan nama direktori yang digunakan sebagai bagian dari peretasan (dalam arti solusi yang kotor namun perlu untuk suatu masalah) untuk mengatasi kenyataan bahwa yayasan Raspberry Pi memutuskan untuk membuat / mem-boot partisi fat32 dan dpkg tidak cocok dengan fat32. Saya adalah orang yang awalnya datang dengan ide itu, meskipun kemudian disempurnakan oleh orang lain.

dpkg akan menginstal file baru ke partisi fat32 (memuntahkan beberapa peringatan di sepanjang jalan), tetapi jika ia mencoba memperbarui file yang ada pada partisi fat32 ia akan gagal (iirc ia mencoba membuat cadangan file lama dengan membuat hardlink dan fat32 tidak mendukung hardlink).

Ketika orang-orang (termasuk saya) mulai mencoba untuk membuat paket deb kernel Pi dan firmware yang mereka temui dalam masalah ini, sebuah paket akan menginstal pada awalnya tetapi mencoba untuk memutakhirkannya akan gagal, aduh.

Solusi saya adalah (ab) menggunakan fitur "pengalihan" dalam dpkg. Fitur ini dimaksudkan untuk memungkinkan file untuk dialihkan sehingga mereka dapat diganti dengan versi atau versi yang dimodifikasi secara lokal dari paket lain, tetapi saya dapat menggunakannya dari skrip pengelola sedemikian rupa sehingga dpkg akan melakukan tugas instalasi pada sebuah Partisi Linux dan kemudian memindahkan file ke lokasi terakhir di akhir.

Pengalihan mengharuskan Anda menentukan "nama paket" atau "lokal". Jika Anda menentukan nama paket maka pengalihan akan memengaruhi file yang dimiliki oleh semua paket kecuali yang Anda tentukan (maksudnya di sini adalah untuk memungkinkan suatu paket untuk mengalihkan file yang dimiliki oleh paket lain dan kemudian menginstal versinya sendiri). Saya juga membutuhkan direktori untuk mengalihkan file.

Menggunakan nama paket kernel yang sedang diinstal akan membuat peretasan tidak efektif. Menggunakan "lokal" juga tampak salah, karena itu seharusnya disediakan untuk digunakan oleh sysadmin lokal. Jadi saya membutuhkan nama paket palsu yang tidak mungkin bertentangan dengan apa pun. Saya datang dengan "rpikernelhack", saya juga menggunakan string yang sama untuk nama direktori.

Peter Green
sumber
4
Terima kasih banyak atas jawaban ini. Itu sangat wawasan terhadap keputusan desain dan penamaan. Internet adalah tempat ajaib bagi saya untuk bisa mendapatkan respons dari orang yang benar-benar mengerjakan bagian spesifik ini.
MD-7
Baru saja memperbarui RPi saya dan bertanya-tanya tentang log aneh ini, terima kasih atas klarifikasi utamanya.
schlump
Bukankah lebih bersih untuk membuat dpkg bermain bagus dengan FAT32. Inilah saran MR yang saya sarankan: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136
43

Itu hanya nama direktori yang diberikan oleh pengembang yang telah membuat satu set tambalan khusus Raspberry Pi ke kernel Linux.

Ini adalah perbaikan oleh pengembang Raspbian untuk memperbaiki FATmasalah korupsi sistem file yang ada di kernel 2016, ini pembaruan untuk kernel 2017 dan tidak perlu dikhawatirkan. Untuk membuat update kernel ini Anda perlu menggunakan sudo apt install -funtuk memperbaiki masalah ketergantungan yang disebabkan oleh bug (yang -fdalam konteks ini berarti, menurut halaman manual, apt-get(8):

-f, - fix-fix
Fix; mencoba untuk memperbaiki sistem dengan dependensi yang rusak di tempat. ...

)

Edmund Broadley
sumber
0

FWIW, ini terjadi lagi ketika saya melakukan pembaruan pada 2019-02-28 pada rpi3b + running stretch. 182 baris pengalihan ... rpikernalhack ... di mana di sini adalah contoh:

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'

...
...

Jika itu membantu, satu jam sebelumnya saya melakukan pembaruan pembaruan dan menghasilkan (2) ketidakcocokan jumlah Hash. Mungkin justru karena repositori sedang diperbarui? Saya reboot, menunggu satu jam, dan melakukan pembaruan pembaruan kedua, tidak memiliki ketidakcocokan jumlah Hash, dan itu juga ketika saya mendapat 182 baris pengalihan ... rpikernalhack.

Versi yang dihasilkan:

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

Tentu saja ketika saya mengatakan 'perbarui pemutakhiran', maksud saya ...

sudo apt-get update
sudo apt-get upgrade

Saya memposting ini, dengan canggung, sebagai jawaban, karena panjangnya, berharap itu akan memperkaya jawaban yang dipilih, menunjukkan bahwa hal semacam ini bukan 'perbaikan' satu kali dari tahun sebelumnya.

selalu belajar
sumber
1
Saya tidak mengerti mengapa pemutakhiran Anda berakhir dengan kernel lama. Kernel saat ini adalah 4.14.98-v7 + .
Ingo
Saya melakukan pemutakhiran pembaruan dan reboot beberapa menit yang lalu. Kernal sekarang: Linux ISS 4.14.98-v7 + # 1200 SMP Sel 12 Februari 20:27:48 GMT 2019 armv7l GNU / Linux Saya tidak memiliki penjelasan untuk ini selain, sebagaimana dinyatakan dalam posting saya, saya tampaknya memiliki telah melakukan pembaruan pertama pada saat pembaruan repositori (karenanya ketidakcocokan jumlah Hash?). Dan pembaruan kedua belum memiliki 4,14,98-v7 + tersedia, atau, ada lebih banyak file untuk diperbarui sebelum itu akan memperbarui kernal? Saya tidak tahu. Apakah kamu? TY untuk menunjukkannya.
always_learning
Tidak, saya tidak punya ide. Mungkin repositori baru saja diperbarui dan dalam keadaan tidak konsisten? Pokoknya ...
Ingo
Saya akan menyadari kemungkinan ini di masa depan.
always_learning