Lorsque apt-get upgrade
je 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!
apt-get upgrade
.preinst
partie:dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img
. Le lien de @goldilocks explique--package
clairement.Réponses:
"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.
la source
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
FAT
problè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 utilisersudo apt install -f
pour résoudre les problèmes de dépendance causés par le bogue (-f
dans ce contexte, cela signifie, selon la page de manuelapt-get(8)
:)
la source
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:
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:
Bien sûr, quand je dis «mise à jour de mise à jour», je veux dire ...
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.
la source