Recompilar Kernel Ubuntu 804

Hola tengo actualizado Ubuntu 804 y me gustaria recompilar el kernel que ya tengo para optimizarlo y aprender un poco mas de linux ahora me surgen unas preguntas...

uso esta version --> 2.6.24-21-generic

Las dudas son si la configuracion de T.Inhalambrica, T.Video, T.Sonido, se desconfigurara....???

y otra es este comando (aptitude install kernel-package libncurses5-dev fakeroot wget bzip2), se que es para compilar el kernel, pero son las ultimas librerias???... y a ver si alguien puede poner una guia, de que cosas se pueden quitar y cuales noooo!!. Un saludooo

Hola a todos después de tanto tiempo me he animado ha recompilar mi kernel, he cogido el actual y me he tirado un par de horas configurando y quitando mill cosas innecesarias!!.

Encontré una guía muy buena creado por Mononeurona en 2006 para empezar aqui

La escribo a continuación:

1 - CÓMO COMPILAR EL KERNEL EN UBUNTU
Este documento se basa en el KernelHowto, publicado en inglés por steve en la wiki de Ubuntu: http://www.ubuntulinux.org/wiki/KernelHowto∞. Lo que yo he hecho ha sido traducirlo, resumiendo algunos puntos, ampliando otros y aclarando algunos otros. Y, por supuesto, comprobando que funciona. La compilación del kernel se hace a la manera Debian, es decir, con herramientas propias de esta distribución. Así que vamos allá. Paso a paso.

Para compilar un kernel a medida vamos a necesitar los paquetes build-essential y kernel-package, por lo tanto:

bash:$ sudo apt-get install build-essential kernel-package --> Si hemos compilado alguna aplicación antes seguramente la tengamos


2 - OBTENER LAS FUENTES DEL KERNEL
Las fuentes del kernel las podemos obtener de muchos sitios. El oficial, como todos sabeis es http://www.kernel.org
Pero también están en los repositorios de Ubuntu, y yo las he sacado de ahí, porque tiene algunas ventajas, como luego veremos. (toda la razon)

En los repositorios de Ubuntu os vais a encontrar con paquetes llamados kernel-source y con paquetes llamados linux-source. Ambos son las fuentes del kernel. ¿Cuál es la diferencia?, pues que los kernel-source vienen de Debian, y los linux-source vienen de Ubuntu. Por lo tanto para obtener las fuentes del kernel que tenemos instalado y corriendo en nuestro sistema, sólo tendremos que hacer:

bash:$ sudo apt-get install linux-source

Con esto se descargará el archivo linux-source-nº_de_version.tar.bz2 en el directorio /usr/src (A partir de ahora asumiré que hemos descargado el linux-source-2.6.8.1, que es el que viene con Ubuntu warty). Nos movemos a ese directorio:

bash:$ cd /usr/src

Si existe un enlace llamado linux a un kernel antiguo, lo borramos:

bash:/usr/src$ sudo rm -R linux --> Supongo que lo hace para que no estemos escribiendo todo el rato linux-source-2.6xxxxxxxxx

Ahora vamos a descomprimir el archivo de las fuentes:

bash:/usr/src$ sudo tar jxvf linux-source-2.6.8.1.tar.bz2

Esto creará un directorio llamado linux-source-2.6.8.1
Creamos un enlace simbólico (llamado linux) a ese directorio:

bash:/usr/src$ sudo ln -s linux-source-2.6.8.1 linux


3 - CONFIGURAR EL KERNEL
Hay varias formas de configurar el kernel. Probablemente la mayoría de la gente utiliza una de estas dos: make menuconfig o make xconfig. La diferencia es que con make menuconfig no hace falta tener las Xwindow corriendo (lo que es mejor, para no complicarse), y con make xconfig sí.

Nota: para utilizar make menuconfig necesitaremos el paquete libncurses5-dev (con todas sus dependencias) y para utilizar make xconfig necesitaremos el paquete libqt3-dev (con todas sus dependencias). Así que según lo que queramos utilizar, tendremos que hacer:

bash:/usr/src$ sudo apt-get install libncurses5-dev

o bien:

bash:/usr/src$ sudo apt-get install libqt3-dev

Una duda que siempre surge: para configurar el kernel, ¿puedo partir de una configuración conocida?. Pues la respuesta es que . Si tenemos, por ejemplo, instalado el kernel que trae Ubuntu por defecto (2-6-8-1-3-386 en mi caso), en el directorio /boot nos encontraremos con un archivo llamado config-2.6.8.1-3-386, y, ¿qué es ese archivo?, pues no es más que un archivo de texto con la configuración actual del kernel, por lo tanto, para partir de esa base y comenzar la configuración del nuevo kernel desde la actual, lo que tenemos que hacer es copiar dicho archivo al directorio /usr/src/linux-source-2.6.8.1, pero llamándolo .config, es decir:

bash:$ cd /usr/src/linux
bash:/usr/src/linux$ sudo cp /boot/config-2.6.8.1-3-386 .config

(lógicamente tendréis que cambiar los números de versión del kernel por los que se ajusten a vuestro caso particular).

Pues ahora ya podemos hacer (situados en el directorio /usr/src/linux) un sudo make oldconfig menuconfig o un sudo make oldconfig xconfig y modificar las opciones que queramos del kernel, es decir, configurarlo a nuestro gusto. Con mucho cuidado, eso sí, porque este es el paso crítico. Aquí es donde lo podemos arruinar todo si, por ejemplo, no incluimos algún módulo necesario para nuestro sistema.


A partir de aquí es donde se hecha de menos una guía!!, ya que las que suelen haber por internet son un poco antiguas!!, nos ayudaremos en lo que podamos con la interfaz donde pone HELP.

Podemos abrir una consola aparte y ponemos el comando lspci, para no quitar drivers que necesitemos, tambien recomiendo usar el programa hardinfo, que lo podeis instalar desde los repositorios de synaptics!.

En el menú de configuración del kernel, desde aquí damos soporte al hardware, protocolos etc., más tarde, esta configuración sera compilada en una imagen con la que iniciaremos el sistema. La leyenda de teclas para la utilizacion del menuconfig es la siguiente:
Pulsando "Enter" entramos en el menú o submenús.
Pulsando "Y" incluimos lo que seleccionemos como parte de la imagen del Kernel.
Pulsando "M"lo incluiremos modulo, esto es, se compilara aparte y se cargara si queremos o no y no ocupara espacio en la imagen del kernel.
Pulsando "N" lo excluiremos de la futura imagen.
Por último, si pulsamos "?" se nos mostrara información sobre el menú u opción (se aconseja utilizarlo si no se sabe que hace esa opción)
La leyenda es esta:
[*] ó <*> indica que la opción sera compilada como parte de la imagen.
[ ] ó < > inidca que la opción no esta incluida.


4 - CONSTRUIR EL PAQUETE DEL KERNEL
Para construir el paquete con el que instalaremos el nuevo kernel vamos a usar la orden make-kpkg. Esta orden lo que hace básicamente es sustituir a las clásicas make dep, make clean, make bzImage y make modules. Admite numerosas opciones y modificadores (ya sabeis: man make-kpkg), pero para lo que nos ocupa ahora sólo necesitaremos hacer lo siguiente:

bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image

Lo único que teneis que modificar de la orden anterior es XXXX, que representa una secuencia alfanumérica que tendréis que decidir vosotros, y que se añadirá al número de versión del kernel para diferenciar el kernel que estais compilando de cualquier otro que ya esté instalado en vuestro sistema. Por lo tanto XXXX lo debereis sustituir por lo que querais, intentando no utilizar el guión de subrayado bajo (_) ni expresiones como "-386", "-606", "-K7", "-sparc", etc., porque expresiones similares son las usadas por los kernel precompilados de Debian y podrían inducir a error. Personalmente yo uso la fecha en la que compilo el kernel, de forma que si lo compilase hoy (19 de noviembre de 2004), mi orden querdaría así:

bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.191104 --initrd kernel_image

Ahora hay que hablar un poco sobre la opción --initrd. Esta opción lo que hace es crear una imagen initrd en el directorio /boot. Realmente no es imprescindible utilizarla siempre que a la hora de configurar el kernel hayamos incluido de forma estática (y no como módulos) los controladores para al menos nuestro bus, disco y sistema de archivos de nuestro directorio raiz. Pero (y esto es sólo una experiencia personal) siempre que he intentado compilar un kernel sin esa opción, me he encontrado con un sistema que no arrancaba, así que yo la uso siempre. ¿Qué problema tiene?, pues que para que funcione correctamente la opción --initrd, hay que aplicar a las fuentes del kernel el parche cramfs. Tranquilos, porque todos los kernel de Debian (y por supuesto también los de Ubuntu) tienen ese parche ya aplicado. Pero es algo que tendréis que tener en cuenta si habeis obtenido las fuentes del kernel en algún otro sitio (por ejemplo en http://www.kernel.org).

Bien, como he dicho antes, las órdenes que tenemos que ejecutar son:

bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image

Tras ejecutar la segunda de ellas nos saldrá un mensaje de aviso diciéndonos que la opción --initrd puede no funcionar como nosotros esperamos, y preguntándonos si queremos abortar el proceso. Como ya sabemos que a nosotros nos va a funcionar correctamente, contestamos que no.
Y ahora a esperar, porque el proceso de compilación puede durar mucho.


5 - INSTALAR EL KERNEL
Si todo lo anterior ha ido bien, en el directorio /usr/src se debe haber creado un archivo de nombre kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb
Este es el archivo que contiene nuestro kernel compilado listo para instalar, lo que haremos con:

bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb

Esta orden es equivalente a las clásicas make modules_install y make install, además de colocar en su sitio la imagen initrd generada y actualizar el grub o el lilo. Ahora, y por seguridad, borramos el enlace que habíamos creado:

bash:/usr/src$ sudo rm -R linux

Y ya está. Sólo nos queda arrancar con nuestro nuevo kernel.

Saludos a todos, y espero que os sea de utilidad.
Depende de lo que hagas.

Uno de los pasos cuando vas a recompilar un kernel es seleccionar la configuración (las cosas que se compilan, las que se quedan como módulo y las que no se compilan). Lo que puedes hacer y te recomiendo si eres novato es copiar entonces la configuración que ya tenía el anterior kernel de Ubuntu (que probablemente encuentres en /boot/config-2.6.24-21-generic o algo así).
rortega2000 escribió:Hola tengo actualizado Ubuntu 804 y me gustaria recompilar el kernel que ya tengo para optimizarlo y aprender un poco mas de linux ahora me surgen unas preguntas...

uso esta version --> 2.6.24-21-generic

Las dudas son si la configuracion de T.Inhalambrica, T.Video, T.Sonido, se desconfigurara....???

y otra es este comando (aptitude install kernel-package libncurses5-dev fakeroot wget bzip2), se que es para compilar el kernel, pero son las ultimas librerias???... y a ver si alguien puede poner una guia, de que cosas se pueden quitar y cuales noooo!!. Un saludooo


Ya que te pones, compila un kernel más actualizado: 2.6.27 http://www.linux.org/
Todos los módulos que hayas instalado en tu actual kernel, tendrás que volver a instalarlos en el nuevo. En mi caso tendría que reinstalar los módulos de madwifi y fglrx (catalyst). Es un fastidio, lo se.

Con aptitude install kernel-package libncurses5-dev fakeroot wget bzip2 no compilas el kernel, te bajas un paquete del kernel (me imagino que serán las fuentes), las librerías para ejecutar el menú de configuración, fakeroot (el nombre ya es bastante descriptivo), un gestor de descargas y una herramienta de compresión de ficheros.
Para compilar el kernel tendrás que hacer algunas cosillas más XD
https://help.ubuntu.com/community/Kernel/Compile ahí lo llevas.

Te aconsejo que recuperes la configuración del kernel que tienes por defecto y la tomes como base, luego ve quitando cosas poooco a poooco, no te ciegues quitando a lo loco o tu kernel no saldrá de grub. Asegúrate de mantener la entrada de tu actual kernel en grub para poder volver a tu sistema actual.

Suerte! (si no lo consigues a la de 3, no te desanimes, puede llevarte tranquilamente 20 intentos tener un kernel apañao)
No compiles porquerías a lo generic como se hace en ubuntu. Busca en google "kernel a lo debian"
Snakefd99cb escribió:No compiles porquerías a lo generic como se hace en ubuntu. Busca en google "kernel a lo debian"

XD Me pregunto qué diferencia debe haber entre "Kernel a lo Ubuntu" y "Kernel a lo Debian", ya que la infraestructura es basicamente la misma.

Por no decir que Generic es precisamente eso, Generic. "Funciona igual de bien en todos los procesadores" a costa de tener una bzimagen levemente más grande.
compilalo a la debian, coincido con snake..., yo lo hice en mi epoca debian, usando la interfaz ncurses para configurar todo, era facil, no tengas miedo.... ademas tienes xconfig, que es aun mas "amigable".

por otro lado, si "copias" la configuracion de un generic, donde esta la optimizacion?

elige bien la arquitectura de tu procesador, el soporte que necesitas de wifi, raid, sistemas de archivos, "puertos"(pcmcia, usb... yo que se los que hay xD), y mil cosas mas que tiene para tocar.

lo que no sepas que es, antes de dejarlo o quitarlo, busca para que sirve, y si no lo encuentras... entonces por precaucion dejalo... pero puedes tocar muchas cosas
jape escribió:
Snakefd99cb escribió:No compiles porquerías a lo generic como se hace en ubuntu. Busca en google "kernel a lo debian"

XD Me pregunto qué diferencia debe haber entre "Kernel a lo Ubuntu" y "Kernel a lo Debian", ya que la infraestructura es basicamente la misma.

Por no decir que Generic es precisamente eso, Generic. "Funciona igual de bien en todos los procesadores" a costa de tener una bzimagen levemente más grande.


No sé, sus parches entre otras cosas. Y nada, si no queremos aprovechar el procesador pues muy bien...pero no todo el mundo tiene pepinos.

Edito: Como siempre el maestro, jorchube, haciendo gala de sus conocimientos ;)

Yo ahora me pongo con el 27 que tengo que hacer una webcam de esas "designed for Windows Vista" funcione en una maquina.
jorchube escribió:por otro lado, si "copias" la configuracion de un generic, donde esta la optimizacion?


Pero hombre... la idea no es compilar un kernel en base a la configuración genérica de tu distribución. La idea es tomar como base la configuración de tu distribución e ir eliminando cosas innecesarias. Vamos, el típico ensayo y error. Tomas una configuración que sabes que funciona y vas probando:
quito esto, que creo que no sirve y a ver que pasa. ¿Que peta? pues ya se donde he metido la pata.
Si te pones a configurar un kernel, y estamos hablando de un kernel 2.6, sin haber tocado uno antes y el sistema te cruje si o si. Luego ponte a buscar dónde metiste la pata XD En fin, que lo haga como quiera, pero pienso que es mejor ir pasito a pasito, sin prisa, dándole forma al kernel.

Luego que lo haga a la debian o la ubuntu o como se ha hecho toda la vida, ains... que tiempos aquellos del make mrproper XD
theogre escribió:
jorchube escribió:por otro lado, si "copias" la configuracion de un generic, donde esta la optimizacion?


Pero hombre... la idea no es compilar un kernel en base a la configuración genérica de tu distribución. La idea es tomar como base la configuración de tu distribución e ir eliminando cosas innecesarias. Vamos, el típico ensayo y error. Tomas una configuración que sabes que funciona y vas probando:



hombre por defecto ya llevan una configuracion suficiente, no viene con todo desactivado.. de hecho viene seguramente con mas cosas de las que necesites... entonces activar mas cosas aun para partir del kernel de ubuntu, pues lo veo un poco innecesario, no?


pd: no es insomnio, es trabajo jejejeje
jorchube escribió:
theogre escribió:
jorchube escribió:por otro lado, si "copias" la configuracion de un generic, donde esta la optimizacion?


Pero hombre... la idea no es compilar un kernel en base a la configuración genérica de tu distribución. La idea es tomar como base la configuración de tu distribución e ir eliminando cosas innecesarias. Vamos, el típico ensayo y error. Tomas una configuración que sabes que funciona y vas probando:



hombre por defecto ya llevan una configuracion suficiente, no viene con todo desactivado.. de hecho viene seguramente con mas cosas de las que necesites... entonces activar mas cosas aun para partir del kernel de ubuntu, pues lo veo un poco innecesario, no?


pd: no es insomnio, es trabajo jejejeje


Hombre... puede que tengas razón (pero no pienso dártela XD). Mi hardware nunca se ha llevado bien con la "configuración mínima" aunque tengo que ser sincero, de hecho creo que ya lo he sido y hace mazo tiempo que no compilo un kernel. Desde que uso arch, para ser exáctos :) (que no recuerdo cuando fue la verdad, pero hace ya)

PD: ... acabo de verme "rec", por tu bien espero que no seas bombero o madero xD en cualquier caso recuerda que el portátil bien sirve como arma arrojadiza. Cagonlahostia, vaya peliculilla [mad] hoy tendré el modo insomnio on [decaio]
make mrproper que yo sepa aún lo utilizamos muchas personas para limpiar las fuentes entre otras.
Hola a todos después de tanto tiempo me he animado ha recompilar mi kernel, he cogido el actual y me he tirado un par de horas..... (mas de 4h) configurando y quitando mil cosas innecesarias!!.

Me he dado cuenta que al hacer sudo make oldconfig menuconfig (por lo menos con el 2.6) te coge directamente la configuración anterior de tu kernel!.

Sabéis de alguna guía para kernel 2.6 de que podemos quitar! y que no!...

El nuevo kernel 2.6.27.9, trae soporte para los chipsets Atheros, pero en mi portatil no hacen nada!!.

Para los que utiliceis Arch!, que tal es para instalar las aplicaciones!!, estoy muy acostumbrado a la comodidad de Ubuntu!. jaja!
11 respuestas