Qu'est-ce que rpikernelhack?


96

Lorsque apt-get upgradeje fais un sur mon RPi 3, plusieurs lignes de sortie apparaissent comme ceci:

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

Je ne suis pas très au courant des fonctionnalités du noyau Linux et cela semble assez spécifique au RPi.

Ma question est: qu'est-ce que tout cela?

Qu'est-ce qu'une "diversion"? Que font réellement tous ces fichiers (en tant que groupe) référencés? Qu'est-ce que 'rpikernelhack'?

J'ai fait un peu de recherche sur Google et n'ai rien pu trouver d'intéressant. Je suppose que je ne suis pas le seul à être curieux à ce sujet, alors j'espère que c'est une question appropriée!


3
Certainement pas le seul à être curieux - j'aimerais aussi le savoir.
joan

Moi aussi. Ils ont pris beaucoup de temps quand je fais apt-get upgrade.
Kong Chun Ho

2
Probablement pas aussi excitant que vous le pensez - je pense que le "bidouillage" est ici sur le système de gestion de paquets, pas sur le noyau. debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks

Voici un exemple de la preinstpartie: dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img. Le lien de @goldilocks explique --packageclairement.
PNDA

2
@qbicdesign Je pense que cela dépend de votre compréhension du mot "bidouille" . Une utilisation courante serait de faire référence à quelque chose qui n'est peut-être pas une solution idéale ni appropriée à un problème, mais qui fonctionne, au moins avec un minimum de pincement ou avec un effort minimal, afin que quelqu'un l'indique explicitement (celui au début de cet article n'est pas Ce n'est pas une solution, mais le thème commun serait "impropre" = "utiliser quelque chose d'une manière non intentionnelle" = "pas forcément fausse, peut-être même intelligente").
goldilocks

Réponses:


69

"rpikernelhack" est un faux nom de package et un nom de répertoire utilisé dans le cadre d'un hack (dans le sens d'une solution sale mais rapide à un problème) pour éviter le fait que la fondation Raspberry Pi a décidé de créer / initialiser une partition fat32 et dpkg ne s'entend pas bien avec fat32. C’est moi qui ai proposé l’idée au départ, bien que celle-ci ait été affinée plus tard par d’autres.

dpkg installera les nouveaux fichiers sur une partition fat32 (en émettant quelques avertissements), mais s’il tente de mettre à jour un fichier existant sur une partition fat32, il échouera (iirc essaiera de sauvegarder l’ancien fichier en créant un lien permanent. et fat32 ne supporte pas les liens durs).

Lorsque des personnes (y compris moi-même) ont commencé à essayer de créer des paquets deb de noyaux Pi et de microprogrammes, elles se sont heurtées à ce problème. Un paquet s'installait initialement, mais la mise à niveau échouait.

Ma solution de contournement consistait à (ab) utiliser la fonction de "déviation" dans dpkg. Cette fonctionnalité était destinée à permettre de détourner des fichiers afin de les remplacer par des versions modifiées localement ou des versions d'un autre package, mais j'ai pu l'utiliser à partir des scripts de maintenance de manière à ce que dpkg effectue ses tâches d'installation de manière indépendante. Partition Linux, puis déplacez le fichier vers son emplacement final à la fin.

Les déviations exigent que vous spécifiiez un "nom de package" ou un "local". Si vous spécifiez un nom de package, la déviation affectera les fichiers appartenant à tous les packages, à l' exception de celui que vous spécifiez (l'objectif est d'autoriser un package à détourner un fichier appartenant à un autre package, puis à installer ses propres versions). J'ai également eu besoin d'un répertoire pour détourner les fichiers.

Utiliser le nom du paquetage du noyau en cours d’installation aurait rendu le piratage inefficace. L'utilisation de "local" semblait également fausse, car il est censé être réservé à l'usage de l'administrateur système local. Il me fallait donc un faux nom de paquet qui n'entrerait probablement pas en conflit avec quoi que ce soit. Je suis venu avec "rpikernelhack", j'ai également utilisé cette même chaîne pour le nom du répertoire.


4
Merci beaucoup pour cette réponse. C'était très perspicace pour la conception et les décisions de nommage. Internet est un endroit magique pour moi qui a pu obtenir une réponse du type qui a réellement travaillé sur cet article en question.
MD-7

Je viens de mettre à jour mon RPi et je m'interroge sur ce journal étrange, merci pour la clarification ultime.
schlump

Ne serait-il pas plus propre de faire en sorte que dpkg joue bien avec FAT32. Voici le MR que je suggère: salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136

43

C'est juste le nom de répertoire donné par les développeurs qui ont créé un ensemble de correctifs spécifiques au Raspberry Pi pour le noyau Linux.

Les développeurs de Raspbian ont résolu le problème en corrigeant un FATproblème de corruption du système de fichiers présent dans le noyau 2016. Cette mise à jour du noyau 2017 n'a rien à craindre. Pour effectuer cette mise à jour du noyau, vous devez utiliser sudo apt install -fpour résoudre les problèmes de dépendance causés par le bogue ( -fdans ce contexte, cela signifie, selon la page de manuel apt-get(8):

-f, --fix-broken
Fix; tenter de corriger un système avec des dépendances brisées en place. ...

)


0

FWIW, cela s’est répété lorsque j’ai mis à jour le 2019-02-28 sur une extension rpi3b + en cours. 182 lignes de diversion ... rpikernalhack ... dont voici un exemple:

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'

...
...

Si cela peut vous aider, une heure auparavant, j’avais effectué une mise à niveau et produit 2 discordances de somme de hachage. Peut-être était-ce précisément pendant la mise à jour du référentiel? J'ai redémarré, attendu une heure et mis à niveau la deuxième mise à jour, je n'avais aucune discordance de somme de hachage, et c'est également à ce moment-là que j'ai eu les 182 lignes de diversion ... rpikernalhack.

La version résultante:

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

Bien sûr, quand je dis «mise à jour de mise à jour», je veux dire ...

sudo apt-get update
sudo apt-get upgrade

J'ai posté ceci, maladroitement, comme une réponse, en raison de sa longueur, dans l'espoir que cela enrichirait la réponse sélectionnée, montrant que ce genre de chose n'est pas une solution ponctuelle d'une année précédente.


1
Je ne comprends pas pourquoi votre mise à jour se termine par un ancien noyau. Le noyau actuel est 4.14.98-v7 + .
Ingo

J'ai effectué une mise à niveau et un redémarrage il y a quelques minutes. Le kernal est maintenant: Linux ISS 4.14.98-v7 + # 1200 SMP mar 12 févr. 20:27:48 GMT 2019 armv7l GNU / Linux Je n’ai pas d’explication autre que, comme il est dit dans mon post, il semble que fait la première mise à jour au moment de la mise à jour du référentiel (d'où les disparités de somme de hachage?). Et la deuxième mise à jour n’avait pas encore la version 4.14.98-v7 + disponible, ou y avait-il plus de fichiers à mettre à jour avant la mise à jour du kernal? Je ne sais pas. Le faites vous? TY pour le signaler.
always_learning

Non, je n'ai pas d'idée. Peut-être que le référentiel vient d'être mis à jour et dans un état incohérent? Quoi qu'il en soit ...
Ingo

Je serai conscient de cette possibilité à l'avenir.
always_learning
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.