![]() |
Administración de Sistemas Operativos en Red
|
| Práctica 1 | |
| Introducción | |
| 23/02/2004 | Inicio y parada. Niveles de arranque |
ObjetivoEn esta práctica se pretende mostrar el proceso de inicio y parada de un equipo con el sistema operativo Linux.
|
|
Conocimientos previosEn la bibliografía básica se puede obtener la "Guía de Referencia de Red Hat" que cubre y amplía dicha información enfocándola al entorno Linux. Otros documentos menos elaborados pero no por ello menos valiosos son los distintos HOWTOs que podemos encontrar en la documentación existente en las diversas distribuciones de Linux. Algunos de los más interesantes son: Para configurar los equipos se va a utilizar la distribución Knoppix modificada para las prácticas de la asignatura. .Esta versión de Linux se lee de CD, creando un disco RAM donde se guardan determinados ficheros modificables en tiempo de ejecución. |
|
Arranque y parada del sistemaUna de las principales características de los sistemas operativos unix es la posibilidad de configurar "a medida" el arranque y parada del equipo. Con la presente práctica se pretende describir, por una parte, el proceso de arranque y parada de los distintos sistemas operativos y, por otra, mostrar qué es lo que hay que hacer para que un sistema esté bien configurado tras su arranque y para que realice, en todo momento, una parada adecuada.
Inicio del sistema Evidentemente, el arranque de un sistema comienza con la alimentación eléctrica del mismo. Tras esto, se ejecutan una serie de procedimientos de inicialización y diversas acciones hasta llegar al punto final de permitir la entrada de un usuario. Éste es un proceso de especial vulnerabilidad del sistema ya que cualquier error en la configuración de arranque, en el hardware o daños en el sistema de archivos puede provocar que no se cargue el sistema. Además, es la primera tarea que debe realizar un administrador cuando se adquiere una máquina nueva. Cuando un ordenador se inicia, en primer lugar, se ejecutan los programas contenidos en la ROM de la máquina (EEPROM o cualquier tipo de memoria no volátil). Estos programas (BIOS en x86) comprueban el estado del hardware, determinan su configuración y pasan el control al "boot loader" o "bootstrap" que generalmente está situado en una zona reservada del disco (en el Master Boot Record o en el sector 0 de la partición de arranque). Este procedimiento depende de la máquina y del fabricante y su finalidad es ejecutar un gestor de arranque (explicados más adelante) que permitirá seleccionar la configuración de arranque apropiada. Todos los sistemas Unix, tanto los basados en PC bajo arquitectura Intel x86 (Linux, Solaris, ...), como en sistemas propietarios (AIX de IBM, IRIX de Silincon Graphics, ...), tras la puesta en marcha del sistema y la ejecución de los procedimientos de inicialización, se carga el núcleo en memoria, se montan los distintos sistemas de ficheros y se ejecuta el proceso INIT, además de una serie de tareas de inicialización. Existen 2 modos de arranque: manual o automático. En el modo automático, el sistema ejecuta, por sí mismo, todo el proceso de arranque, mientras que en el modo manual, el sistema sigue un procedimiento automático punto a punto, dejando el control al operador en la mayoría de los guiones que deben ser ejecutados. En este proceso, el computador está en modo monousuario. En el arranque de un sistema Unix se puede hablar de 6 pasos:
Ejecución del núcleo El núcleo es un programa situado en el raíz del sistema de ficheros y su nombre suele ser /vmunix o /unix (/vmlinux en el caso del Linux). La mayoría de los sistemas implementan la carga del núcleo en dos fases. En la primera, se carga en la memoria un pequeño programa de arranque desde un disco duro o disquete de arranque y será éste el que se encargue de ejecutar el núcleo. Esta tarea no es dependiente del sistema operativo. Gestores de arranque Dependiendo de la arquitectura hardware que tengamos nos podemos encontrar con distintos gestores de arranque: Lilo/Grub para x86, aboot para Alpha, ... En este apartado vamos a centrarnos en Lilo y Grub. Lilo LILO es un gestor de arranque que permite seleccionar entre múltiples configuraciones de arranque e, incluso, entre diferentes sistemas operativos. Se instala con el comando lilo y su configuración reside en el fichero /etc/lilo.conf. Para cambiar el arranque se debe modificar el fichero /etc/lilo.conf, realizar los cambios y ejecutar lilo para que se actualice el arranque. Configurando LILO Cada posible escenario tiene una etiqueta. La primera etiqueta que aparece es la que se considera arranque por defecto. Los parámetros genéricos que se le deben introducir a LILO son:
Grub Al igual que LILO, permite la selección de un arranque entre dintitas configuraciones previstas. Las características más importantes que presenta GRUB son:
Para más información sobre GRUB ver el manual de referencia de la Red Hat. Detección y configuración del hardware Una de las tareas asignadas al núcleo es el chequeo y configuración del hardware presente (el que se le ha dicho cuando se crea el núcleo que debe existir). La mayoría de la información que se le suministra al núcleo del SO en su configuración está mal especificada por lo que intenta determinar la información necesaria probando la comunicación con los dispositivos y preguntando la información a los drivers apropiados. Normalmente, los drivers de los dispositivos
que no se encuentran o no responden se deshabilitan. Si un dispositivo
se conecta más tarde al sistema, no será accesible hasta
que la máquina se reinicie, aunque existen servidores que reconocen
hardware nuevo en caliente sin necesidad de reiniciarlos. Procesos del sistema Para que el proceso de inicialización se complete, el núcleo crea lo que se llaman procesos espontáneos (se llaman así porque el proceso no es creado usando una llamada a fork) y ejecuta el proceso "init". De todos los procesos que se ejecuta el kernel, sólo INIT se puede considerar como un proceso realmente. Al resto se les etiqueta como tales por motivos de arquitectura y control de tiempo. A estos se les llama procesos espontáneos. Cuando se ha terminado de lanzar estos procesos, termina el trabajo del núcleo (dentro del proceso de arranque) y entra a ejecutar acciones el proceso INIT. Las funciones de init son: inicializar cualquier dispositivo, controlar determinados procesos y de lanzar los scripts de inicialización que configuran adecuadamente el sistema (los llamados rc). Los procesos a lanzar dependerán de lo que en el mundo Unix se llama nivel de ejecución. Por nivel de ejecución se entiende a una configuración del sistema en la que se ejecutan un grupo determinado de procesos. Los procesos que se ejecutan en cada nivel de ejecución se indican en el fichero /etc/inittab. Éste está formado por líneas divididas en campos separados por el carácter ':'. El formato de las líneas del fichero /etc/inittab es: Nombre:Nivel_De_Ejecución:Accion:Proceso Nombre: Etiqueta de 1 ó 2 caracteres que identifican de forma unívoca una entrada del fichero /etc/inittab
Accion: indica cómo se va a comportar init tras lanzar el proceso asociado al nivel. Los valores que puede tomar este campo son
Proceso:indica el programa que se ejecutará. Debe venir indicado con el path completo y con los argumentos necesarios. El fichero /etc/inittab se lee (por parte del proceso init) cada vez que ocurre una de estas circunstancias:
El proceso de arranque finaliza con la ejecución de los scripts de inicialización (lanzando los asociados al nivel de ejecución indicado para arrancar) y la petición de "login" para la entrada al sistema de un usuario Si se entra en modo monousuario, init simplemente proporciona un shell (bash) con privilegios de root y espera la finalización (mediante la secuencia de teclas [<ctrl>+D] o la ejecución del comando exit). El usuario puede ejecutar comandos, tiene montado sólo el raíz (y en algunos sistemas también el /usr), no dispone de la ejecución de los demonios (algunos necesitan procesos del servidor para su correcto funcionamiento). Cuando se entra en este modo, el usuario debe ejecutar manualmente el fsck.
Guiones de inicialización Dependiendo de la distribución, se tiene que el sistema Linux seguirá las recomendaciones BSD o System V. La distribución Linux Debian sigue fielmente el sistema de arranque de scripts de inicialización de system V. Dispone de un directorio /etc/init.d y otros /etc/rc-nivel-.d donde se sitúan enlaces a los scripts del directorio /etc/init.d. El nombre de los enlaces empieza por S para los guiones que se deben ejecutar con el argumento "start" o K para los que deben ejecutarse con el argumento "stop". Algunos scripts que se encuentran en el directorio /etc/init.d de una máquina Debian son:
Para la distribución de Linux Red Hat, se dispone de un sistema de arraque híbrido entre BSD y System V). INIT invoca el guión /etc/rc.d/rc pasándole como argumento el nivel de ejecución adecuado y éste es el que se encarga de ejecutar los guiones del nivel adecuado. Para gestionar los enlaces de los directorios de nivel de ejecución dispone del comando chkconfig. También incluye el guión rc.local que será el último guión a ejecutarse dentro del proceso de arranque. La mayoría de los procesos de arranque tienen su información de configuración en el directorio /etc/sysconfig.
Parada del sistema La llamada a /sbin/shutdown de un sistema linux tiene la siguiente sintaxis: /sbin/shutdown [-t sec] [flags] time [msj de aviso]
|
|
Enunciado de la prácticaLa práctica se va a realizar con la distribución Knopppix de linux, basada en Debian y ejecutable desde CD. Lo primero que debemos hacer es insertar el CD de la distribución en el lector del equipo y arrancar el sistema. Tras ello, aparecerá la etiqueta "boot: " del gestor de arranque de Knoppix (Lilo) indicándonos que elijamos el tipo de arranque deseado. Si pulsamos F2, vemos los arranques disponibles:
Con la primera opción arrancamos el sistema con la o las opciones deseadas. Con el segundo, el arranque es interactivo donde se pregunta al operador qué debe hacer en cada paso del arranque (drivers a instalar, ...) Para la práctica, se debe iniciar el sistema con la opción "knoppix lang=es", para que reconozca el teclado con la configuración adecuada. Tras elegir la opción de arranque, comienza el proceso de inicio del sistema con la carga del núcleo, la creación del ramdisk y los directorios y enlaces que deben existir en el disco RAM, el reconocimiento del hardware y la configuración de los dispositivos y, por último, la entrada en el nivel de arranque por defecto y la ejecución de los guiones previstos en este arranque. Al igual que ocurre con cualquier otra distribución de Linux, podemos indicar, en el momento del inicio del sistema cuando el gestor de arranque pide las opciones de inicio, a qué nivel de ejecución queremos ir. Así, si en vez de introducir el texto indicado, se introdujera "knoppix lang=es single", entraríamos al nivel 1 (monousuario), con "knoppix lang=es 2" entraríamos al nivel 2 y, así, con cualquier otro nivel de arranque. Para ver cómo se puede controlar la entrada de argumentos en el arranque, consultar la documentación del gestor de arranque apropiado (Howto de lilo) Entrad en modo nonousuario (knoppix lang=es single) y en modo multiusuario, con el nivel por defecto definido en el knoppix (knoppix lang=es) ¿Qué nucleo está se está ejecutando con estos arranques? ¿Qué hardware, tipo y función, reconoce el knoppix? ¿Cuál es el nivel por defecto en el que entramos con la segunda opción indicada? Los distintos niveles de arranque en un sistema Linux, tienen asociado un directorio en el que se encuentran enlaces a los diferentes guiones que se deben ejecutar. ¿Qué guiones de inicialización se está ejecutando cuando se entra en el nivel 1 (single)? ¿Y en el nivel por defecto? En una distribución de linux con el sistema de archivos escribible, en el fichero /var/log/dmesg se guarda toda la información de arranque que aparece en el terminal, no siendo el caso de knoppix en el que este fichero está vacío. Para cambiar de un nivel de ejecución a otro, no hace falta reiniciar el PC e indicarle al gestor de arranque el nivel deseado, sino que se puede hacer uso del comando "telinit" o "init" para ello (ver "man telinit" o "man init" para obtener información sobre estos comandos) La personalización del arranque según las necesidades de un administrador, se puede realizar de dos formas diferentes:
Modificad el fichero /etc/inittab para que ejecute el programa login, en modo respawn, sobre el terminal /dev/tty4 en el nivel 4 de arranque. Los baudios con los que se debe lanzar el programa /sbin/getty son 38400. ¿Qué ocurre si en vez de poner el modo respawn ponemos el modo "wait"? Realizad las acciones necesarias para ejecutar el guión que inicia el servidor Apache cuando se entra en el nivel 4 Realizad las acciones necesarias para asegurarnos que el servidor Apache no está en ejecución cuando entramos en el nivel 2. Para finalizar las prácticas y, apagar el PC, el equipo debe ir al estado 0. Existen diversos comandos que realizan esta labor (halt, shutdown, telinit 0, init 0). ¿Qué comando ejecutarías, y con qué argumentos, para apagar el PC dentro de 30 segundos e informar a los usuarios del mismo con el mensaje "Se va a proceder, en 30 segundos, al apagado del equipo. Le ruego finalice su sesión de trabajo" ? ¿Qué diferencias encuentras en la ejecución de los distintos comandos enumerados en el párrafo anterior? |
|