Ao fazer um apt-get upgrade
no meu RPi 3, muitas linhas de saída aparecem assim:
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'
...
...
...
Não sou muito educado sobre os recursos do kernel do Linux e isso parece bastante específico para o RPi.
Minha pergunta é: O que é tudo isso?
O que é um 'desvio'? O que todos esses arquivos (como um grupo) que estão sendo referenciados realmente fazem? O que é 'rpikernelhack'?
Pesquisei um pouco no Google e não consegui encontrar nada interessante com facilidade. Eu acho que não sou o único que está curioso sobre isso, então espero que seja uma pergunta apropriada!
apt-get upgrade
.preinst
parte:dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img
. O link da @goldilocks explica--package
claramente.Respostas:
"rpikernelhack" é um nome de pacote falso e um nome de diretório usado como parte de um hack (no sentido de uma solução suja, mas conveniente para um problema) para solucionar o fato de que a fundação Raspberry Pi decidiu criar / inicializar uma partição fat32 e o dpkg não se dá bem com o fat32. Fui eu quem inicialmente teve a ideia, embora ela tenha sido refinada mais tarde por outros.
O dpkg instalará novos arquivos em uma partição fat32 (lançando alguns avisos ao longo do caminho), mas se tentar atualizar um arquivo existente em uma partição fat32, ele falhará (iirc, tentará fazer um backup do arquivo antigo criando um hardlink e o fat32 não suporta hardlinks).
Quando as pessoas (inclusive eu) começavam a tentar criar pacotes deb de kernels e firmware do Pi, encontravam esse problema, um pacote era instalado inicialmente, mas a tentativa de atualizá-lo falhava, ai.
Minha solução alternativa foi (ab) usar o recurso "desvio" no dpkg. Esse recurso tinha como objetivo permitir que os arquivos fossem desviados para que pudessem ser substituídos por versões modificadas localmente ou versões de outro pacote, mas eu pude usá-lo nos scripts do mantenedor de forma que o dpkg realizasse suas tarefas de instalação em um pacote. Partição Linux e, em seguida, mova o arquivo para seu local final no final.
Os desvios exigem que você especifique um "nome do pacote" ou "local". Se você especificar um nome de pacote, o desvio afetará os arquivos pertencentes a todos os pacotes, exceto aquele que você especificar (a intenção aqui é permitir que um pacote desvie um arquivo pertencente a outro pacote e, em seguida, instale suas próprias versões). Eu também precisava de um diretório para desviar os arquivos.
Usar o nome do pacote do kernel sendo instalado tornaria o hack ineficaz. O uso de "local" também parecia errado, pois isso deveria ser reservado para uso pelo administrador do sistema local. Então, eu precisava de um nome de pacote falso que provavelmente não entraria em conflito com nada. Eu vim com "rpikernelhack", também usei essa mesma string para o nome do diretório.
fonte
É apenas o nome do diretório fornecido pelos desenvolvedores que criaram um conjunto específico de patches do Raspberry Pi para o kernel do Linux.
É uma correção dos desenvolvedores do Raspbian para corrigir um
FAT
problema de corrupção do sistema de arquivos presente no kernel de 2016, que é atualizado para o kernel de 2017 e não precisa se preocupar. Para fazer essa atualização do kernel, você precisa usarsudo apt install -f
para corrigir os problemas de dependência causados pelo bug (-f
neste contexto, de acordo com a página de manualapt-get(8)
:)
fonte
FWIW, isso ocorreu novamente quando eu fiz uma atualização de atualização em 28/02/2019 em um trecho de execução do rpi3b +. 182 linhas de desvio ... rpikernalhack ... das quais aqui está uma amostra:
Se isso ajudar, uma hora antes eu fiz uma atualização e ela produziu (2) incompatibilidades de soma de hash. Talvez fosse precisamente quando o repositório estava sendo atualizado? Reiniciei, esperei uma hora e fiz a segunda atualização de atualização, não tinha incompatibilidades de soma Hash, e foi também nesse momento que recebi as 182 linhas de desvio ... rpikernalhack.
A versão resultante:
Claro que quando digo 'atualizar atualização', quero dizer ...
Eu postei isso, de forma desajeitada, como resposta, devido ao seu comprimento, esperando que enriquecesse a resposta selecionada, mostrando que esse tipo de coisa não é uma "correção" única de um ano anterior.
fonte