Changes between Version 13 and Version 14 of InitrdClienteNetModules


Ignore:
Timestamp:
Nov 12, 2013, 12:19:36 PM (10 years ago)
Author:
ramon
Comment:

Revisión completa de la página para generar módulos con DKMS

Legend:

Unmodified
Added
Removed
Modified
  • InitrdClienteNetModules

    v13 v14  
    22[[TOC(Heading=Índice)]]
    33
    4 NOTA: esta indicaciones son sólo referencias.
     4= Añadir módulos de red al cliente OpenGnSys =
    55
     6Esta receta sirve para poder incluir módulos de red del Kernel del cliente !OpenGnSys y poder realizar correctamente la conexión al servidor. Con estas modificaciones se creará un nuevo cliente !OpenGnSys personalizado que puede adaptarse al hardware que no fuese reconocido durante arranque del cliente normal.
    67
    7 == Identificar la NIC ==
    8 Desde un ordenador que su NIC no sea reconocida por el cliente pxe de opengnsys.  Debemos de averiguar el modelo.
     8'''Nota:''' Los ejemplos que describen este procesos se basan en la adaptación del arranque para ordenadores Apple iMac 21.5 con tarjeta de red Broadcom BCM57766, que no es reconocida por el cliente !OpenGnSys 1.0.5 basado en Kernel 3.8.
    99
    10 En el caso de que ese equipo tenga un linux instalado
     10== Identificar la tarjera de red del equipo ==
    1111
     12Debemos averiguar el modelo de la interfaz de red (NIC) de un ordenador que no ha sido reconocida por el cliente PXE de !OpenGnSys.
     13
     14En el caso de que ese equipo tenga GNU/Linux instalado, ajecutar:
     15 {{{
    1216lspci | grep Ethernet
    13 
    14 Atheros 8131 ---------------    NOTA:  => AR81Family-linux-v1.0.1.14.tar.gz  =>  http://partner.atheros.com/Drivers.aspx
    15 
    16 
    17 
    18 == Descargar de Internet los drivers para linux ==
    19 1) Desde el servidor: Descargar el módulo tar.gz de internet y almacenarlo en /tmp
    20 
    21 
    22 Algunas necesarias
    23 Atheros familia 81xx    descarga en:    http://partner.atheros.com/Drivers.aspx
    24 se deben de descargar en /tmp
    25 
    26 
    27 
    28 
    29 == Comprobamos los datos del equipo desde generaremos el nuevo initrd con el driver ==
    30 lsb_release -a
    31 {{{
    32 Distributor ID: Ubuntu
    33 Description:    Ubuntu 10.04 LTS
    34 Release:        10.04
    35 Codename:       lucid
    3617}}}
    3718
    38 uname -a
    39 {{{
    40 Linux ogCTE205 2.6.32-21-generic-pae #32-Ubuntu SMP Fri Apr 16 09:39:35 UTC 2010 i686 GNU/Linux
     19En el ejemplo, el dato obtenido en un iMac 21.5 es:
     20 {{{
     2103:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01)
    4122}}}
    4223
    4324
    44 == Accedemos a la particion (loop img) del cliente pxe opengnsys ==
    45 Modificaciones al cliente  -> creacion:
    46 Modificaciones al cliente  -> Pasos previos:
     25== Requisitos previos para reconstruir el cliente ==
     26
     27Será necesario disponer de:
     28 * Ordenador o máquina virtual con Ubuntu Server que tenga exactamente la misma versión del kernel de nuestro cliente !OpenGnSys (en el caso del pendrive de arranque de los iMac, debe usarse Ubuntu Server 13.04 de 32 bits con kernel 3.8.0-19-generic).
     29 * Tener instalado los paquetes necesarios para compilar módulos, ejecutando
     30    {{{
     31sudo apt-get install -y linux-headers-$(uname -r) dkms build-essential
     32}}}
     33
     34'''Nota:''' la orden "{{{uname -r}}}" se utiliza para conocer la versión exacta del kernel que se está utilizando.
    4735
    4836
    49 3.1) Compilamos el modulo
     37== Descargar código fuente de los drivers ==
    5038
    51  * Acedemos al directorio tmp (que está compartido con el sistema host)
    52 {{{
    53 cd /tmp 
     39Existen 2 posibilidades principales para compilar el módulo.
     40
     41=== 1) Usar como base el código fuente del kernel ===
     42
     43Si el problema del driver de red se soluciona en una revisión posterior del kernel, puede instalarse paquete del código fuente para usarlo como base para compilar el módulo. Debe ejecutarse:
     44 {{{
     45sudo apt-get install linux-source-VersiónKernel
    5446}}}
    5547
    56  * Descomprimimos el modulo. p.e.
    57 {{{
    58 tar xzvf AR81Family-linu-v1.0.1.14.tar.gz
     48En el caso del driver {{{tg3}}} para tarjetas Broadcom, el problema se soluciona en las últimas revisiones del kernel 3.8 y se puede instalar el paquete {{{linux-source-3.8.0}}}.
     49
     50'''Nota:''' tener en cuenta que esta solución requiere varios cientos de MB de almacenamiento, para descargar todo el código fuente del kernel y luego compilar el módulo necesario.
     51
     52=== 2) Descargar el código fuente específico ===
     53
     54Descargar de la página web del fabricante el código fuente específico para el driver requerido.
     55
     56'''Nota:''' se desaconseja utilizar esta opción para crear el módulo {{{tg3}}}, ya que la página web de Broadcom ofrece un código fuente para el driver que da errores de compilación con la versión 3.8 del kernel.
     57
     58
     59== Compilar módulo con DKMS ==
     60
     61El método más adecuado para compilar módulos independientes para el kenrel de Linux es utilizar DKMS, que utiliza como base los paquetes de código predefinidos para el núcleo actual.
     62
     63Los pasos a seguir son los siguientes:
     64
     65 1. Crear el directorio para el código fuente del módulo (en el caso del driver de red para iMac, el módulo es {{{tg3}}} con versión {{{3.128}}}):
     66 {{{
     67sudo mkdir /usr/src/Módulo-Versión
     68}}}
     69
     70 2. Copiar o descomprimir en ese directorio el código fuente del módulo.
     71
     72 3. Crear en el directorio anterior el fichero {{{dkms.conf}}} para configuración de DKMS, con el formato:
     73 {{{
     74#!sh
     75PACKAGE_NAME="Módulo"
     76PACKAGE_VERSION="Versión"
     77BUILT_MODULE_NAME[0]="Módulo"
     78DEST_MODULE_LOCATION[0]=/CaminoInstalaciónMódulo
     79AUTOINSTALL="yes"
     80}}}
     81El camino de instalación suele estar bajo {{{/kernel}}}, aunque también podría estar bajo {{{/updates}}} o {{{/extra}}} (para el driver {{{tg3}}}, el ''Camino'' es {{{/kernel/drivers/net/ethernet/broadcom}}}).
     82
     83 4. En algunos casos puede ser necesario "retocar" alguno de estos ficheros del directorio: {{{Makefile}}} o {{{modules-order}}}, para compilar solo el módulo requerido.
     84
     85 5. Compilar el módulo:
     86 {{{
     87sudo dkms build -m Módulo -v Versión
     88}}}
     89Si no hay errores, el módulo generado estará en el fichero {{{/var/lib/dkms/Módulo/Versión/VersiónKernel/Arquitectura/module/Módulo.ko}}}.
     90
     91
     92== Reconstruir el cliente ==
     93
     94El siguiente paso es reconstruir el fichero Initrd del cliente !OpenGnSys incluyendo el nuevo módulo generado.
     95
     96 1. Solo si usamos un lápiz USB con el Initrd, montar su sistema de archivos.
     97
     98 2. Crear un directorio temporal y descomprimir el Initrd del cliente !OpenGnSys:
     99 {{{
     100sudo mkdir /tmp/initrd
     101cd /tmp/initrd
     102sudo gzip -dc CaminoInitrd/oginitrd.img | cpio -im
     103}}}
     104
     105 3. Copiar el fichero del módulo al lugar adecuado:
     106 {{{
     107sudo cp -va /var/lib/dkms/Módulo/Versión/VersiónKernel/Arquitectura/module/Módulo.ko lib/modules/VersiónKernel/CaminoInstalaciónMódulo
     108}}}
     109'''Nota:''' Atención al camino relativo donde copiar el módulo generado.
     110
     111 4. Reconstruir el Initrd:
     112 {{{
     113sudo find . | cpio -H newc -oa | gzip -9c >CaminoInitrd/oginitrd.img
     114}}}
     115
     116 5. Puede borrarse el directorio temporal del Initrd y, en su caso, desmontar el lápiz USB.
     117
     118
     119== Parámetros de arranque ==
     120
     121Por último, deben retocarse los ficheros de arranque PXE para todos los equipos que deben cargar el driver específico, añadiendo el valor adecuado en la opción {{{ognetmodule}}}.
     122
     123'''Nota:''' en el caso de los iMac, estos equipos no pueden realizar el arranque por PXE, así que debe usarse un lápiz USB con un cargador GRUB que realice la carga inicial; por lo tanto, en vez de modificar el fichero correspondiente PXE, debe editarse de igual modo el fichero {{{grub.cfg}}} con la configuración de GRUB.
     124
     125Para modificar el arranque PXE realizar los siguientes pasos:
     126
     127 1. Aunque pueden editarse los ficheros de individualmente, la forma más adecuada de trabajar es crear una plantilla PXE que será asociada a los equipos que la requieran. Para crear una nueva plantilla PXE, debe copiarse a partir de una plantilla base, ejecutando:
     128 {{{
     129cd /opt/opengnsys/tftpboot/menu.lst/templates
     130sudo cp -va PlantillaBase PlantillaNueva
     131}}}
     132'''Nota:''' Tener muy en cuenta el modo de trabajo de la plantilla base, bien usuario normal o bien administrador.
     133
     134 2. Editar el fichero PXE o la plantilla para incluir el parámetro {{{ognetmodule}}}, modificando la línea {{{kernel}}}:
     135 {{{
     136kernel ... ognetmodule=Módulo ...
     137}}}
     138'''Notas:'''
     139 * Si se modifica una plantilla PXE, esta línea debe terminar obligatoriamente con la cadena {{{INFOHOST}}}.
     140 * Si se usa un lápiz USB con GRUB en vez de PXE, la línea a modificar empieza por la palabra reservada {{{linux}}} en vez de {{{kernel}}}, pero la modificación es simialr.
     141
     142
     143== Posibles problemas de carga del módulo ==
     144
     145Se han localizado algunos problemas potenciales en la carga del nuevo módulo generado, por lo que esta sección presenta algunas soluciones conocidas.
     146
     147=== Dependencia con otros módulos ===
     148
     149Si el módulo generado tiene dependencias con otros módules que deben cargarse previamente, puede ser necesario retocar el proceso de arranque del cliente para cargar correctamente todos estos módulos. Para ello debe editarse usarse el proceso para retocar el Initrd del cliente y editar el fichero {{{scripts/ogfunctions}}} y modificar la función {{{ogLoadNetModule}}},- sustituyendo la línea completa que ejecuta la orden {{{insmod}}} por la siguiente:
     150 {{{
     151modprobe ${ognetmodule}
    59152}}}
    60153
    61154
    62  * Ejecutamos las instrucciones de compilación.
    63 {{{
    64 cd src; make install
    65 }}}
     155=== Initrd y SquashFS con distinta versión de Kernel ===
    66156
    67  '''NOTA''': si necesitamos software de compilación, apt-get xxxxx  (si usas proxy teclea   export http_proxy="proxy.xxx.xx.es:xxxpuerto"
    68 '' NOTA: comprobar el fichero generado cd /lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/
     157El proceso completo de arranque de !OpenGnSys se compone de una fase inicial que carga los ficheros del Kernel Linux y su Initrd asociado (que contiene los módulos básicos para conectarse con el servidor) y un segundo sistema de ficheros SquashFS servido por la red con una distribución más completa para gestionar el cliente.
    69158
    70 
    71 
    72  * Comprobamos que el initrd que generemos incluirá el modulo para el kernel.
    73 vi /etc/initramfs-tools/hooks/oghooks
    74 # tenre como referente el atl1e
    75 manual_add_modules atl1e
    76 
    77 
    78 
    79 
    80 3.3) Salimos del entorno chroot
    81 {{{
    82    exit 
    83 }}}
    84 
    85 
    86 
    87 
    88 
    89 3.2 generamos un nuevo initrd que incluya este módulo.
    90 {{{
    91 
    92 ogClientInitrd host
    93 
    94 }}}
    95 
    96 
    97 
    98 
    99 
    100 == Para los usuarios avanzados y confirmar: Iniciamos un cliente con esa NIC en el modo ogclient-admin ==
    101 
    102 Inicamos el cliente en ogclient-admin
    103 en la pregunta "stop before setting network"  pulsamos la tecla Y
    104 tecleamos:
    105 uname -a
    106 
    107 dmesg | grep eth                Nota: el | debe teclearse como   [shift] + [Ç]
    108  
    109 
    110 
    111 
    112 
    113 
    114 
    115 
    116 
    117 
    118 
     159Es importante tener en cuenta que puede que el módulo del Kernel que está en el Initrd puede no coincidir con el correspondiente al del 2º sistema de ficheros que se mezcla con SquashFS. En el caso de querer operar con un módulo actualizado tras finalizar el arranque del cliente, el fichero generado también tendría que copiarse en el fichero {{{ogclient.sqfs}}}, pero ésto no será necesario en la mayoría de los casos, puesto que el módulo se carga al principio del proceso de arranque.