Monthly ArchiveMarch 2007
BSD admin on 28 Mar 2007
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.

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.
Utilidades admin on 16 Mar 2007
Copias de seguridad del MBR y la tabla de particiones en GNU/Linux
En primer lugar tenemos que plantearnos si realmente necesitamos guardar en un fichero el contenido de nuestro Master Boot Record y de nuestra Tabla de Particiones, posiblemente no. Se me ocurren dos casos, a modo de ejemplo, en que puede ser muy útil.
El primero estaria destinado a la clonación de discos, puedes guardar una imagen de cada partición junto con una imagen del sector de arranque. Luego ir al disco destino y volcar esa información sin problemas, consiguiendo un perfecto clon (los dos discos tienen que ser iguales). A mi la clonación de discos no me interesa especialmente, pero ahí queda eso.
El segundo caso es cuando se trata de una copia de seguridad, simplemente. Si eres un fanático de tu distribución favorita y llevas con la misma instalación desde hace 4 años (subsistiendo como un héroe a base de actualizaciones), supongo que no debes tocar a menudo el MBR y mucho menos crear y eliminar particiones. Pero si eres como yo y te dedicas a instalar todo lo que te cae en las manos (físicamente, sin usar virtualización), tendrás el disco bien partido y repartido (Linux permite instalarse en particiones lógicas, por lo que podrías instalar decenas de distribuciones en un sólo disco duro). En este caso es recomendable hacer copias de seguridad del sector de arranque por lo que pueda pasar.
Creando copia de seguridad del MBR:
# dd if=/dev/sda of=/root/backups/mbr bs=512 count=1
Recuperando el MBR a partir de la copia de seguridad:
# dd if=/root/backups/mbr of=/dev/sda bs=512 count=1
dd es una utilidad que, simplemente, copia el contenido de la entrada estándar if en la salida estándar of. En mi caso el disco duro /dev/sda es la entrada y el fichero /root/backups/mbr es la salida (y viceversa para la recuperación). bs es un parámetro que contiene el número de bytes que se van a copiar (el MBR está situado en la pista zero del disco duro, los primeros 512 bytes) y count es un parámetro que contiene el número de bloques que se van a copiar (los bloques son de 512 bytes, por lo que vamos a copiar solo uno, el primero).
Creando copia de seguridad de la Tabla de Particiones:
# sfdisk -d /dev/sda > /root/backups/tabla_part
Recuperando la Tabla de Particiones a partir de la copia de seguridad:
# sdfisk /dev/sda < /root/backups/tabla_part
sfdisk sirve para manipular tablas de particiones en Linux. En la creación de la copia de seguridad usamos el parámetro [-d] para que nos dé una salida en texto plano que pueda ser usada luego para regenerar la tabla. Pasamos esta salida al fichero /root/backups/tabla_part mediante el redireccionador de STDOUT [>]. Para recuperar la tabla sólo hay que usar ese fichero pasándolo por el redireccionador de STDIN [<] hacia el comando sfdisk.
En los ejemplos he usado /dev/sda como disco duro porque es así en mi caso, pero esto puede ser diferente dependiendo de si el disco es IDE, SATA, SCSI o USB. Hay varias formas de saber a qué disco nos estamos refiriendo. una es usar el comando mount para ver las particiones montadas, otra seria leyendo el fichero /etc/fstab donde están las instrucciones de montaje de discos para el arranque. Pero estas opciones no funcionarian por ejemplo des de un Live CD. La solución mas útil para ver todos los discos y particiones (aunque no estén montadas) es:
# fdisk -l
Este comando nos listará todas las particiones (muy útil para detectar un pendrive por ejemplo). Hasta aquí este mini manual, espero que a alguien le pueda ser útil.