Che cos'è rpikernelhack?


96

Quando apt-get upgradeeseguo un'operazione sul mio RPi 3, vengono visualizzate molte linee di output in questo modo:

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

Non sono molto istruito sulle funzionalità del kernel Linux e questo sembra abbastanza specifico per il RPi.

La mia domanda è: che cos'è tutto questo?

Che cos'è un "diversivo"? Cosa fanno realmente tutti questi file (come gruppo) a cui si fa riferimento? Che cos'è "rpikernelhack"?

Ho fatto un po 'di ricerche su Google e non sono riuscito a trovare facilmente qualcosa di interessante. Immagino di non essere il solo a essere curioso di questo, quindi spero che questa sia una domanda appropriata!


3
Certamente non l'unico che è curioso - mi piacerebbe saperlo anche io.
Joan

Anch'io. Ci sono voluti molto tempo quando lo sto facendo apt-get upgrade.
Kong Chun Ho,

2
Probabilmente non è così eccitante come pensi - penso che l '"hack" qui sia sul sistema di gestione dei pacchetti, non sul kernel. debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks

Ecco un esempio dalla preinstparte: dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img. Il link di @goldilocks spiega --packagechiaramente.
PNDA

2
@qbicdesign Penso che dipenda dalla tua comprensione della parola "hack" . Un uso comune sarebbe riferirsi a qualcosa che forse non è una soluzione ideale o corretta a un problema ma che funziona, almeno in un pizzico o con il minimo sforzo, quindi qualcuno lo sta semplicemente indicando esplicitamente (quello all'inizio di quell'articolo non è una soluzione a qualsiasi cosa, ma il tema comune sarebbe "improprio" = "usando qualcosa in un modo in cui non era inteso" = "non necessariamente sbagliato, forse persino intelligente").
riccioli d'oro

Risposte:


69

"rpikernelhack" è un nome di pacchetto falso e un nome di directory utilizzato come parte di un hack (nel senso di una soluzione sporca ma utile a un problema) per aggirare il fatto che la fondazione Raspberry Pi ha deciso di creare / avviare una partizione fat32 e dpkg non va d'accordo con fat32. All'inizio mi è venuta l'idea, anche se in seguito è stata affinata da altri.

dpkg installerà nuovi file su una partizione fat32 (emettendo alcuni avvertimenti lungo la strada), ma se tenta di aggiornare un file esistente su una partizione fat32 fallirà (iirc tenta di fare un backup del vecchio file creando un hardlink e fat32 non supporta gli hardlink).

Quando le persone (incluso me) hanno iniziato a provare a creare pacchetti deb di kernel Pi e firmware, si sono imbattuti in questo problema, un pacchetto si installava inizialmente ma tentava di aggiornarlo avrebbe fallito, ahi.

La mia soluzione era di (ab) utilizzare la funzione "diversione" in dpkg. Questa funzione aveva lo scopo di consentire il trasferimento dei file in modo che potessero essere sostituiti con versioni o versioni modificate localmente da un altro pacchetto, ma sono stato in grado di usarlo dagli script del manutentore in modo tale che dpkg eseguisse le sue attività di installazione su un Partizione Linux e quindi spostare il file nella posizione finale alla fine.

Le deviazioni richiedono di specificare un "nome pacchetto" o "locale". Se si specifica un nome di pacchetto, la deviazione influenzerà i file di proprietà di tutti i pacchetti tranne quello specificato (l'intenzione è quella di consentire a un pacchetto di deviare un file di proprietà di un altro pacchetto e quindi installare le proprie versioni). Avevo anche bisogno di una directory in cui deviare i file.

L'uso del nome del pacchetto del kernel installato avrebbe reso inefficace l'hack. Anche l'uso di "local" sembrava sbagliato, dal momento che si suppone che sia riservato all'amministratore locale. Quindi avevo bisogno di un nome di pacchetto falso che era improbabile che fosse in conflitto con qualcosa. Ho inventato "rpikernelhack", ho usato anche questa stessa stringa per il nome della directory.


4
Grazie mille per questa risposta Era molto perspicace nei confronti delle decisioni di progettazione e denominazione. Internet è un posto magico in cui sono stato in grado di ottenere una risposta dal ragazzo che ha effettivamente lavorato su questo specifico pezzo in questione.
MD-7,

Stavo solo aggiornando il mio RPi e mi chiedevo questo strano registro, grazie per il massimo chiarimento.
schlump,

Non sarebbe più pulito far funzionare bene dpkg con FAT32. Ecco l'MR che suggerisco: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136

43

È solo il nome della directory fornito dagli sviluppatori che hanno creato un set specifico di patch per Raspberry Pi per il kernel Linux.

È una correzione da parte degli sviluppatori di Raspbian risolvere un FATproblema di corruzione del file system presente nel kernel 2016, che si aggiorna al kernel 2017 e non è nulla di cui preoccuparsi. Per rendere questo aggiornamento del kernel è necessario utilizzare sudo apt install -fper risolvere i problemi di dipendenza causati dal bug (la -fin questo contesto significa, secondo la pagina man, apt-get(8):

-f, --fix-broken
Fix; tenta di correggere un sistema con dipendenze rotte in atto. ...

)


0

FWIW, questo si è verificato di nuovo quando ho fatto un aggiornamento di aggiornamento il 28-02-2019 su un tratto in esecuzione rpi3b +. 182 linee di diversione ... rpikernalhack ... di cui ecco un esempio:

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'

...
...

Se aiuta, un'ora prima ho fatto un aggiornamento e ha prodotto (2) disadattamenti della somma hash. Forse era proprio mentre il repository veniva aggiornato? Ho riavviato, ho aspettato un'ora e ho fatto il secondo aggiornamento, non ho avuto disallineamenti della somma di hash, e questo è anche quando ho ottenuto le 182 linee di diversione ... rpikernalhack.

La versione risultante:

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

Naturalmente quando dico "aggiorna l'aggiornamento" intendo ...

sudo apt-get update
sudo apt-get upgrade

Ho pubblicato questo, goffamente, come una risposta, a causa della sua lunghezza, sperando che arricchisse la risposta selezionata, dimostrando che questo genere di cose non è una "correzione" di una volta rispetto all'anno precedente.


1
Non capisco perché il tuo aggiornamento si concluda con un vecchio kernel. L'attuale kernel è 4.14.98-v7 + .
Ingo

Ho eseguito un aggiornamento di aggiornamento e riavviato un paio di minuti fa. Il kernal ora è: Linux ISS 4.14.98-v7 + # 1200 SMP mar 12 febbraio 20:27:48 GMT 2019 armv7l GNU / Linux Non ho una spiegazione per questo a parte che, come indicato nel mio post, mi sembra di avere ha fatto il primo aggiornamento al momento di un aggiornamento del repository (quindi la somma di hash non corrisponde?). E il secondo aggiornamento o non aveva ancora disponibile 4.14.98-v7 +, oppure c'erano altri file da aggiornare prima che aggiornasse il kernal? Non lo so. Fai? TY per averlo sottolineato.
always_learning

No, non ne ho idea. Forse il repository è stato appena aggiornato e in uno stato incoerente? Comunque ...
Ingo

Sarò consapevole di questa possibilità in futuro.
always_learning
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.