Compilar una nueva versión del kernel

Compilar manualmente el kernel Linux a partir de las fuentes es un proceso largo y tedioso. Además si se despista un poco, compila o dejas de compilar algo hará que el kernel no funcione. Una forma de ahorrarse parte de este proceso es usar el archivo de configuración del kernel actual (.config) para configurar el nuevo kernel.

En el proceso se le presentarán las novedades del kernel, y se le preguntará si desea compilar, o no, estas novedades en su kernel. Como desventaja perderá la valiosa ayuda que proporciona el menuconfig del kernel, por ello es posible que una vez haya terminado el proceso de migración usted quiera entrar al menuconfig del kernel para informarse sobre las nuevas novedades.

El proceso de migrado consiste en un solo comando, para ello es preciso copiar el .config al directorio raíz de las nuevas fuentes, cp /usr/src/linux/.config /usr/src/linux/linux-2.6.nueva-versión/.config, y posteriormente ejecutar make oldconfig. Se le irán presentando los novedades y usted deberá decidir si desea, o no, compilarlas. Si usted se ve abrumado por el número de cambios, y desconoce para que sirve, puede cancelar el proceso con ctrl+c; y a continuación hacer un make menuconfig donde se podrá recurrir a la fantástica ayuda del kernel.

Si usa gentoo, recuerde recompilar los módulos externos al kernel en caso de que existan. En la entrada Reinstalar módulos externos al kernel se explica como simplificar este proceso, especialmente si tiene muchos módulos externos al kernel..

Tras el salto, les dejo con un ejemplo donde se compila la última versión disponible desde git en una máquina virtual con gentoo. En este caso no se nos pregunta por las nuevas opciones puesto que al tratarse de la misma versión, tan solo cambia el rc, no existen novedades.

agd@agd-desktop $ ssh root@192.168.1.120
Password:

Last login: Wed Jan 26 11:33:46 CET 2011 from 192.168.1.20 on pts/0

agd-server # emerge --sync
agd-server # emerge -avuDN world

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U ] sys-apps/mlocate-0.23.1-r1 [0.23.1] 0 kB
[ebuild  NS   ] sys-kernel/git-sources-2.6.38_rc3-r1 [2.6.38_rc1, 2.6.38_rc2-r1] USE="symlink -build" 9,297 kB
[ebuild     U ] app-vim/gentoo-syntax-20101212 [20100215] USE="-ignore-glep31" 19 kB

Total: 3 packages (2 upgrades, 1 in new slot), Size of downloads: 9,315 kB

Would you like to merge these packages? [Yes/No] y
...
agd-server # cd /usr/src/linux-2.6.38-rc3-git1/
agd-server linux-2.6.38-rc3-git1 # cp /usr/src/linux-2.6.38-rc2-git1/.config .config
agd-server linux-2.6.38-rc3-git1 # make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/kxgettext.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#
agd-server linux-2.6.38-rc3-git1 # make -j3
...
agd-server linux-2.6.38-rc3-git1 # cp arch/x86_64/boot/bzImage /boot/kernel-2.6.38-rc3-agdserver-V.1
agd-server linux-2.6.38-rc3-git1 # nano /boot/grub/grub.conf
agd-server linux-2.6.38-rc3-git1 # shutdown -r 0

Broadcast message from root@agd-server (pts/0) (Wed Feb  2 22:15:23 2011):

The system is going down for reboot NOW!

agd-server linux-2.6.38-rc3-git1 # exit
logout
Connection to 192.168.1.120 closed.
agd@agd-desktop $ ssh root@192.168.1.120
Password:

Last login: Wed Feb  2 21:24:18 CET 2011 from 192.168.1.20 on pts/0
agd-server # uname -a
Linux agd-server 2.6.38-rc3-git1 #1 SMP Wed Feb 2 22:12:11 CET 2011 x86_64 QEMU Virtual CPU version 0.13.0 GenuineIntel GNU/Linux

0 comentarios:

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.