Tag Archives: kernel

Reiniciar Linux automáticamente en caso de un kernel Panic

Un Kernel Panic es un error del núcleo del sistema operativo (o de uno de sus módulos) que muestra un dump con información de depuración, esto puede ser útil a desarrolladores del sistema operativo para esclarecer las causas del error. Pero a la mayoría de los mortales no les va a servir de nada esa información casi críptica. Además, en caso que la máquina sea un servidor, lo último que queremos es que deje de dar servicio, entonces la solución pasa por programar un reinicio automático en caso de Kernel Panic. Para conseguir esto haremos lo siguiente, abrimos el archivo /etc/sysctl.conf y añadimos la siguiente línea:

kernel.panic = 10

Si ahora nuestro servidor decide morir, resucitará al cabo de 10 segundos, iniciando el arranque desde cero. El problema que esto supone es que podemos tener un servidor en problemas constantes y ni siquiera darnos cuenta.

Una posible solución sería hacer que la máquina envíe un correo electrónico (ver mi anterior arículo Enviar e-mail desde la consola) al administrador avisándole que se ha reiniciado, este correo electrónico puede incluir el contenido de /var/log/messages para entender qué es lo que estaba pasando justo antes del reinicio.

Alta resolución en la consola de FreeBSD

Una de las cosas que no me gustaba de FreeBSD cuando empezé es que por defecto usa una consola típica de 80 columnas x 25 líneas. En Linux esto depende del bootloader (GRUB o LILO), que es donde se define la resolución de pantalla y la profundidad de color que usará el sistema corriendo en modo texto. Volviendo a FreeBSD, lo que no sabía yo es que esto podía cambiarse fácilmente, para eso usaremos vidcontrol.

Vidcontrol es el comando que comunica con syscons (el driver que proporciona las terminales virtuales) y especifica modos de video y color.

Para empezar, vemos cuáles son los modos disponibles con el siguiendo comando:

# vidcontrol -i mode

En este momento nos cagamos en los desarrolladores de FreeBSD y en sus respectivas famílias. Vemos que, si los modos son esto que vemos, empezamos mal. Efectivamente, estamos empezando por el final casi, lo primero que tenemos que hacer es añadir ciertas opciones al Kernel. Añadimos lo siguiente a nuestro fichero de configuración del Kernel.

options VESA # Añadimos el módulo VESA al kernel

options SC_PIXEL_MODE # Syscons actuando en modo píxel

Si no sabes compilar un nuevo kernel no te preocupes, el otro dia expliqué cómo hacerlo. Ahora podemos volver a vidcontrol:

# vidcontrol -i mode

Vemos que la lista es ahora considerable. Escojemos un modo que sea de nuestro gusto y lo probamos, en mi caso uso el 279, que viene a ser 1024×768 con 16 bits de color. Lo probamos:

# vidcontrol MODE_279

Si esto no funciona (o no nos gusta el resultado) seguimos probando modos hasta tropezar con lo que queremos. Por ejemplo, si tenéis activado el mouse en consola, veréis que en algunos modos concretos no os funciona, no tengo ni idea del porqué pero supongo que habrá una buena explicación. Por último sólo falta añadirlo a /etc/rc.conf (configuración general del sistema) para que el modo se aplique al inicio.

allscreens_flags="MODE_279"

Reiniciemos y seamos felices.

Compilando el kernel de FreeBSD

Esta semana he instalado FreeBSD en el portátil y llevo algunos dias configurándolo todo, actualizando el sistema, instalando aplicaciones des de los ports, etc. Antes sólo habia usado FreeBSD como servidor y me he decidido a probarlo mas a fondo como sistema de escritorio. Una de las cosas que nunca antes habia hecho en FreeBSD es compilar el kernel. En Linux sólo lo hice un par de veces para añadir algo en concreto en la época en que usaba Slackware.

FreeBSD

Básicamente he añadido:

  • Soporte para la tarjeta de sonido sin tener que cargar el driver en /etc/rc.conf
  • Soporte para altas resoluciones en la consola
  • Especificar que la CPU es i686

Cosas que he quitado de hardware que no tengo (o no uso):

  • Soporte para CDROM
  • Soporte para Disquetera
  • Soporte para SCSI
  • Soporte para cintas
  • Soporte para alto número de particiones en el disco
  • Soporte para RAID
  • Soporte para puertos COM, LPT, etc

También he quitado el soporte para:

  • NFS
  • IPV6
  • Drivers Ethernet o Wireless que no necesito

¿Cómo compilar el kernel en FreeBSD?

El proceso de compilación del kernel en FreeBSD es muy simple. En /usr/src/sys se encuentra el código fuente del kernel. Si tenemos bien configurado el cvsup podemos actualizar el código a la última versión de esta forma:

# cd /usr/src

# make update

Con esto hemos actualizado el código fuente de todo el sistema base, ahora entramos en /usr/src/sys/i386/conf y hacemos una copia del fichero de configuración del kernel que viene por defecto:

# cd /usr/src/sys/i386/conf

# cp GENERIC NUEVOKERNEL

NUEVOKERNEL es un fichero de texto plano al que sólo tenemos que comentar (#) o descomentar las lineas adecuadas dependiendo de lo que estemos buscando. Para esto nos será extremadamente útil leer The Configuration File en el Handbook de FreeBSD. Lo editamos con ee (“easy editor”, viene por defecto en la instalación base) o con vi (lo prefiero pero a veces uso ee por pereza), y hacemos las modificaciones:

# ee NUEVOKERNEL

Ahora ya podemos compilar el nuevo kernel:

# cd /usr/src

# make buildkernel KERNCONF=NUEVOKERNEL

Instalamos:

# make installkernel KERNCONF=NUEVOKERNEL

Ahora el nuevo kernel se ha instalado en /boot/kernel/kernel y el antiguo se ha movido a /boot/kernel.old/kernel

Reiniciamos:

# reboot

Y si lo hemos hecho todo bien ya podemos disfrutar de un kernel a medida en nuestro sistema FreeBSD.