Was ist RPIKERNELHACK?

96

Bei der apt-get upgradeAusführung von RPi 3 werden viele Ausgabezeilen wie folgt angezeigt:

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

Ich bin nicht sehr gut mit den Funktionen des Linux-Kernels vertraut und das sieht für das RPi ziemlich spezifisch aus.

Meine Frage ist: Was ist das alles?

Was ist eine Ablenkung? Was tun all diese Dateien (als Gruppe), auf die verwiesen wird? Was ist "rpikernelhack"?

Ich habe ein bisschen gegoogelt und konnte nicht leicht etwas Interessantes finden. Ich glaube, ich bin nicht der Einzige, der neugierig ist, also hoffe ich, dass dies eine angemessene Frage ist!

MD-7
quelle
3
Sicher nicht der Einzige, der neugierig ist - das würde ich auch gerne wissen.
Joan
Ich auch. Sie haben ziemlich lange gebraucht, wenn ich es tue apt-get upgrade.
Kong Chun Ho
2
Wahrscheinlich nicht so aufregend, wie Sie denken - ich denke, der "Hack" liegt hier auf dem Paketverwaltungssystem, nicht auf dem Kernel. debian.org/doc/debian-policy/ap-pkg-diversions.html
Goldlöckchen
Hier ist ein Beispiel aus dem preinstTeil: dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img. @ Goldilocks Link erklärt --packageklar.
PNDA
2
@qbicdesign Ich denke, das hängt von Ihrem Verständnis des Wortes "Hack" ab . Eine gebräuchliche Verwendung wäre, sich auf etwas zu beziehen, das vielleicht keine ideale oder richtige Lösung für ein Problem darstellt, aber zumindest zur Not oder mit minimalem Aufwand funktioniert 't eine Lösung für alles, aber das gemeinsame Thema wäre "unsachgemäß" = "etwas so zu verwenden, wie es nicht beabsichtigt war" = "nicht unbedingt falsch, vielleicht sogar klug").
Goldlöckchen

Antworten:

69

"rpikernelhack" ist ein gefälschter Paketname und ein Verzeichnisname, die als Teil eines Hacks (im Sinne einer unsauberen, aber zweckmäßigen Lösung eines Problems) verwendet werden, um die Tatsache zu umgehen, dass die Raspberry Pi Foundation beschlossen hat, eine fat32-Partition zu erstellen / zu booten und dpkg verträgt sich nicht gut mit fat32. Ich war derjenige, der anfänglich auf die Idee gekommen ist, obwohl sie später von anderen verfeinert wurde.

dpkg installiert neue Dateien auf einer Fat32-Partition (und gibt dabei einige Warnungen aus). Wenn es jedoch versucht, eine vorhandene Datei auf einer Fat32-Partition zu aktualisieren, schlägt dies fehl (iirc versucht, eine Sicherungskopie der alten Datei zu erstellen, indem es einen Hardlink erstellt) und fat32 unterstützt keine Hardlinks).

Wenn Leute (einschließlich mir) anfingen, Deb-Pakete von Pi-Kerneln und Firmware zu erstellen, stießen sie auf dieses Problem, ein Paket wurde zunächst installiert, aber der Versuch, es zu aktualisieren, schlug autsch fehl.

Mein Workaround bestand darin, die "Umleitungs" -Funktion in dpkg (ab) zu verwenden. Diese Funktion sollte das Umleiten von Dateien ermöglichen, damit sie entweder durch lokal geänderte Versionen oder durch Versionen aus einem anderen Paket ersetzt werden können. Ich konnte sie jedoch aus den Betreuerskripten heraus so verwenden, dass dpkg seine Installationsaufgaben auf einem ausführt Linux-Partition und verschieben Sie die Datei am Ende an ihren endgültigen Speicherort.

Bei Umleitungen müssen Sie entweder einen "Paketnamen" oder "lokal" angeben. Wenn Sie einen Paketnamen angeben, wirkt sich die Umleitung auf die Dateien aus, die allen Paketen gehören, mit Ausnahme der von Ihnen angegebenen. Ich brauchte auch ein Verzeichnis, um die Dateien umzuleiten.

Die Verwendung des Namens des installierten Kernelpakets hätte den Hack unwirksam gemacht. Die Verwendung von "local" schien ebenfalls falsch zu sein, da dies für die Verwendung durch den lokalen Systemadministrator reserviert sein soll. Also brauchte ich einen gefälschten Paketnamen, der mit nichts in Konflikt geraten konnte. Ich habe mir "rpikernelhack" ausgedacht und diese Zeichenfolge auch für den Verzeichnisnamen verwendet.

Peter Green
quelle
4
Vielen Dank für diese Antwort. Es war sehr aufschlussreich in Bezug auf die Design- und Namensentscheidungen. Das Internet ist ein magischer Ort für mich, um eine Antwort von dem Mann zu bekommen, der tatsächlich an diesem bestimmten Stück gearbeitet hat.
MD-7,
Habe gerade mein RPi aktualisiert und mich über dieses seltsame Protokoll gewundert, danke für die ultimative Klarstellung.
Schlump
Wäre es nicht sauberer, dpkg mit FAT32 gut spielen zu lassen? Hier ist der MR, den ich vorschlage: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136
43

Es ist nur der Verzeichnisname, der von den Entwicklern angegeben wurde, die einen für Raspberry Pi spezifischen Satz von Patches für den Linux-Kernel erstellt haben.

Die Raspbian-Entwickler haben das FATProblem behoben, dass das Dateisystem im Kernel 2016 beschädigt ist. Dies ist eine Aktualisierung des Kernels 2017 und kein Grund zur Sorge. Um dieses Kernel-Update durchzuführen, müssen Sie sudo apt install -fdie durch den Fehler verursachten Abhängigkeitsprobleme beheben ( -fin diesem Kontext bedeutet dies laut Manpage apt-get(8):

-f, --fix-broken
Fix; Versuchen Sie, ein System mit fehlerhaften Abhängigkeiten zu korrigieren. ...

)

Edmund Broadley
quelle
0

FWIW, dies geschah erneut, als ich am 28.02.2019 ein Update auf einer rpi3b + -Laufstrecke durchführte. 182 Umleitungslinien ... rpikernalhack ... davon hier ein Beispiel:

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'

...
...

Wenn es hilft, habe ich vor einer Stunde ein Update-Upgrade durchgeführt und dabei (2) Hash-Summen-Fehlanpassungen festgestellt. Vielleicht war es gerade, als das Repository aktualisiert wurde? Ich startete neu, wartete eine Stunde und führte das zweite Update-Upgrade durch. Es gab keine Hash-Summen-Fehlanpassungen, und das war auch der Zeitpunkt, an dem ich die 182 Umleitungszeilen bekam ... rpikernalhack.

Die resultierende Version:

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

Wenn ich 'update upgrade' sage, meine ich natürlich ...

sudo apt-get update
sudo apt-get upgrade

Ich habe dies auf Grund seiner Länge unbeholfen als Antwort gepostet, in der Hoffnung, dass es die ausgewählte Antwort bereichern würde, was zeigt, dass so etwas kein einmaliger „Fix“ aus dem Vorjahr ist.

immer lernen
quelle
1
Ich verstehe nicht, warum Ihr Upgrade mit einem alten Kernel endet. Der aktuelle Kernel ist 4.14.98-v7 + .
Ingo
Ich habe vor ein paar Minuten ein Update-Upgrade durchgeführt und einen Neustart durchgeführt. Das Kernel ist jetzt: Linux ISS 4.14.98-v7 + # 1200 SMP Di 12 Feb 20:27:48 GMT 2019 armv7l GNU / Linux Ich habe keine Erklärung für diese andere als die, wie in meinem Beitrag angegeben, die ich anscheinend habe Das erste Update wurde zum Zeitpunkt eines Repository-Updates durchgeführt (daher stimmt die Hash-Summe nicht überein?). Und das zweite Update hatte entweder noch nicht 4.14.98-v7 + zur Verfügung, oder gab es mehr zu aktualisierende Dateien, bevor es das kernal aktualisieren würde? Ich weiß es nicht. Machst du? TY für den Hinweis.
always_learning
Nein, ich habe keine Ahnung. Vielleicht wurde das Repository nur aktualisiert und befindet sich in einem inkonsistenten Zustand? Wie auch immer ...
Ingo
Ich werde mir dieser Möglichkeit in Zukunft bewusst sein.
always_learning