viernes, 21 de septiembre de 2012

Configurar GRUB para gestionar varios Sistemas Operativos

Hace algo más de un año, en el trabajo se nos plantearon las siguientes necesidades:
  • Instalar en una máquina varios sistemas operativos.
  • Cada sistema operativo debía quedar oculto a los demás, es decir, una vez arrancado un sistema operativo no se debía poder "ver" a los otros sistemas operativos (ni datos, ni particiones, ni nada).
  • Además el acceso a cada sistema operativo debía estar protegido por usuario/contraseña.
Tras investigar durante unas cuantas noches conseguí encontrar la solución a nuestros problemas: usar Grub como gestor de arranque.

Vamos a suponer que tenemos instalados 3 sistemas operativos Microsft Windows 7: examen, diurno y tarde. Y como última partición hemos instalado Debian. Usando así las 4 particiones primarias permitidas. Obviamente otro tipo de configuración a nivel de particiones sería posible.

El archivo a editar es /boot/grub/grub.cfg
........
..........
# INICIO CREACIÓN DE USUARIOS
# Aquí añadimos los usuarios necesarios para el gestor de arranque.
# No son usuarios del SO Debian.
# La primera línea define quién será el superusuario y se le puede llamar como quiera.
set superusers="root"
password root contra1
password examen contra2
password diurno contra3
password tarde contra4
# FIN CREACIÓN DE USUARIOS

........
..........
# Entrada de arranque a Debian. Solo accesible por el superusuario
# Al final la línea (antes de la llave) añadimos --users ""
menuentry 'Debian GNU/Linux ...' ...  --users ""  {

........
..........
# Entrada de arranque a Debian (recovery mode). Solo accesible por el superusuario
# Al final la línea (antes de la llave) añadimos --users ""
menuentry 'Debian GNU/Linux (recovery mode)' ...  --users ""  {

........
..........
# Entrada de arranque a partición EXAMEN (Windows 7). Solo accesible por el usuario examen.
# Dicho sistema operativo está en el primer disco duro (hd0) y en la primera partición (1)
# Al final la línea (antes de la llave) añadimos --users "examen"
menuentry 'Windows 7 [EXAMEN]' ...  --users "examen"  {
parttool (hd0,1) hidden-
parttool (hd0,2) hidden+
parttool (hd0,3) hidden+
set root=(hd0,1)
chainloader +1
parttool ${root} boot+
boot
}

Habría que hacer lo mismo con el resto de sistemas operativos. Teniendo en cuenta que habría que modificar las particiones que ocultamos (parttool (hd0,2) hidden+) y el parámetro de arranque (set root=(hd0,1))

No puedo añadir ningún enlace a las web donde estuve investigando porque no las recuerdo, ya hace más de un año. Y llevo un tiempo queriendo escribir esta entrada antes de que se me olvidará.

domingo, 19 de febrero de 2012

Algoritmo de ruteo IP

Una duda que suele surgir cuando se empieza a estudiar el enrutamiento IP es la siguiente: "cuando llega un paquete a un router, y este tiene una ruta posible para la dirección de red y también la ruta por defecto, ¿qué criterio se sigue para dedicir que ruta usar (la de la dirección de red o la ruta por defecto)? ¿podría ser la que encuentre primero (tal vez haciendo una comprobación secuencial)?"

Se puede hacer una prueba con alguna herramienta de simulación de redes, por ejemplo NetKit o Packet Tracer, y se comprobará que la ruta por defecto es la última opción. Ahora veréis el por qué.

Buscando en libros he encontrado el "algoritmo de ruteo IP". Como es a nivel IP no depende del tipo de router, o sistema operativo (en caso de un equipo como router). El algoritmo es el siguiente:

1. Extraer dirección IP de destino y obtener el prefijo de red (partiendo de la máscara)
2. ¿Entrega directa? --> Si es afirmativo se entregan datos y FIN
3. Consultar tabla de encaminamiento, ¿existe una ruta especifica de anfitrión (host)? --> Si es afirmativo se entregan datos y FIN
4. Consultar tabla de encaminamiento, ¿existe una ruta especifica para la red de destino? --> Si es afirmativo se entregan datos y FIN
5. Consultar tabla de encaminamiento, ¿existe una ruta por defecto? --> Si es afirmativo se entregan datos y FIN
6. Si llegamos hasta aquí es que se ha producido un ERROR: "Destination host unreachable"

Puede que el punto 3 os llame la atención, el hecho de añadir una ruta especifica para un host, cuando siempre se dice que las tablas de encaminamiento contienen redes destinatarias. Bueno ésto lo explico otro día que ahora no tengo ganas, :-(

REFERENCIA:
  • "Redes globales de información con Internet y TCP/IP: Principios básicos, protocolos y arquitectura". Autor: Douglas E. Comer
¡Saludos!

jueves, 17 de noviembre de 2011

Un poco más de la configuración de red en Linux

Sin entrar en detalle de cómo configurar un interfaz de red desde la línea de comandos, ni tampoco explicar la sintaxis y significado de los campos de los archivos de configuración de red (/etc/network/interfaces, /etc/resolv.conf, /etc/hostname, ...), comentaré algunas triquiñuelas sobre la configuración de la red. Triquiñuelas que en alguna ocasión pueden causarnos quebraderos de cabeza, sobre todo cuando el sistema no responde como esperamos. Al tajo!

La siguiente imagen es un ejemplo del archivo de configuración de red /etc/network/interfaces


Independientemente de cómo esté configurada cada interfaz de red, fijémonos en las líneas que aparecen resaltadas:
  • allow-hotplug   eth0
  • auto   eth1
Primer problema... ¿qué significa “allow-hotplug”? Porque lo más normal es que aparezca “auto”. Podríamos traducirlo por “permitir hotplug”... Pero.. ¿qué narices significa “hotplug”? Hago un copia y pega (http://www.escomposlinux.org/lfs-es/lfs-es-6.1/chapter06/hotplug.html):
El paquete Hotplug contiene guiones que reaccionan a eventos hotplug (conexión de dispositivos en caliente) generados por el núcleo. Dichos eventos corresponden a cada cambio en el estado del núcleo visible en el sistema de ficheros sysfs, por ejemplo, la adición o eliminación de hardware.
Por ejemplo, cuando conectas un USB el núcleo detecta que el dispositivo está conectado y genera un evento hotplug para poder utilizarlo.

Bueno, ahora ya conocemos el significado de “hotplug”. Y en nuestro caso “allow-hotplug eth0” en el archivo de configuración /etc/network/interfaces vendría a decir que podemos conectar y desconectar la tarjeta de red (llamada eth0 por el sistema) en caliente, y que el sistema detectaría dichos cambios. Esto nos puede venir bien si estamos trabajando con Linux instalado en una máquina virtual.

¿Para qué cuento todo ésto? Pues porque ultimamente he tenido problemillas al intentar al jugar con los comandos:
# /etc/init.d/networking restart
# service networking stop
# service networking start

Qué son los indicados para reiniciar la red. Sin embargo puede que no respondan bien pues no generan un evento hotplug, así que en nuestro ejemplo el interfaz eth0 no se levantará. Para evitar tener que reiniciar el sistema podemos usar los comandos ifup o ifdown, para activar y desactivar un interfaz de red.
Para activar un interfaz con ésto debería ser suficiente:
# ifup  
# ifup   eth0

Pero dando un paso adelante tenemos las siguientes posibilidades:
# ifup   -a
  • Activa todos los interfaces definidos con “auto” en /etc/network/interfaces
# ifup  --allow=hotplug eth0
  • Solo activa los interfaces definidos en /etc/network/interfaces con una línea "allow-hotplug". Cuidado! Delante de allow hay dos guiones.
# ifdown   -a
  • Desactiva todos los interfaces de red que están activos
Una opción interesante del comando ifconfig es:
# ifconfig  -a
  • Muestra todos los interfaces de red que están actualmente disponibles, aunque estén desactivados
Links interesantes:

Debian: Cambiar resolución terminal

Si no tenemos instalado el entorno gráfico y queremos cambiar la resolución del terminal podemos hacerlo editando las opciones de Grub2.

Para ver las resoluciones soportadas al arrancar el sistema, desde el menú de Grub pulsamos la tecla 'c' para abrir un terminal de comandos de Grub, y tecleamos 'vbeinfo', dicho comando nos mostrará un listado de las resoluciones soportadas.

A modo de resumen, decir que la estructura de Grub2 nada tiene que ver con el antiguo Grub. El archivo de configuración del antiguo Grub era "menu.lst", el cual editabamos para realizar los cambios oportunos. En Grub2 dicho archivo ha desaparecido y en su lugar tenemos /boot/grub/grub.cfg. Pero este archivo no conviene editarlo directamente, para realizar modificaciones tenemos:
  • Archivo /etc/default/grub que contiene las opciones con las que se generará grub.cfg.
  • Directorio /etc/grub.d que contiene una serie de archivos para configurar las diversas entradas del menu Grub.
Una vez realizadas las modificaciones hay que generar el nuevo archivo grub.cfg, para ello tenemos el comando "update-grub" (o "update-grub2").

Y por último para cambiar la resolución del terminal tenemos la opción GRUB_CMDLINE_LINUX (en el archivo /etc/default/grub). Por ejemplo

GRUB_CMDLINE_LINUX="vga=789"

Dicho valor corresponde a una resolución de 800x600 y 32bpp.


640×480800×6001024×7681280×1024
08 bpp769771773775
16 bpp785788791794
32 bpp786789792795

Y esto es todo!

Link interesante: http://www.esdebian.org/wiki/instalar-grub2-debian

viernes, 23 de septiembre de 2011

Instalación de Debian

Esta será la instalación básica con la que trabajaremos a lo largo del curso. "Instalación básica" por dos razones:
  • La primera porque pretendemos configurar un sistema operativo que actúe como servidor, solo debe tener instalado el software estrictamente necesario, pues no vamos a configurar un entorno de escritorio para un usuario normal.
  • La segunda porque nos servirá como punto de partida para todos los servicios que configuremos: DNS, FTP, correo, Apache, etc... Y cuando estemos perdidos en el laberinto siempre podremos regresar a nuestro sistema base.
Cómo os podéis imaginar dicha “instalación básica” no incluye un gestor gráfico, así que por ahora olvidaos de las amables y dulces ventanitas.
Esta instalación se ha realizado sobre una máquina virtual VMware. La configuración de la máquina virtual creada es la siguiente:

IMPORTANTE. Vamos a realizar la instalación por red partiendo de una imagen "netinst", la cual se puede descargar rápidamente (aproximadamente 200MB). Dicha imagen permite descargar sólo aquellos paquetes de Debian que realmente queramos, pero necesitaremos una conexión a Internet.
Os voy a poner casi todas la pantallas que aparecen durante la instalación, algunas las he suprimido por obvias. Empecemos! Elegimos la primera opción "Install".

A continuación habrá que seleccionar el lenguaje, la ubicación y la distribución del teclado:

A continuación el sistema de instalación intentará configurar la red por DHCP. Y si no tenemos un servidor DHCP en nuestra LAN la configuración de la red fallará.



Al producirse el fallo:



Realizaremos la configuración de la red de forma manual, teniendo en cuenta los parámetros TCP/IP de nuestra LAN:


A continuación el sistema de instalación nos pedirá una contraseña para root (superusuario o administrador). En principio todos pondremos la misma contraseña: asir2
Luego nos pedirá la información (usuario/contraseña) para crear un usuario limitado. Como ya sabemos, un administrador de sistemas no debe conectarse como root al sistema, sino como un usuario limitado, y cuando deba hacer tareas que requieran privilegios de superusuario, cambiará a root para mas tarde volver a ser el usuario limitado.
  • Usuario limitado/contraseña: alumno/alumno
Particionado de discos. Lo primero es elegir la opción manual.

Seleccionamos el disco duro virtual de VMware:

Y empezamos a crear particiones. No me voy a extender aquí porque ésto ya sabéis hacerlo, tan solo deciros que vamos a crear 3 particiones (raíz "/", directorio de usuarios "/home" y area de intercambio "swap").
Para el sistema (punto de montaje /). Fijaos que el sistema de ficheros es ext3.

Para el directorio de usuarios (punto de montaje /home). Fijaos que la opciones de montaje son "defaults". Pues bien, debemos activar la opciones de montaje para gestionar las cuotas.

Activamos la opciones de montaje para cuotas sobre la partición /home.

Os adjunto una imagen con la situación final de las particiones:

A continuación comienza a instalarse el sistema base:

Ahora comienza la configuración del gestor de paquetes:

Y elegimos una réplica de Debian (mirrors o espejos del software de Debian), podemos elegir la primera opción o la réplica de RedIris, las cuales suelen funcionar bastante bien.

En caso de no atravesar ningún proxy...

Ahora se configurará apt y comenzaremos la selección e instalación de programas. Y una pantalla nos informará si queremos participar en una encuesta sobre el uso de paquetes, a lo cual respondemos que NO. En vuesta casa poned lo que queráis, pero aquí en el aula no vamos a generar tráfico innecesario en la red.
Ha llegado el momento de la selección de programas. Como podréis observar podemos seleccionar los programas necesarios para el entorno de escritorio, o para cualquier tipo de servidor (web, DNS, SSH, etc.). Nosotros SOLO vamos a seleccionar las "Utilidades estándar del sistema":

A continuación se instalará el cargador de arranque GRUB:

Y ya hemos terminado la instalación! Ha sido fácil, verdad?

Al arrancar el sistema nos aparecerá la pantalla de conexión, no esperéis el entorno gráfico porque no lo hemos instalado, por ahora no lo necesitamos, :-)
Hala! Ya podéis conectaros y empezar a disfrutar.