MINI-HOWTO: Configurar/Compilar/Instalar un nuevo Kernel


  • 0

    *** Pequeña Intro…**
    Empecemos por el principio… Pongamos un ejemplo, acabamos de instalar una nueva distribución de Linux, o hemos adquirido hardware nuevo y necesitamos actualizarnos el núcleo de nuestro S.O. (el kernel) para poder soportarlo, o simplemente queremos actualizar la versión para corregir posibles bugs, etc... Para saber que versión del kernel tenemos que escribir en una consola uname -a y nos saldrá algo como esto:

    Linux woody 2.4.20 #5 SMP Tue May 13 15:15:06 CEST 2003 i686 unknown

    Será diferente dependiendo de la máquina que tengamos, la versión, el nombre del hostname, etc. Bueno, esto es lo menos importante.

    *** Bajando las fuentes (sources)**
    Lo más normal que podemos hacer es bajarnos las fuentes del FTP oficial del kernel, **ftp.kernel.org. Pero una vez allí seguro que nos asaltan un par de dudas. ¿Qué versión escoger? He aquí una pequeña explicación:

    _Las versiones del kernel se numeran con 3 numeros, de la siguiente forma: XX.YY.ZZ:
    XX: Indica la serie principal del kernel
    YY: Indica si la versión es de desarrollo o de produccion. Un numero impar, significa que es de desarrollo, uno par, que es de producción
    ZZ: Indica nuevas versiones dentro de una version, en las que lo unico que se ha modificado son fallos de programación o bugs.

    Por ejemplo, la 2.4.21 sería una estable, y con la revisión "21", cuando 2.5.69 sería una inestable (en desarrollo). Si somos primerizos o novatos, cogemos la estable. La última es la 2.4.21.

    Lo podemos bajar de diferentes maneras, navegador, cliente ftp…

    - Método 1: FTP
    Aquí os voy a enseñar a bajarlo desde una pequeña app que se llama ftp (a que no sabéis para que sirve!) que la mayoría de las distribuciones tienen que tener por defecto. Abrimos un terminal, tecleamos ftp, bien, ya tenemos el programa corriendo. Escribimos open ftp.kernel.org la cual cosa nos preguntará un user y un pass, el user es anonymous y el pass nuestra dirección de correo electrónico. Una vez dentro, tecleamos cd /pub/linux/kernel/v2.4 para meternos en la carpeta de los archivos de la última versión estable del kernel. Si hacemos un ls podremos comprobar que hay un montón de archivos, pero nosotros queremos la última versión estable, así que hacemos un get linux-2.4.21.tar.gz y lo estaremos bajando. Tardará un poco, ya que son ~30MB (lo siento para los users de 56kb). Si queréis un link directo para poder bajarlo directamente desde un navegador, aquí lo tenéis.

    - Método 2: wget (thanks josefu) RECOMENDADO PARA 56K USERS
    Hacemos wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz para bajar el kernel y esperamos a que se termine. Si nos cansamos de bajar archivo, paramos el wget con CTRL+C y cuando queramos reiniciar el download tan sólo debemos añadir el parámetro -c como en el ejemplo siguiente, es decir, hacer wget -c http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz y wget continuará la descarga por donde se quedo.

    *** Descomprimiendo las fuentes…**
    Abrimos un terminal, tecleamos su para ponernos como root (super usuario), y tener control total sobre el sistema (os pedirá vuestro password, claro). cd /usr/src para meternos en el directorio predeterminado para las fuentes (sources) de todos los programas que queramos (recomiendo entrar aquí cada vez que queramos compilar algo, así estará todo ordenadito en este dir).

    Una vez en el directorio, nos disponemos a descomprimir el archivo con tar -zxvf rutadelarchivo.tar.gz. Por ejemplo, si tenemos el archivo en /home/user/linux-2.4.21.tar.gz hacemos un tar /home/user/linux-2.4.21.tar.gz y esperamos a que acabe de descomprimir.

    • Nota: HAY que hacer un enlace simbólico con ln -s linux-2.4.21 en el mismo /usr/src para que accedamos al "/usr/src/linux-2.4.21/" solo con "/usr/src/linux/" porque si no luego podríamos tener problemas al intentar instalar módulos externos, algún driver, etc.

    *** Configurando el Kernel…**
    Accedemos al directorio de las fuentes con cd /usr/src/linux. Hay varias formas de configurar las opciones, pero nosotros usaremos make menuconfig, que es en un entorno "consolero" muy amigable, y también útil por si no tenemos las x windows. Ejecutamos lo anteriormente mencionado y, si tenemos todas las librerias necesarias, se abrirá el menú de configuración.

    • Las librerias necesarias son las "ncurses", normalmente llamas en paquetes libncurses-*, pero muchas veces, aunque instalemos estas, nos puede dar un error al hacer el menuconfig. ¿Qué hacer? Instalar las cabeceras de este paquete, normalmente llamas libncurses-dev o libncurses-devel. Con estas instaladas no nos debería dar ningún error (referido a este "problemilla").

    Una vez en el menu, las opciones básicas son simples, sólo hace falta saber un poquito de inglés. Nos movemos por los directorios raíz con las flechas de arriba y abajo, y para acceder a un submenú pulsamos intro. Dentro de los submenús veremos muchas opciones en < > y quizás algun submenú más.

    Pues bien, si pulsamos sobre las < > podemos habilitar varias cosas:

    • Primero se pondrá como < M >, y esto significará que se instalará como módulo, no se instalará en el arranque, es decir, que estará instalado, pero cada vez que queramos habilitarlo tendremos que hacerlo manualmente. Esto es útil cuando no usas un hardware siempre, por ejemplo un escáner. Pues lo que haces, es cuando lo vayas a usar, lo habilitas y listos. Así te ahorras tiempo en el arranque (arrancará más rápido).
    • Si lo pulsamos otra vez, se pondrá como < * >, y esto significará que está habilitado desde el arranque, o sea, siempre. TODO el hardware que usemos siempre (como puede ser tarjeta de red, de sonido…) recomiendo que esté siempre así, ya que nos ahorraremos mucho tiempo.
    • Si lo pulsamos otra vez, se quedará en blanco, que como muchos habreis podido deducir, quiere decir que no está habilitada esa opción.
    • Nota: no siempre se pueden poner como módulo o directamente al arranque, hay algunos que solo se pueden poner como módulos y viceversa.

    Id mirandoos todos los menús de cabo a rabo, y viéndolo todo bien para que habiliteis lo que necesitéis.

    • Nota: si entramos en Code maturity level options y habilitamos Prompt for development and/or incomplete code/drivers nos aparecerán muchísimas cosas más para habilitar, pero como su propio nombre indica, pueden estar incompletas o en desarrollo. Usad esta opción bajo vuestro propio riesgo.

    • Nota 2: en "File Systems" no añadais sistemas de ficheros como módulos a no ser que sean los que no utilizáis para arrancar, ya que si, por ejemplo, usamos EXT2 y lo tenemos hablitado como módulo, al iniciar nos podría dar un kernel panic y tendríamos que volver a empezar desde el principio. **Gracias josefu

    *** Compilando el Kernel…**
    Una vez seleccionado todo lo que queremos, damos a exit (por las opciones de abajo nos movemos con las flechas izquiera y derecha). Nos preguntará que si queremos salvar nuestra nueva configuración, a lo que diremos que sí. Después nos saldrá algo como esto…

    _Saving your kernel configuration…

    *** End of Linux kernel configuration.
    *** Check the top-level Makefile for additional configuration.
    *** Next, you must run 'make dep'.
    _

    • Como algunos habréis entendido, tendremos que hacer un make dep y empezar a compilar!
    • Después del make dep, hacemos un make clean
    • Luego viene el que dura más, "el que compila todo", hacemos make bzImage y somos muuuy pacientes (los que tengáis un pedazo de procesador quizás no haga falta que seáis tan pacientes).
    • Una vez terminado este paso, compilamos e instalamos los módulos que hayamos seleccionado con make modules && make modules_install
    • NOTA!! Para los kernels de la rama 2.6 tan solo tenemos que ejecutar make y se compilará todo, tanto el propio kernel como los módulos. Podéis mirar más opciones con make help.
    • Todo compilado, PERO NO TAN DEPRISA! Ahora hace falta que copiemos la imagen que hemos creado de nuestro kernel con cp arch/*/boot/bzImage /boot. Por ejemplo, si tenemos un i386 hacemos un cp arch/i386/boot/bzImage /boot.

    Por ahora todo bien…

    *** Haciendo arrancable el nuevo Kernel…**

    • Nota: recomiendo que hagáis un disquette de arranque con el kernel viejo por si habéis tocado algo mal con alguna aplicación que tienen la mayoría de las distribuciones. Si habéis hecho uno en la instalación, sirve.

    En caso de que usemos lilo como gestor de arranque, como root, ejecutamos un editor de texto (ya sea vi, vim, nano…) y editamos /etc/lilo.conf Buscamos una lineas que contengan algo como esto…

    _image=imagen
    label=Linux
    read-only
    _
    Y lo editamos para que aparezca algo como esto…
    _image=/boot/bzImage
    label=Linux
    read-only
    _
    Es conveniente de que añadamos una línea que ponga default=Linux encima de lo que acabamos de poner, si no la tenemos ya, para que "bootee" nuestro linux como S.O. prederminado.

    El lilo tiene muchas más opciones, si queréis tocar algo más hacedlo, man lilo. Hay mucha información y además, muchas distros tienen archivos de ejemplo.

    Después haber guardado el archivo, ejecutamos (como root también) lilo y nos debe aparecer algo como esto:

    Added Linux *

    …y las demás entradas para otros sistemas/kernels que tengáis.

    *** Arrancando el nuevo Kernel…**
    Si todo lo de antes lo hemos hecho bien, podemos pasar a un reboot como root y esperar a que el sistema se reinicie y arranquemos con el nuevo kernel. Si falla, arranca el sistema con el disquette de arranque y vuelve al paso de configuración y mira por qué ha fallado. Si no, felicidades, tienes un nuevo kernel, comprueba su funcionamiento y asegurate de que es el que has puesto con uname -a.
    –-_



  • 1

    Esta muy bien :)

    Unas cuantas cosas:

    Tardará un poco, ya que son ~30MB (lo siento para los users de 56kb)

    Yo soy 56kuser!!! xD y para bajarme ficheros grandes utilizo el mejor gestor de descargas: wget
    Para bajaros un archivo grande (como el del kernel) ejecutad:

    wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz para el kernel

    Cuando nos cansemos de bajar archivo, paramos el wget (Ctl+C); y cuando queramos reiniciar el download tan sólo debemos añadir el parámetro -c como en el ejemplo siguiente:

    wget -c http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz

    y wget continuará la descarga por donde se quedo.

    Otra cosa, en la sección del menuconfig dónde se escoge los sistemas de ficheros soportados (ext2, ext3, reiserfs, vfat, ntfs, etc); se debe elegir como parte integrante del kernel (_<>_*), y no como módulo (), el sistema de ficheros de vuestra partición raíz (/); si no, no podrá montar la partición y os dará un kernel-panic en el arranque.

    PD: Yo tuve varios kernel-panik's por esta razón hasta q se me ocurrió q podría ser eso xDxDxDxD



  • 2

    Muy wapo, si señor, esta de p**a madre. Con los mini how to q habeis puesto ya puede iniciarse al linux casi cualquiera.

    Pongo un par de links q a mi me estan ayudando un wevo:
    http://es.tldp.org/Manuales-LuCAS/LIPP/
    http://www.ciberdroide.com/misc/novato/curso/index.html

    P.D. te has comido el nombre del enlace "linux" a la hora de crear un enlace simbolico tras descomprimer el kerner;)



  • 3

    Lo deberiais de poner fijo…



  • 4

    toy totalmente de acuerdo



  • 5

    Corroboro la idea de fijarlo :)



  • 6

    genial, muchas gracias!! jeje

    Si eso si crees que esta completo me lo dices i lo pongo en mi web. Te podrias currar un PDF como hizo Josefu…

    voy a decirle a cascaman k lo fije :p

    Salu2!



  • 7

    Haber si no se pierde por los fondos del foro!!! que lo fijen!! engaaAAA saludos!!



  • 8

    Gracias :)
    Completo, completo… dudo que lo esté :P Le faltan un par de cosas, tengo que retocarlo un poco y añadirle unas cositas (como por ejemplo como aplicarle los parches nuevos que salen), y lo del PDF si saco un poco de tiempo y recursos para hacerlo, quizá... :rolleyes: Gracias de nuevo, un saludo!



  • 9

    pos entonces cuando creas k esta bien, me lo dices i lo publico.

    igualmente se podra actualizar.

    Ya he enviado el mail a cascaman para k lo fije…a ver si lo lee ya :p jeje

    Salu2!



  • 10

    He vuelto a editar y a poner un par de cosillas (como las que decía josefu :) ). Yo creo que ahora está más o menos completito… Sólo me falta lo de aplicar los parches, que más adelante lo pondré en otro MINI-HOWTO si todo va bien.

    He acortado el mensaje porque no me cabía en uno solo y tengo esa manía :D Tranquilos, lo único que he borrado ha sido mis comentarios al principio, al final, y las notificaciones de los edits :p

    marcalj, yo ahora creo que está decentillo, si tu crees que está bien publicalo en tu web, tienes "permiso" para hacerlo :p

    Lo del PDF... Ahora que termino los examenes quizá tengo un poco más de tiempo, si alguien me pudiera facilitar el nombre de alguna aplicación para hacerlos (sólo para Linux, ya que es mi único S.O.) que me lo diga y en cuanto pueda lo hago.

    Un saludete :)



  • 11

    ok, cuando acabe los examenes lo pongo ya que veo que me va a dar faena a pasarlo todo bien a HTML…

    Asi te da mas margen para hacer tambien el segundo Howto, jeje

    Salu2!



  • 12

    Hola :) Pues nada, que he editado el manual cambiando cuatro números (la versión del Kernel), ya que se ha actualizado a la versión 2.4.21. Lo podéis bajar desde aquí, un saludo



  • 13

    me parece muy completo pero … me gustaria añadir alguanas cosas :)
    lo mas importante es el paso de make menuconfig conde especificamos como debe de ser nuestro sistema vamos que nos calzamos un guante
    si tenemos una targeta nvidia y planeamos utilizar la aceleracion del driver de nvidia (modulo del kernel)
    hemos de activar en procesor type and features la opcion

    • MTRR (Memory Type Range Register) support
      no se si se puede poner como modulo pero yo recomiendo ponerla integrado en el kernel por temas de velocidad
      en el apartado de file systems ademas de todos los sistemas de archivo que queremos que tenga nuestro linux
      hay que poner tb* Virtual memory file system support (former shm fs)
      pq si no nos dara un bonito kernel panic (al menos a mi me lo ha dado ), esto ultimo me gustaria constrastarlo con otros ususarios (quisiera que se probase con y sin esta opcion a ver que le pasa al nucleo)
      creo que es todo lo que puedo aportar :)


  • 14

    Lo del PDF… Ahora que termino los examenes quizá tengo un poco más de tiempo, si alguien me pudiera facilitar el nombre de alguna aplicación para hacerlos (sólo para Linux, ya que es mi único S.O.) que me lo diga y en cuanto pueda lo hago.

    Para pasarlo a pdf yo utilicé htmldoc, por si te sirve

    Salu2



  • 15

    Buenas, hoy me he decidido a compilar el kernel 2.4.22 para mi makina i todo perfecto, no sabia k era tan facil!!!! uooooo!!!! Todo antes de reiniciar es sencillo.

    Mi problema:

    Al iniciar el nuevo kernel me dice k es demasiado grande…

    noseke "TOO BIG"

    Al hacer el bzImage me dijo un warning, k no cabia en un diskette, ya que ocupa la "imagen" 1,51mb mas o menos...

    Si ocupa mas de un diskette no inicia? o como va?

    Es por alguna opcion incompetente k he activado?

    Es raro. Yo lo configure con "make xconfig" no creo que pase nada.

    Salu2!



  • 16

    No pasa nada, sólo te avisa que no podrás grabar la imagen a un disquette y así hacer uno de rescate ;) Pero no tiene más compliación…

    Ahora, ojo, si quieres hacer un disquette de rescate "por si las moscas" no creas que son 1'44mb, no me acuerdo cuanto era la cantidad exacta pero no te tiene que aparecer ese warning para que puedas grabarlo a un disquette (el bin) con dd (es como una ISO) y tener un disquette de rescate supermegaguay xD

    Un saludo!



  • 17

    Decia k no me iniciaba el kernel, eske me habia dejado el "make modules && make modules_install"

    Aun asi no me inicia, ya no me dice AL INICIAR lo del "too big" ahora me dice:

    "Loading Linux2.4.22 ….................."

    I se queda ahi...no se k hacer.... no me dice nada de errores...

    En el apartado de Kernel hacking lo desactivé todo, puede k activando alguna opcion de verbose pueda ver lo k pasa?

    Salu2! i gracias.



  • 18

    Eso es precisamente lo que me ha pasado a mí un par de veces :nono: Lo único que se me ocurre es que vayas jugando con el Kernel y dejes una imagen de rescate para poder bootear y volver a configurar. Ves añadiendo, quitando… parámetros y prueba, yo he tenido que usar una versión anterior que sino no me tiraba :vayatela: Alomejor tienes que añadirle los parches y eso, no sé. Ah, y lo de los módulos no tiene nada que ver, si no has seleccionado nada como módulo (o incluso si lo has hecho) si no haces esos dos comandos lo único que pasará es que no te creará los módulos. Y lo del "kernel too big" tampoco, es lo que te comentaba para meterlo en un disquette. Pues eso, a probar configuraciones, jeje. Suerte!



  • 19

    Bueno voy a colaborar un poco con el tema, ya que a mi aparte de lo que comenta Elfo que hay que hacer me sugirieron hacer un par de cosas mas.. Las comento y vosotros me direis:

    Despues de copiar el bzImage al directorio /boot, me dijeron que tambien era muy reconmendable copiar el archivo System.map que se encuentra en el directorio /usr/src/linux-2.4.xx o /usr/src/linux (si habeis hecho el ln -s /usr/src/linux-2.4.xx linux)

    En el lilo habría que especificarle la ruta donde se encuentra el System.map (/boot/System.map) de la siguiente forma:

    map = /boot/System.map

    Eso por un lado, por otra parte me dijeron que en caso de que tuviera que recompilar el kernel por algun fallo o cualquier tonteria, que seria recomendable que borrara el directorio donde se instalan todos los modulos.

    #rm -r /lib/modules/2.4.xx

    De esa forma al hacer de nuevo la compilacion del kernel los modulos no se sobreescribirian y se instalarian como si fuera una primera vez. Por lo demas todo lo he hecho igual y puedo aseguraros que funciona perfectamente.

    PD: Seria buena idea, poner las opciones que se deberian de cargar por defecto en todo los kernels. Por lo menos especificarlas, yo eso lo eche de menos cuando me puse a recompilar mi kernel…

    PD2: Para saber el tiempo que tarda en compilar vuestro kernel podeis hacerlo de la siguiente forma:

    #time make dep clean bzImage modules modules_install

    Todas las ordenes que van detras de make se ejecutan una a una siguiente el orden que les marques, de esa forma no hace falta poner lo que describen en otros howtos (no me refiero a este):

    make dep && make clean && make bzImage && make modules && make modules_install

    Estas opciones son aconsejables una vez hayas recompilado ya el kernel y sabes que no va a fallar en ninguno de los pasos o simplemente si sabes directamente que no va a fallar :p





Has perdido la conexión. Reconectando a Hardlimit.