UBUNTU-ARRANQUE, PARADA Y NIVELES DE EJECUCIÓN

Fases del Proceso de arranque:

  • Ejecución del gestor de arranque
  • Carga y ejecución del kernel
  • Ejecución del proceso Upstart
    Ejecución de scripts de iniciación (en /etc/rcS.d)
  • Entrada en el runlevel por defecto: ejecución de Scripts en /etc/rcX.d, donde X es el número del runlevel

Gestor arranque

Es la aplicación que se ejecuta durante el arranque del ordenador y que nos permite acceder a diferentes sistemas operativos que podamos tener instalados, los gestores de arranque más conocidos en LINUX son LILO, GRUB

  • El gestor de arranque GRUB
  •  
  • Grub se configura e instala durante el proceso de instalación de UBUNTU
  • En este proceso, debe detectar otros sistemas operativos y permitir que, durante el arranque, el usuario pueda seleccionar el mismo.
  • Directorio de ficheros de configuración de grub: /boot/grub/
  • Fichero principal de configuración: menu.ls

image064

Carga y ejecución del kernel

Tras el gestor de arranque se carga el Kernel en memoria.

Ejecución del proceso Upstart

A continuación,se deben lanzar todos los procesos/servicios necesarios; todo esto que desde siempre había sido una responsabilidad de /sbin/init/ y /etc/inittab, ha quedado sustituido en esta versión por Upstart; así mismo, la configuración de arranque pasa a estar en la carpeta /etc/event.d/.

Sin embargo, la estructura ha quedado un poco mas complicada, debido en parte, con el intento de hacer complatible esta nueva forma de arranque con todo el software disponible. Los directorios implicados seran los siguientes:

/etc/init.d Se trata de algo semejante a un repositorio de scripts de arranque/parada. Sigue igual que antes, y se dispone de un README para ampliar la información.

/etc/event.d En este directorio se situan todos los trabajos a realizar, y que van a ser gestionados por eventos con UPstart. Observad que el inicio y el fin solo son dos eventos mas en este nuevo mundo

Listado de directorio event.d

Y también tenemos que tener en cuenta que cuando escribo estas líneas, todavía no se considera todo esto estable, pero….

Para cada proceso que tengamos que lanzar, deberemos crear un fichero de texto plano (no ha de ser un ejecutable) y situarlo en este directorio.

Para crearlos, es posible utilizar tabuladores y espacios para darles formato ya que todos los blancos son ignorados a menos que estén entre comillas simples o dobles. Los comentarios se inician con # y continúan hasta el fin de línea

 

exec y  script

Todos los ficheros deben tener un párrafo script o  exec. Por medio del mismo, se puede especificar que es lo que se debe lanzar para ese trabajo.

Con exec se indica el path en donde se encuentra el binario a ejecutar, y los posibles argumentos a pasar

Exec /sbin/getty 38400 tty1

Con script facilitamos el código a ejecutar utilizando /bin/sh. La ejecución se realiza con la opción –e por lo que cualquier orden que falle, finaliza inmediatamente el script. El párrafo termina con una línea “end script”

 

script

                # comentario….

                id [ …..]; then

                   …..

                fi

end script

 

script pre-start y post-stop

Adicionalmente, se puede indicar una rutina shell que se ejecute antes de iniciarse (pre-start) o cuando finalice (post-start) el script o el exec principal. Hemos de señalar que no pueden realizar la tarea principal. Estos shells estan pensados para funciones de preparación de entorno o limpieza del mismo, y como todos cualquier fallo en un comando, provocara la finalizacion del script.

Con pre-start de indica el codigo a ejecutar antes del proceso principal

pre-start script

 

# prepare environment

            mkdir -p /var/run/foo

end script

Con post-stop especificamos el codigo a ejecutar cuando el proceso principal finalice o aborte.

 

post-stop script

 

# clean up

            rm -rf /var/run/foo

end script

start on y stop on

El trabajo que acabas de crear, ya esta listo para que el administrador del sistema lo pueda lanzar manualmente, pero supongo que tambien quieres que pueda arrancar y ser parado automáticamente cuando se produzca algun evento.

Los trabajos, pueden encontrarse en uno de los siguientes estados:

Estado Descripción
Stopped El job esta inactivo y no tiene proceso asociado.Cuando llega un evento se comprueba la lista de trabajos pendientes de arrancar y puede ser movido a los estados de Waiting o Starting
Waiting El job es situado en este estado si tiene dependencias. Cuando un job es movido al estado de Running, se comprueba la lista de jobs que se encuentran en este estado, y si coincide, se mueve a Starting. Cuando ocurre un evento, se comprueba la lista de eventos de stop para este estado, y si coincide, se mueve al estado de Stopped
Starting Se lanza el script de arranque, y si finaliza con éxito, (o no tiene script de arranque), el job es movido al estado de Running, si el script falla, se mueve a Stopping. Cuando ocurre un evento, se comprueba la lista de eventos de stop, y si coincide, se mueve el job a Stopping
Running El proceso asociado al job, esta funcionando. Para los servicios, cuando el proceso finaliza, se mueve automáticamente a la fase de Restarting. Para las tareas, cuando el proceso finaliza, se mueve a Stopping. Cuando llega un evento, se comprueba la lista de eventos de stop para estos procesos, y si coincide, se mueve a Stopping
Restarting Se lanza el script de rearranque, y si finaliza con éxito, (o no tiene script de rearranque), el job es movido al estado de Running, si el script falla, se mueve a Stopping. Cuando ocurre un evento, se comprueba la lista de eventos de stop, y si coincide, se mueve el job a Stopping

 

Todo esto genera las siguientes transiciones:

Waiting a Starting y Stopped a Starting: ejecuta el script correspondiente a Start.

Starting a Running y Restarting a Running: genera el proceso asociado

Running a Restarting: ejecuta el script correspondiente a Restart

Starting a Stopping, Running a Stopping y Restarting a Stopping: Envia señales a los procesos que estan corriendo para que se detengan, y ejecuta el script de stop.

Alguno de os eventos que podemos utilizar:

Evento Descripción
startup Lanzado por Upstart cuando el ordenador inicia, aun sin disponer de acceso a disco en grabacion ni redEj: Start on startup
runlevel X donde X es un numero de 0 a 6 o la letra S; estos script se ejecutaran a la vez que el init del nivel correspondienteEj.:start on runlevel 3
started job se lanza cuando se inicie jobEj. Start on started tty1
stopped job se lanza cuando se detenga jobEj.: Start on stopped tty1
Shutdown El sistema operativo esta cerrandoEj.: Stop on Shutdown
Default-route up/down Lanzado por cambios en la conexión de redEj.: Start when default-route is upStop when default-route is down
filesystem-checked Cuando el hard detecta la inserción, y finaliza la comprobación:
writable-filesystem Cuando el sistema autoriza la escritura en disco
block-device-added Lanzado por udev cada vez que se detecta un dispositivo de bloques
fhs-filesystem Lanzado pur udev cuando todos los sistemas de ficheros(FHS) se han montado correctamente
network-interface-added Lanzado por udev cuando detecta una nueva tarjeta de red
network-interface-up Cuando la interface consigue dirección IP

 

/etc/rc[0-6,S].d Es estas carpetas se dejan los enlaces a los scripts (que se encuentran en /etc/init.d) que se deben ejecutar según el nivel de ejecución.

Para controlar el orden en que se van a ejecutar los scripts debemos controlar los nombres. Todos los symlinks se han de llamar SNN o KNN y primero se ejecutan los K en orden numérico y luego los S también en orden numérico.


Los runlevels

El runlevel (del inglés, nivel de ejecución) es cada uno de los estados en que se encuentra el sistema. Existen 7 niveles de ejecución en total:

Nivel de ejecución 0: Apagado.
Nivel de ejecución 1: Monousuario (sólo usuario root; no es necesaria la contraseña). Se suele usar para analizar y reparar problemas.
Nivel de ejecución 2: Multiusuario sin soporte de red.
Nivel de ejecución 3: Multiusuario con soporte de red.
Nivel de ejecución 4: Como el runlevel 3, pero no se suele usar
Nivel de ejecución 5: Multiusuario en modo gráfico (X Windows).
Nivel de ejecución 6: Reinicio.

Este sistema de niveles de ejecución lo proporciona el sistema de arranque por defecto de las distribuciones GNU/Linux (init).

Cambiar de runlevel en ejecución

Existe una utilidad para línea de comandos que permite cambiar de un nivel de ejecución a otro. Esta es la herramienta init. Para cambiar de nivel de ejecución sólo hay que ejecutar init seguido del número del runleve. Por ejemplo:

init 0: Cambia al runlevel 0 (se apaga el sistema, equivalente al comando halt).

init 2: Cambia al runlevel 2.

init 6: Cambia al runlevel 6 (reinicia el sistema, equivalente al comando reboot).

 

Modificar el runlevel por defecto

Por defecto, el sistema suele arrancar en el nivel de ejecución 5 (modo gráfico). Si se quisiera modificar este comportamiento, habría que editar el fichero /etc/inittab.

Atención: si has instalado una de las ultimas versiones de Ubuntu, no encontraras este fichero, pero lo puedes crear y en su interior modificas o creas la siguiente linea:

 id:N:initdefault:

Donde N es el runlevel por defecto.

 

 

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Linux y etiquetada , , , , , , . Guarda el enlace permanente.

Deja un comentario