Instalar Gentoo 2005.1 con GCC 3.4 en un RAID 1

Aprovechando que mi hermano ha jubilado su antiguo ordenador he decidido utilizarlo para sustituir mi viejo Pentium II 350Mhz que hasta ahora ejercía de servidor "casero". Cómo no, el sistema operativo bajo el que funcionará será Gentoo :). En esta entrada detallo los pasos que he seguido para instalar Gentoo en mi recién adquirido servidor.

Este documento no pretende ser una guía completa para que todo el mundo pueda instalar esta distribución y válida para todos los casos. La idea es tener una referencia rápida para uso personal, que permita instalar Gentoo sin indagar tanto como en el manual oficial. Solo es un recordatorio de los pasos que he seguido en los que se dice lo que se hace sin explicar detenidamente por qué se hace, para eso ya está el excelente Handbook de Gentoo. No recomiendo su lectura a aquellos que no tengan unas nociones mínimas de Gentoo y su sistema de instalación o que nunca hayan leído (y entendido) el manual de instalación oficial. Tampoco está orientada a entornos de producción, ya que, como he dicho, el ordenador en el que voy a instalar Gentoo va a ejercer de servidor doméstico.

Las particularidades a tener en cuenta que creo que hacen interesante esta guía son:

  • Versión del liveCD de instalación: Gentoo 2005.1-r1, es decir, la última disponible hasta la fecha.
  • Versión de GCC utilizada para compilar todos los paquetes del sistema: 3.4.4-r1.
  • Instalación en una configuración de discos en RAID 1 para mayor fiabilidad y tolerancia a fallos.
  • Sistema compilado con NPTL (Native POSIX Thread Library for Linux).
  • Instalación desde Stage2 para tenerlo optimizado desde el principio.
  • Instalación remota desde otro ordenador (útil por ejemplo para tener ratón y poder copiar/pegar los comandos o para consultar la documentación oficial en un navegador decente).
  • Instalación mediante GNU/Screen que permite ser desatendida para poder retomarla cuando queramos.
  • Al acabar tendremos un sistema configurado para usar por defecto el idioma español.
  • Destinada a un servidor casero, por lo que las USE utilizadas no serán las más adecuadas para otros usos. De hecho no voy a insistir a penas en las USE utilizadas, incluso omitiendolas deliberadamente en algunos casos. Entiendo que el usuario es capaz de elegir las USE necesarias para su sistema y se preocupa por comprobar los valores antes de la instalación de cada paquete.

Para poder entender ciertos pasos o configuraciones utilizadas en la guía, a continuación describo el equipo en el que se instalará el sistema:

  • Arquitectura x86
  • Procesador AMD XP 2400+ K7
  • Memoria 1GB de RAM
  • Discos: 2 discos SATA de 200GB
  • Contoladora SATA raid VIA
  • Configuración de red con IP estática del rango 192.168.0.0/24

Preparando la instalación remota

Introducir el CD de instalación Minimal y arrancar con él.

Cuando nos pregunte por el mapa de teclado elegir el mapa de teclado español, es decir "es" (el 13)
En caso de no dar tiempo a elegirlo no pasa nada, una vez que haya iniciado desde el CD de instalación ejecutar

# loadkeys es

Configurar la red de forma automática

# net-setup eh0

En mi caso, parece que hay un fallo en esta versión del LiveCD que hace fallar al comando anterior, así es que recurro a configurarla manualmente

# ifconfig eth0 192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0 up
# route add default gw 192.168.0.1
# echo "nameserver 62.151.20.6" > /etc/resolv.conf

Comprobar que la red funciona

# ping www.google.com

Establecer clave de root

# passwd

Iniciar el Demonio SSH para continuar la instalación remotamente y ahorrar tiempo

# /etc/init.d/sshd start

A partir de aquí, puedo continuar desde un ordenador remoto mediante una sesión SSH, desde mi entorno de ventanas favorito

# ssh -l root 192.168.0.2

Ejecutar screen para dejar desatendida la instalación en cualquier instante

# screen

Particionar los discos

La configuración de los discos que he decidido usar es la siguiente:
Partición de arranque de 32MB en RAID 1.
Partición de intercambio de 2GB en RAID 0.
Partición raíz de 10GB en RAID 1.
Partición home de 30GB en RAID 1
El restante espacio en ambos discos duros serán dos particiones independientes (sin raid). De momento las usaré para almacenamiento masivo pero así dejo la puerta abierta para darles algún uso en el futuro, posiblemente también en RAID.

NOTA: Cuando escribí esta entrada pensaba que para la memoria de intercambio lo mejor sería usar dos particiones en RAID0 pero mis pruebas han demostrado que el rendimiento es exactamente el mismo que montando ambas particiones con la misma prioridad sin usar mdadm. Por tanto, una configuración equivalente pero más sencilla y tradicional sería:
# grep swap /etc/fstab
/dev/sda2 none swap sw,pri=10 0 0
/dev/sdb2 none swap sw,pri=10 0 0

+info

Cargar los módulos necesarios para el RAID-1 y el RAID-0 de la swap:

# modprobe -v raid1
# modprobe -v raid0

Particionar los discos usando fdisk

# fdisk /dev/sda

Creación de la Partición primaria de Arranque de 32MB: n p 1 (INTRO) +32M
Establecerla de tipo fd (Linux raid autodetect):t 1 fd

Creación de la Partición primaria de Intercambio de 1GB:n p 2 (INTRO) +1024M
Establecerla de tipo fd (Linux raid autodetect):t 2 fd

Creación de la Partición primaria Raíz de 10GB:n p 3 (INTRO) +10240M
Establecerla de tipo fd (Linux raid autodetect): t 3 fd

Creación de la Partición extendida: n e (INTRO) (INTRO)

Creación de la Partición lógica de 30GB restante:n (INTRO) +30720M
Establecerla de tipo fd (Linux raid autodetect):t 5 fd

Creación de la Partición lógica restante: n (INTRO) (INTRO)
Establecerla de tipo fd (Linux raid autodetect): t 6 fd

Guardar el esquema de particionamiento y salir de fdisk:w

# fdisk /dev/sdb

(repetir los mismos pasos que antes para crear exactamente las mismas particiones en el segundo disco)

Comprobar que ambos discos son idénticos

# fdisk -l

En mi caso:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1           5       40131   fd  Linux raid autodetect
/dev/sdb2               6         130     1004062+  fd  Linux raid autodetect
/dev/sdb3             131        1376    10008495   fd  Linux raid autodetect
/dev/sdb4            1377       24792   188089020    5  Extended
/dev/sdb5            1377        5112    30009388+  fd  Linux raid autodetect
/dev/sdb6            5113       24792   158079568+  fd  Linux raid autodetect

Crear los RAIDs

Antes de empezar a crear los "RAID arrays", necesitamos crear los metadispositivos:

# mknod /dev/md0 b 9 0
# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# mknod /dev/md3 b 9 3

Crear los RAIDs para tener la particion boot, swap, root y home en RAID-1(espejo) utilizando /dev/sda y /dev/sdb:

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
# mdadm --create --verbose /dev/md1 --level=0 --raid-devices=2 /dev/sda2 /dev/sdb2
# mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
# mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/sda5 /dev/sdb5

Guardar la información sobre los dispositivos creados en mdadm.conf

# mdadm --detail --scan > /etc/mdadm.conf

En este instante el driver de RAID por Software de Linux empezará a crear los metadispositivos.
Para ver su progreso ejecutar

# cat /proc/mdstat

IMPORTANTE: Esperar hasta que los metadispositivos hayan sido terminados. El comando anterior indica el tiempo aproximado que falta para completarse cada raid.

De ahora en adelante utilizaremos:
/dev/md0 para la partición boot,
/dev/md1 para la partición swap,
/dev/md2 para la partición raíz,
/dev/md3 para la partición home.

Crear los sistemas de ficheros

Crear los sistemas de ficheros en las particiones

# mkreiserfs /dev/md0
# mkswap /dev/md1
# mkreiserfs /dev/md2
# mkreiserfs /dev/md3
# mkreiserfs /dev/sda6
# mkreiserfs /dev/sdb6

Montar las particiones

Activar la partición de intercambio

# swapon /dev/md1

Ajustando la Fecha/Hora correcta (MMDDhhmmAAAA Mes, Día, hora, minuto y Año)

# date 122207362005

Montar la particion raíz y copiar en ella el archivo /etc/mdadm.conf que es el que contiene la información sobre los raids que hemos creado.

# mount /dev/md2 /mnt/gentoo -o noatime
# mkdir /mnt/gentoo/etc
# cp /etc/mdadm.conf /mnt/gentoo/etc

Crear el punto de montaje y montar la particion /boot

# mkdir /mnt/gentoo/boot
# mount /dev/md0 /mnt/gentoo/boot -o notail,noatime

Instalar el sistema base

Obtener y desempaquetar el stage2

# cd /mnt/gentoo
# wget http://linuv.uv.es/mirror/gentoo/releases/x86/2005.1-r1/stages/athlon-xp/stage2-athlon-xp-2005.1-r1.tar.bz2
# tar -xvjpf stage2-athlon-xp-2005.1-r1.tar.bz2

Obtener y desempaquetaruna imagen del árbol de Portage

# wget http://linuv.uv.es/mirror/gentoo/snapshots/portage-latest.tar.bz2
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

Configurar las opciones de compilación

# cp /mnt/gentoo/etc/make.conf.example /mnt/gentoo/etc/make.conf
# nano -w /mnt/gentoo/etc/make.conf

hacer los siguientes cambios:

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

Copiar la información DNS

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Montando el sistema de archivos proc

# mount -t proc none /mnt/gentoo/proc

Montar /dev con la opción "bind" en /mnt/gentoo/dev para no tener que volver a crear los nodos de dispositivo en el ambiente enjaulado:

# mount -o bind /dev /mnt/gentoo/dev

Enjaulamos

# chroot /mnt/gentoo /bin/bash

Actualizamos el entorno

# env-update

Cargamos el perfil de usuario

# source /etc/profile

Establecer clave de root para el chroot

# passwd

Actualizar el árbol Portage

# emerge --sync

Si al finalizar nos advierte que existe una versión mas reciente de Portage, podemos ignorarlo, ya lo actualizaremos mas tarde.

Preparar el sistema para que solo se instalen los idiomas y las codificaciones que queremos

# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
# nano -w /etc/locales.build
es_ES/ISO-8859-1
es_ES@euro/ISO-8859-15
en_US/ISO-8859-1
en_US.UTF-8/UTF-8

Vemos que paquetes del sistema necesitan actualizar y así podremos hacernos una idea de como modificar la variable USE.

# emerge -upv system

En mi caso la variable USE queda USE="-X -ipv6 nls ssl nptl nptlonly -fortran -gtk".

Una vez modificada la variable USE a nuestro gusto instalar el sistema base

# emerge system

Cuando se acabe de instalar el paquete GCC pulsar Control+C para evitar que continué la instalación. El motivo de cancelar la instalación es que recientemente GCC 3.4 ha sido marcado como estable en Gentoo para arquitecturas x86 y no tienen sentido seguir compilando todo con el GCC 3.3, pues más tarde vamos a tener que recompilarlo de nuevo y sería perder el tiempo. Si no queremos ahorrar este tiempo o simplemente, no queremos estar presentes durante la compilación para así cancelarla en el momento oportuno, no pasa nada, simplemente dejar acabar el # emerge system y continuar con el resto de pasos de forma normal.

Actualizar lo poco que llevamos instalado a GCC 3.4 y establecer GCC 3.4 como compilador por defecto

# emerge -uav gcc
# gcc-config i686-pc-linux-gnu-3.4.4
# source /etc/profile
# emerge --oneshot -av libtool sys-libs/libstdc++-v3
# emerge -e system

Actualizar las configuraciones

# etc-update

Enlazar nuestra zona horaria

# ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime

Instalar y compilar el kernel

Obtener el ultimo kernel

# USE="symlink" emerge -av gentoo-sources

Comprobamos que se ha creado bien el enlace al kernel

# ls -l /usr/src/linux

Recuperar la configuración del kernel desde otro ordenador (la configuración que he usado la incluyo como adjunto al final de este documento, por si alguien está interesado).

# cd /usr/src/linux
# make mrproper
# scp root@192.168.0.4:/usr/src/linux/.config .
# make oldconfig

Compilamos el kernel

# make && make modules_install

Copiamos el kernel a boot con un nombre que lo represente

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.2.6.14-r5

Añadimos a /etc/modules.autoload.d/kernel-2.6 los módulos que queremos que se carguen al principio. En mi caso los únicos que udev no me carga de forma automática son el de la tarjeta de red y el del puerto paralelo:

forcedeth
ppdev

Crear fstab

Crear /etc/fstab (también lo incluyo como adjunto al final de este documento por si alguien está interesado).

#RAIDs
/dev/md0		/boot		reiserfs	noauto,noatime,notail	1 2
/dev/md1		none		swap		sw		0 0
/dev/md2		/		reiserfs	noatime		0 0
/dev/md3		/home		reiserfs	noatime		0 0

#Sin RAID
/dev/sda6		/mnt/almacenA	reiserfs	noauto,noatime	0 0
/dev/sdb6		/mnt/almacenB	reiserfs	noauto,noatime	0 0

#CDROM
/dev/cdroms/cdrom0	/mnt/cdrom	iso9660		noauto,ro	0 0

#Especiales
proc			/proc		proc		defaults	0 0
shm			/dev/shm	tmpfs		nodev,nosuid,noexec	0 0

Crear los puntos de montaje que nos faltan y borrar los que no necesitamos

# cd /mnt/
# rm -r floppy/
# mkdir almacenA
# mkdir almacenB
# cd /

Configurar el sistema

Damos nombre a nuestra máquina

# nano -w /etc/conf.d/hostname
HOSTNAME="servidor"

Configuramos la red

# nano -w /etc/conf.d/net
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )

Hacer que la red se cargue automáticamente al inicio

# rc-update add net.eth0 default

Añadir los hosts conocidos

# nano -w /etc/hosts
127.0.0.1 localhost
192.168.0.1 router
192.168.0.2 servidor gsmlandia.com exphera.com
192.168.0.3 nacho
192.168.0.4 azul

Configurar mi editor favorito ;)

# nano -w /etc/rc.conf
EDITOR="/usr/bin/joe"

Configurar el teclado

# nano -w /etc/conf.d/keymaps
KEYMAP="es"

Configurar el reloj

# nano -w /etc/conf.d/clock
CLOCK="local"

Establecer idioma español añadiendo estas dos líneas

# nano -w /etc/profile
export LANG="es_ES@euro"
export LC_ALL="es_ES@euro"

En Gentoo 2005.1-r1 hay un fallo en el paquete net-tools, el cual no incluye todas las funciones necesarias para levantar la red. Si no lo reinstalamos en este punto de la instalación, al terminar la instalación y reiniciar nos encontraremos con que la red no va.

# emerge net-tools

Configurar sshd para que solo puedan hacer login los usuarios del grupo wheel

# nano -w /etc/ssh/sshd_config
AllowGroups wheel

Para poder administrar remotamente el servidor añadimos sshd al inicio

# rc-update add sshd default

Crear una cuenta de usuario

# useradd stolz
# passwd stolz

Instalar paquetes complementarios

Instalar herramientas necesarias para el sistema

# emerge -av mdadm reiserfsprogs

Si nos dice que hay una actualización de /etc/mdadm.conf descartarla.

Instalar el logger y el cron y añadirlos al arranque

# emerge syslog-ng vixie-cron
# rc-update add syslog-ng default
# rc-update add vixie-cron default

Instalar y configurar el gestor de arranque

Instalar el gestor de arranque en ambos discos

# emerge grub
# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit

Configurar el gestor de arranque

# nano -w /boot/grub/grub.conf
default 0
timeout 10
title=Gentoo Linux 2.6.14-r5
root (hd0,0)
kernel /boot/bzImage.2.6.14-r5 root=/dev/md2 video=vesa:ywrap,mtrr,1024x768-32@85

Finalizar

Salir del chroot, salir de screen, desmontar unidades y reiniciar

# exit
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo
# reboot
AdjuntoTamaño
configuracion-gentoo-sources-2.6.14-r529.28 KB
fstab433 bytes

Stolz

Genio. Está genial la guía... para cambiar el tipo de raid sólo hay que modificar el "level" de mdadm?

salu2 :)

Tipo de raid

para cambiar el tipo de raid sólo hay que modificar el "level" de mdadm?

Sí. Puedes usar raid0 si prefieres, pero te aconsejo que al menos la particion /boot la tengas en raid1.