En este tutorial explicaré
Cómo instalar paquetes dependientes del kernel que en principio no se dejan instalar o no funcionan.Ante todo decir que si efectuamos los pasos que se van a describir a continuación corremos una serie de riesgos, entre ellos el brickear el router. Si no sabemos cómo recuperarlo por procedimientos tales como consola serie o bootloader entonces es mejor no realizar los pasos del tutorial.
Sabremos que un paquete no se deja instalar por dependencias del kernel cuando al intentar instalarlo recibimos un mensaje de la siguiente forma:
Al intentar instalar el paquete xxx me da error de dependencias con el kernel.
* satisfy_dependencies_for: Cannot satisfy the following dependencies for xxx:
* kernel (= 3.6.11-1-9dae866b8f6d8a6cc46cd26eb5d3a5e6) * kernel (= 3.6.11-1-9dae866b8f6d8a6cc46cd26eb5d3a5e6) *
* opkg_install_cmd: Cannot install package xxx.
Primero explicaré por qué cuando instalamos un módulo dependiente del kernel existen posibilidades de que no funcione al instalarlo, y cómo se puede hacer que el sistema reconozca el módulo instalado para otro kernel.
Cuando los módulos del kernel se instalan en el sistema, lo hacen comprobando el checksum del kernel que tenemos instalado con el checksum del kernel requerido por el paquete. Si ambos checksums son iguales entonces el sistema piensa que el módulo fue compilado para el kernel que tenemos instalado y nos deja instalarlo sin problemas. Sin embargo, puede que ambos checksums no coincidan, en cuyo caso no nos dejará instalar el paquete por precaución, ya que si los checksums no coinciden es porque puede que el kernel no sea compatible con el módulo que queremos cargar. Sin embargo, el checksum puede cambiar por el simple hecho de que hemos compilado dos veces openwrt, una con una cantidad de módulos, y otra con otros módulos distintos, y que si bien la versión del kernel es la misma, el checksum varía.
Para instalar los módulos de la misma versión de kernel pero con distinto checksum, nos basta instalarlos desde la línea de comandos con
opkg --force-depends install <nombre del paquete>
No obstante, cuando no sólo varía el checksum del kernel a comprobar, si no que además cambia la versión del kernel, hay muchas más posibilidades de que el módulo sea incompatible con el kernel, y si intentamos cargarlo podemos dejar bloqueado al sistema, pudiendo incluso llegar a hacer un brick del router. Pero aún así, existe alguna posibilidad de que un módulo compilado para un kernel todavía sea capaz de funcionar en otro kernel. Aunque para ello debemos de "engañar" al sistema.
Para instalar módulos con distinta versión del kernel, el primer paso es intentar instalar el paquete de forma análoga a la anterior con
opkg --force-depends install <nombre del paquete>
Si no nos dejara por alguna razón, podemos intentarlo con
opkg --nodeps install <nombre del paquete>
Hemos de tener en cuenta que los módulos del kernel se instalan en el directorio /lib/modules/<version_kernel>, y es donde el sistema espera encontrarlos para cargarlos. Sin embargo, al instalar paquetes con módulos compilados para otra versión, dichos paquetes se encontrarán en el directorio /lib/modules/<otra_version_kernel>, con lo que el sistema no los encontrará y esa es la causa de que no funcionen al reiniciar el router. Por lo tanto, lo único que tenemos que hacer es
copiar los módulos que se encuentren en /lib/modules/<otra_version_kernel> a /lib/modules/<version_kernel> para que el sistema los intente cargar.
Como siempre, utilizad esta información bajo vuestra propia responsabilidad.