Al hacer un apt-get upgrade
en mi RPi 3, muchas líneas de salida aparecen así:
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'
...
...
...
No estoy muy educado en las características del kernel de Linux y esto parece bastante específico para el RPi.
Mi pregunta es: ¿Qué es todo esto?
¿Qué es un 'desvío'? ¿Qué hacen realmente todos estos archivos (como grupo) a los que se hace referencia? ¿Qué es 'rpikernelhack'?
Busqué en Google un poco y no pude encontrar fácilmente nada interesante. Me imagino que no soy el único que siente curiosidad por esto, ¡así que espero que sea una pregunta adecuada!
apt-get upgrade
.preinst
parte:dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img
. El enlace de @goldilocks se explica--package
claramente.Respuestas:
"rpikernelhack" es un nombre de paquete falso y un nombre de directorio utilizado como parte de un hack (en el sentido de una solución sucia pero conveniente a un problema) para evitar el hecho de que la fundación Raspberry Pi decidió hacer / arrancar una partición fat32 y dpkg no se lleva bien con fat32. Yo fui quien inicialmente se le ocurrió la idea, aunque otros la refinaron más tarde.
dpkg instalará nuevos archivos en una partición fat32 (arrojando algunas advertencias en el camino), pero si intenta actualizar un archivo existente en una partición fat32 fallará (iirc intenta hacer una copia de seguridad del archivo antiguo creando un enlace duro y fat32 no admite enlaces duros).
Cuando las personas (incluyéndome a mí) comenzamos a tratar de hacer paquetes deb de núcleos Pi y firmware, se encontraron con este problema, un paquete se instalaría inicialmente, pero tratar de actualizarlo fallaría, ¡ay!
Mi solución era (ab) usar la función de "desvío" en dpkg. Esta función estaba destinada a permitir que los archivos se desvíen para que puedan ser reemplazados por versiones modificadas localmente o versiones de otro paquete, pero pude usarlo desde los scripts del mantenedor de tal manera que dpkg realizaría sus tareas de instalación en un Partición de Linux y luego mueva el archivo a su ubicación final al final.
Las desviaciones requieren que especifique un "nombre de paquete" o "local". Si especifica un nombre de paquete, la desviación afectará a los archivos que pertenecen a todos los paquetes, excepto al que usted especifique (la intención aquí es permitir que un paquete desvíe un archivo propiedad de otro paquete y luego instale sus propias versiones). También necesitaba un directorio para desviar los archivos.
Usar el nombre del paquete de kernel que se está instalando habría dejado el hackeo ineficaz. Usar "local" también parecía incorrecto, ya que se supone que está reservado para el uso del administrador del sistema local. Así que necesitaba un nombre de paquete falso que era poco probable que entrara en conflicto con algo. Se me ocurrió "rpikernelhack", también usé esta misma cadena para el nombre del directorio.
fuente
Es solo el nombre de directorio dado por los desarrolladores que han creado un conjunto específico de parches de Raspberry Pi para el kernel de Linux.
Es una solución por parte de los desarrolladores de Raspbian para solucionar un
FAT
problema de corrupción del sistema de archivos presente en el kernel 2016, esto se actualiza al kernel 2017 y no hay nada de qué preocuparse. Para realizar esta actualización del kernel es necesario utilizarsudo apt install -f
para solucionar los problemas de dependencia causada por el insecto (el-f
en este contexto significa, de acuerdo con la página de manual,apt-get(8)
:)
fuente
FWIW, esto ocurrió nuevamente cuando realicé una actualización de actualización el 28/02/2019 en un tramo de ejecución rpi3b +. 182 líneas de diversión ... rpikernalhack ... de las cuales aquí hay una muestra:
Si ayuda, una hora antes hice una actualización de actualización y produjo (2) desajustes de suma de hash. ¿Quizás fue precisamente cuando el repositorio se estaba actualizando? Reinicié, esperé una hora y realicé la segunda actualización de actualización, no tuve desajustes de suma de Hash, y también fue cuando obtuve las 182 líneas de desvío ... rpikernalhack.
La versión resultante:
Por supuesto, cuando digo 'actualizar actualizar', quiero decir ...
Publiqué esto, torpemente, como respuesta, debido a su longitud, con la esperanza de que enriquecería la respuesta seleccionada, mostrando que este tipo de cosas no es una "solución" única del año anterior.
fuente