Changes between Version 13 and Version 14 of InitrdClienteNetModules
- Timestamp:
- Nov 12, 2013, 12:19:36 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
InitrdClienteNetModules
v13 v14 2 2 [[TOC(Heading=Índice)]] 3 3 4 NOTA: esta indicaciones son sólo referencias. 4 = Añadir módulos de red al cliente OpenGnSys = 5 5 6 Esta 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. 6 7 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. 9 9 10 En el caso de que ese equipo tenga un linux instalado 10 == Identificar la tarjera de red del equipo == 11 11 12 Debemos averiguar el modelo de la interfaz de red (NIC) de un ordenador que no ha sido reconocida por el cliente PXE de !OpenGnSys. 13 14 En el caso de que ese equipo tenga GNU/Linux instalado, ajecutar: 15 {{{ 12 16 lspci | grep Ethernet 13 14 Atheros 8131 --------------- NOTA: => AR81Family-linux-v1.0.1.14.tar.gz => http://partner.atheros.com/Drivers.aspx15 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 /tmp20 21 22 Algunas necesarias23 Atheros familia 81xx descarga en: http://partner.atheros.com/Drivers.aspx24 se deben de descargar en /tmp25 26 27 28 29 == Comprobamos los datos del equipo desde generaremos el nuevo initrd con el driver ==30 lsb_release -a31 {{{32 Distributor ID: Ubuntu33 Description: Ubuntu 10.04 LTS34 Release: 10.0435 Codename: lucid36 17 }}} 37 18 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 19 En el ejemplo, el dato obtenido en un iMac 21.5 es: 20 {{{ 21 03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01) 41 22 }}} 42 23 43 24 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 27 Será 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 {{{ 31 sudo 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. 47 35 48 36 49 3.1) Compilamos el modulo 37 == Descargar código fuente de los drivers == 50 38 51 * Acedemos al directorio tmp (que está compartido con el sistema host) 52 {{{ 53 cd /tmp 39 Existen 2 posibilidades principales para compilar el módulo. 40 41 === 1) Usar como base el código fuente del kernel === 42 43 Si 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 {{{ 45 sudo apt-get install linux-source-VersiónKernel 54 46 }}} 55 47 56 * Descomprimimos el modulo. p.e. 57 {{{ 58 tar xzvf AR81Family-linu-v1.0.1.14.tar.gz 48 En 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 54 Descargar 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 61 El 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 63 Los 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 {{{ 67 sudo 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 75 PACKAGE_NAME="Módulo" 76 PACKAGE_VERSION="Versión" 77 BUILT_MODULE_NAME[0]="Módulo" 78 DEST_MODULE_LOCATION[0]=/CaminoInstalaciónMódulo 79 AUTOINSTALL="yes" 80 }}} 81 El 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 {{{ 87 sudo dkms build -m Módulo -v Versión 88 }}} 89 Si 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 94 El 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 {{{ 100 sudo mkdir /tmp/initrd 101 cd /tmp/initrd 102 sudo gzip -dc CaminoInitrd/oginitrd.img | cpio -im 103 }}} 104 105 3. Copiar el fichero del módulo al lugar adecuado: 106 {{{ 107 sudo 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 {{{ 113 sudo 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 121 Por ú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 125 Para 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 {{{ 129 cd /opt/opengnsys/tftpboot/menu.lst/templates 130 sudo 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 {{{ 136 kernel ... 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 145 Se 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 149 Si 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 {{{ 151 modprobe ${ognetmodule} 59 152 }}} 60 153 61 154 62 * Ejecutamos las instrucciones de compilación. 63 {{{ 64 cd src; make install 65 }}} 155 === Initrd y SquashFS con distinta versión de Kernel === 66 156 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/ 157 El 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. 69 158 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 159 Es 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.