¿Cuál es el procedimiento completo para actualizar un módulo del kernel actualmente en uso?

¿Cuál es el procedimiento completo para actualizar un módulo del kernel actualmente en uso?

Tengo un servidor 18.04 con módulos de kernel ZFS personalizados (0.8.x frente a 0.7.x proporcionado).

Periódicamente, cuando actualizo el kernel, tengo que recompilar el módulo del kernel ZFS, que de otro modo se desactivaría automáticamente.

La última vez tuve que trastear un poco para hacerlo, así que esta vez me gustaría saber de antemano los pasos correctos a seguir.

Creo

  1. actualizando el kernel y las fuentes del kernel
  2. descargar la fuente del módulo y compilar el módulo
  3. eliminando paquetes kmod anteriores e instalando los nuevos

Sin embargo, dado que se requiere el módulo del kernel para acceder a algunos sistemas de archivos que están actualmente montados, ¿cuál es el siguiente paso? ¿Simplemente reiniciar para montar el nuevo módulo?

También tengo que, en algún momento, habilitar el servicio de importación automática, verhttps://unix.stackexchange.com/questions/338260/zfs-mounting-only-one-of-my-pools-on-boot

Respuesta1

Si actualiza un módulo para el kernel que se está ejecutando actualmente, debe dejar de usar el módulo (es decir, umounttodos los sistemas de archivos), rmmod zfstener el nuevo módulo disponible y modprobe zfscargarlo nuevamente. Reiniciar suele ser más fácil, pero puede encontrar ejemplos en otros lugares que le ayudarán a lograrlo mientras el sistema está en ejecución, si lo desea.

  1. # # Stop using the module
  2. # rmmod zfs
  3. # modprobe zfs

Si desea compilar e instalar automáticamente actualizaciones para un módulo cada vez que actualiza su kernel, puede que le intereseDKMS. Hay un granGuía de embalaje DKMSque analiza esto en detalle.

La idea es que tenga un módulo o algún cambio en el kernel que desee aplicar con cada actualización del kernel. Puede automatizar la compilación e instalación de los módulos cuando aptse actualiza el kernel utilizado. Puedes encontrar buenos ejemplos de esto con VirtualBox y también con algunosControladores NVIDIA DKMS.

Otro buen ejemplo que muestra cómo configurar esto esbcwc_pcie de patjak. El procedimiento para compilar un módulo bcwc_pcieo facetimehdmódulo y ponerlo a disposición de nuevos núcleos esdocumentado:

Configuración de DKMS (compilación automática al actualizar el kernel)

Esto supone que ya ha seguido los pasos del paquete deb de Debian/Ubuntu. Deberá verificar dkms.confque el nombre del módulo facetimehdy el número de versión 0.1sean correctos y actualizar dkms.confo ajustar las instrucciones donde se utilizan -my .-v

  • Instale los paquetes necesarios:# apt install debhelper dkms
  • Elimine el paquete antiguo si está instalado:# dpkg -r bcwc-pcie
  • Cree un directorio para trabajar desde:# mkdir /usr/src/facetimehd-0.1
  • Cambie al directorio de repositorio de git:$ cd bcwc_pcie
  • Copiar archivos sobre:# cp -r * /usr/src/facetimehd-0.1/
  • Cambie a ese directorio:# cd /usr/src/facetimehd-0.1/
  • Elimine cualquier deuda y copia de seguridad anterior:# rm backup-*tgz bcwc-pcie_*deb
  • Borrar la compilación anterior:# make clean
  • Registre el nuevo módulo con DKMS:# dkms add -m facetimehd -v 0.1
  • Construya el módulo:# dkms build -m facetimehd -v 0.1
  • Cree un paquete fuente de Debian:# dkms mkdsc -m facetimehd -v 0.1 --source-only
  • Cree un paquete binario de Debian:# dkms mkdeb -m facetimehd -v 0.1 --source-only
  • Copie deb localmente:# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
  • Deshágase de los archivos de compilación locales:# rm -r /var/lib/dkms/facetimehd/
  • Instale el nuevo paquete deb:# dpkg -i /root/facetimehd-dkms_0.1_all.deb

Si tiene algún problema, lea esta guía sobre cómo crear un paquete DKMS: http://www.xkyle.com/building-linux-packages-for-kernel-drivers/


La única parte que falta en este bcwc_pcieejemplo es que este código base no se actualiza, mientras que el código del módulo que está compilando puede cambiar con el tiempo. Esto se puede hacer más fácilmente si puedes encontrar unel últimodescargar, frente a versiones específicas de la fuente que estás intentando compilar.

Podemos mirar el dkms.confen elDocumento comunitario de DKMS:

$ cat dkms.conf 
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

También puede agregar opciones para llamar scripts antes o después de la compilación o instalación, proporcionar comandos make adicionales (condicionales), comandos de parche, etc. De hecho, dkms.conf se obtiene en un script de shell, por lo que se pueden realizar una buena cantidad de trucos. si necesario. Estas opciones y más se describen en la sección dkms.conf en man dkms.

ypágina de manual:

PRE_BUILD= El nombre del script que se ejecutará antes de realizar una compilación. La ruta debe proporcionarse en relación con el directorio raíz de su fuente.

Puede crear un directorio que contenga un script que descargue y extraiga elúltima versión de ZFSen preparación para la construcción. Esto ayudará a automatizar el proceso. Puede usar gito descargar y extraer la latestfuente. A continuación se muestra un ejemplo de cómo determinar la URL de descarga más reciente para ZFS:

$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz$'
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz

Mencionas una complicación con systemdla desactivación de los servicios. ¿Configurar su propia dkmsconfiguración ZFS resuelve este problema? ¿Tiene paquetes instalados que dependen del zfs-dkmspaquete real y que podrían causar conflictos? Como mínimo, puede conectarse POST_INSTALLy ejecutar systemctl enablepara habilitar cualquier servicio que se esté deshabilitando.


Dicho esto, ZFS es un sistema de archivos bastante popular y ya debería tener un paquete DKMS disponible. Parece que esto es cierto y quezfs-dkmsestá disponible enuniverso. Puede consultar los detalles de este paquete y ver si el que ya está disponible zfs-dkmsfunciona para usted.

información relacionada