Como funcionan los runlevel en Debian

Tras instalar mucho software y como último ejemplo las vmwaretools vamos a cambiar de tercio y vamos a revisar los run levels. Tenemos diferentes niveles de ejecución como son los siguientes:

· Runlevel 0 à Maquina apagada

· Runlevel 1 à Monousuario sin servicios de red ( no sin red)

· Runlevel 2 à Multiusuario sin servicios de red ( no sin red)

· Runlevel 3 à Maquina totalmente funcional en modo consola (full equipe)

· Runlevel 4 à Reservado

· Runlevel 5 à Maquina totalmente funcional (3) + Xwindows (full equipe)

· Runlevel 6 à Reinicio

En entornos gráficos el runlevel habitual suele ser el 5 mientras que en modo consola es el runlevel 3. Esta serie de runlevel es el standard, pero debían es diferente ya que el runlevel por defecto es el 2 que se corresponde con el 5. Los runlevel 3,4 y 5 están reservados mientras que el 0 y el 6 son los mismos que en el standard, también el nivel 1 es monousuario.

Disponemos de 2 comandos fundamentales para trabajar con los runlevel como son:

· Runlevel à Nos indica en qué nivel estamos y en el anterior estado en el que estuvimos

· Init à nos permite pasar de un nivel a otro

Para utilizar estas herramientas tenemos que tener derechos de administrador.

Nuestra práctica consiste en crear un fichero de inicio para apache ya que este no nos lo crea en el momento de la instalación. Además deberemos de generar un runlevel que inicie en el momento del arranque de la maquina el servidor de apache y además que no tengamos entorno grafico. Todo esto lo realizaremos con una maquina debían.

Instalando Apache

Nuestra maquina no tiene instalado apache así que lo instalaremos en primer lugar.

Casualmente disponemos del servidor apache en un tarball en nuestra llave USB. Introducimos la llave USB en nuestro equipo y su propia inteligencia directamente monta la llave. Observaremos esto con el comando mount.

clip_image001clip_image003

Realizamos ahora un ls de la carpeta /media/backup, lugar en el que se ha montado el USB, como podemos ver disponemos de nuestro tar ball de apache.

clip_image004

Ahora tendremos que descomprimirlo en nuestra home para ello utilizaremos el comando:

Tar xvzjf /media/backup/httpd-2.2.14.tar.bz2clip_image005clip_image007

Como podemos ver en la imagen superior se descomprime perfectamente. Comprobaremos si se ha creado correctamente en nuestra home, para ello realizaremos un listado de nuestra home.

Si realizamos un ls, como en la imagen inferior deberíamos de ver una carpeta httpd-2.2.14

clip_image008

Nos meteremos dentro de la carpeta escribiendo CD httpd .2.14 en nuestra Shell, una vez dentro realizaremos un listado del directorio para ver si tenemos los ficheros para realizar la instalación como son ./configure y makefile

clip_image009

clip_image010clip_image012

Parece que nuestro directorio de instalación de apache está en perfecto estado para ser instalado.

Antes de realizar la instalación de apache instalaremos las build essential, ya que de esta manera nos evitaremos que después tener problemas en tiempo de instalación.

Para ello, en primer lugar, buscaremos las buil-essential. Para ello buscaremos el paquete en nuestro repositorio, teclearemos en nuestra Shell aptitude search buil-essential

clip_image013

Si pulsamos intro debería de aparecer si tenemos el paquete disponible para instalar, si lo tenemos instalado o si ni siquiera lo encontramos.

clip_image015

Como podemos ver lo tenemos disponible como paquete porque al a izquierda de build essential hay una p. Vamos a instalar el paquete con la orden aptitude install build-essential como podemos observar en la imagen inferior.

clip_image016clip_image018

Como se observa, si no tenemos privilegios no podremos instalar nada, así que tendremos que validarnos como root, tal y como podemos ver en la imagen inferior.

clip_image019

Una vez validados como root (recordemos que debe de aparecer una # al final del prompt) teclearemos en la Shell aptitude install build-essential

clip_image020clip_image022
Como podemos ver se nos van a instalar una serie de paquetes, como podemos observar se van a instalar 13 nuevos. Nos pide si queremos continuar y le diremos que sí.clip_image024

Una vez que ya tenemos instaladas las build-essential. Fijémonos que estamos en el directorio que se nos ha creado de apache. Escribiremos ./configure para realizar las primeras comprobaciones del sistema antes de realizar la instalación.

clip_image025

clip_image026

Como podemos observar todo ha ido perfectamente. Es hora de realizar make. Para ello tendremos que escribir make en el terminal, con esta orden se compila y linka lo necesario para realizar la instalación de apache. En las imágenes inferiores veremos el procesoclip_image027clip_image029clip_image030

Una vez que ha terminado este comando, teclearemos make install para terminar la instalación de apache. A continuación veremos las imágenes que hacen referencia al comando make install.
clip_image031clip_image032clip_image033

Ya ha terminado la instalación de apache. Con anterioridad realizamos esta misma practica y sabemos que el script de arranque se encuentra en la ruta /usr/local/apache2/bin/apachectl, al cual deberemos de decirle, start,stop, restart… para que haga lo que nosotros queramos. En este caso escribiremos /usr/local/apache2/bin/apachectl start para arrancar el servicio y poder comprobar así que funciona perfectamente.clip_image034

Una vez que tenemos el servicio levantando, probaremos si funciona nuestro servidor. Para ello teclearemos localhost en nuestro navegador preferido y debería de aparecernos la pagina web típica de apache.

En esta imagen vemos que estamos escribiendo localhost en la barra de direcciones.

clip_image035

En la imagen inferior y tras pulsar intro después de teclear localhost, vemos que nuestro servidor apache funciona perfectamente.

clip_image036

Creando script arranque

Una vez que hemos comprobado que funciona perfectamente nos vamos a ir al directorio /etc/init.d, en este lugar se encuentra todos los scripts de arranque del sistema. Para llegar hasta este directorio tendremos que teclear en la Shell,

Cd /etc/init.d

clip_image037

Ahora realizaremos un ls porque queremos comprobar si tenemos algún script de arranque de apache en este directorio, buscamos algo parecido a apache,apache2 o httpd…

clip_image039

Como podemos observar parece que no hay nada parecido, así que podemos llegar a la conclusión que el instalador de apache no ha creado ningún script de arranque en este directorio. Nos tocara crear uno por nuestra cuenta.

Para ello teclearemos nano apache en nuestra Shell, tenemos que tener en cuenta que estamos dentro del directorio /etc/init.d

clip_image040

Una vez dentro del editor de texto vamos a ir creando nuestro script de arranque. Iremos viendo párrafo a párrafo el texto que introducimos.

En la imagen inferior vemos como estamos creando el principio del script, donde decimos que Shell se utiliza para el script y más información.

Escribiremos lo siguiente en nuestro editor

#/bin/bash à Shell que se utiliza para ejecutar el script
# Este es un script de arranque para apache realizado por Iván Uterga

#

# Empezamos !!!

clip_image041

Ahora vamos a utilizar un case para definir los diferentes estados por los que puede pasar el script.

En nuestro editor de texto, a continuación escribiremos lo siguiente

Case $1 in

Start)

Echo “iniciando apache…”

Sleep 1

/usr/local/apache2/bin/apachectl start && echo “Iniciado!!!” || echo “tenemos problemas con el inicio”

Sleep 1

;;

Con este párrafo indicamos que si el primer parámetro que le pasemos al script es start, escriba iniciando apache…, esperamos 1 segundo y arrancamos el script original de apache en la ruta que hemos visto con anterioridad, si funciona ok escribimos iniciado si no en pantalla aparecerá tenemos problemas con el inicio. En la imagen inferior podemos observar la imagen del script.

clip_image043

Continuamos nuestro script escribiendo en este párrafo lo siguiente.

Stop)

Echo “Parando apache…”

Sleep 1

/usr/local/apache2/bin/apachectl stop && echo “Parado!!!”

Sleep 1

;;

En este párrafo indicamos que si el primer parámetro es stop, se escriba en pantalla parando apache, que espere un segundo y que pare el script original y muestro parado por pantalla.

Podemos observar en la imagen inferior este mismo trozo de código.

clip_image044

El penúltimo párrafo de nuestro script es restart, sirve para reiniciar el servicio de apache sin tener que darle dos órdenes.

A continuación vemos como se logra realizar este párrafo.

Restart)

$0 stop

$0 start

;;

Como podemos observar estamos indicando en este párrafo que si pasamos como parámetro restart, el script pare y se vuelva a iniciar. Tenemos una imagen que nos dice como lo hemos escrito realmente

clip_image045

Ahora haremos la función status que consiste en que se nos muestre que está ocurriendo con apache.

Para ello escribiremos lo siguiente

Status)

Lsof –o | grep http
;;

esac

En la imagen inferior podemos ver una imagen del párrafo de status

clip_image046
Podemos apreciar que hemos escrito además la palabra esac, que indica el final del case. Esto quiere decir que hemos terminado nuestro script y es hora de guardarlo y probarlo.

Veremos si se nos ha creado el script listando el directorio con un ls, como podemos ver en la imagen inferior parece que si lo ha hecho perfectamente.

clip_image047

Ahora para probar que funciona bien nos vamos a ir a nuestra home, con el siguiente comando.

Cd /home/ivan

clip_image048

Además vamos a probar si funciona correctamente el script que acabamos de crear. Para ello escribiremos /etc/init.d/apache stop para parar apache, recordamos que lo teníamos arrancado para probar si funciona.

clip_image049clip_image050

Parece que ha funcionado de manera correcta el párrafo stop del case que acabamos de crear.

Ahora levantaremos el servicio escribiendo en la Shell /etc/init.d/apache start

Como podemos comprobar en las imágenes inferiores funciona perfectamente ya que en caso contrario el script nos hubiese dado un error.

clip_image051clip_image052

Ahora vamos a probar el restart, debería de aparecernos en pantalla parando.. primero y después iniciando al escribir /etc/init.d/apache restart, veámoslo…clip_image054clip_image055

Parece que funciona perfectamente…

Por último comprobaremos status escribiendo en la Shell /etc/init.d/apache status.

clip_image056

Si pulsamos intro debería de aparecernos todo lo relacionado con nuestro servidor apache

clip_image058

Parece que funciona muy bien nuestro script.

Modificando el Runlevel

Si recordamos un poco, en nuestra practica tenemos que realizar un runlevel, el 4 por ejemplo que en debían está reservado, que haga lo mismo que el 2 pero que no tenga entorno grafico y que arranque el servidor apache en el inicio. Nosotros sabemos que los runlevel están en /etc/rcx.d siendo x el número del level, tenemos de 0 a 6. Sabiendo esto lo primero que vamos a hacer va a ser renombrar el fichero rc4.d porque este no queremos modificarlo. Para ello tendremos que escribir en nuestra Shell lo siguiente:

Mv /etc/rc4.d /etc/rc4.d.old

En la imagen inferior podemos comprobar cómo ejecutamos este comando.

clip_image002

Si ahora realizamos un ls del directorio /etc con el comando ls deberíamos de ver todos los runlevel menos el 4 ya que lo hemos renombrado, veámoslo en las imágenes inferiores.

clip_image003[4]

clip_image004[4]

Ahora copiaremos el runlevel 2 y le diremos que se llame como el runlevel 4, es decir haremos un cp de rc2.d a rc4.d

Para realizar esta acción escribiremos en nuestra Shell la siguiente orden,

Cp –R –f /etc/rc2.d /etc/rc4.d

De esta manera le estamos diciendo que copie todo el directorio rc2.d y que fuerce a copiarlo si hay algún problema. Una vez ejecutado volveremos a realizar la misma operación y esta vez sí que vemos que aparecen todos los runlevels, incluido el cuatro

clip_image005[4]clip_image007[4]

clip_image009[4]

Una vez que ya disponemos de todos los runlevel que nosotros queremos es hora de ver su contenido. Para ello ejecutaremos la orden cd /etc/rc4.d en nuestra Shell y pulsaremos intro

clip_image010[4]

Una vez que ya estamos situados en el directorio /etc/rc4.d vamos a listar su contenido.

Teclearemos en nuestra terminal ls –l – color para que sea más fácil observar lo que hay en el interior.

Como podemos ver en la imagen inferior, vemos en azul claro enlaces simbólicos que apuntan a los scripts de arranque alojado en /etc/init.d. Podemos ver que los enlacen simbólicos tienen una nomenclatura determinada. Los que empiezan por una S son los que se ejecutan al entrar en un runleven, mientras que si tuviese una K al principio se ejecutarían al salir del runlevel. Además tienen un número de 2 cifras mediante el cual se establece quien se arranca en primer lugar.

clip_image011clip_image013[4]

A nosotros nos interesa tener un runlevel como el 2 pero en el cual se arranque de manera automática el servidor web apache y además que no tengamos entorno grafico. Realizaremos estas acciones de manera consecutiva, primero haremos que funcione una y después nos meteremos con otra.

En primer lugar queremos que en este nivel se arranque de manera automática apache y para conseguir esta acción tendremos que crear un enlace simbólico dentro de esta carpeta que apunte al script que hemos creado anteriormente.

En nuestra Shell, escribiremos ln –s /etc/init.d/apache S66apache.

Escribimos el numero 66 porque queremos y no está ocupado, si nos fijamos ponemos una S al principio del nombre ya que queremos que cuando se entre a este runlevel se ejecute apache y escribimos apache a modo de información. En las imágenes inferiores vemos como ejecutamos estos comandos.

clip_image015[4]clip_image017

Comprobaremos mediante un ls –l – -color que hemos creado bien el enlace simbólico

clip_image019[4]

Ahora debería de funcionarnos correctamente este runlevel, debería de arrancar en modo grafico y además arrancar el servidor apache. Si recordamos la última vez que usamos apache al comprobar nuestro script lo dejamos arrancado, así que lo pararemos usando de nuevo nuestro script, como podemos comprobar en las imágenes inferiores

clip_image020[4]clip_image021

Tras parar el servidor apache y antes de reiniciar el equipo nos meteremos en /etc/inittab para editarlo, para ello teclearemos nano /etc/inittab

clip_image022[4]

clip_image023

Una vez dentro del fichero de configuración de inicio modificaremos la línea que vemos en la imagen superior, por defecto en vez de un 4 aparece un 2, tendremos que cambiarlo y guardaremos el fichero.

A continuación escribiremos init 6 y la maquina se reiniciara.

clip_image024[4]

Al arranca el sistema, iremos a la web como hicimos anteriormente, escribiremos localhost en la barra de direcciones y pulsaremos intro, como podemos ver en la imagen funciona perfectamente.

clip_image025[4]

Nos validaremos como root y escribiremos runlevel para ver si efectivamente estamos en el runlevel 4 tal y como le hemos indicado.

clip_image026[4]

clip_image027[4]clip_image028

Como podemos observar tenemos razón y se ha arrancado en el nivel 4 desde el inicio.

Ahora comprobaremos el estado del servidor, debería de aparecer cosas si estuviese corriendo.

Escribiremos /etc/init.d/apache status

clip_image030[4]

Como podemos observar en la imagen inferior, estamos en lo cierto y el servidor está funcionando ok

clip_image032[4]

Ahora nos volveremos a pasar al runlevel 2 y para ello escribiremos init 2, teóricamente no deberíamos de notar diferencia. Para ver en que runlevel estamos escribiremos runlevel en la Shell, como podemos comprobaras abajo, antes estábamos en el nivel 4 y ahora en el 2.

clip_image033[4]clip_image034[4]clip_image035[4]

Volveremos de nuevo al directorio /etc/rc4.d mediante cd /etc/rc4.d y listaremos el directorio con las opciones –l –color para que nos muestre de una manera más grafica los enlaces simbólicos

clip_image036[4]clip_image037[4]

Si nos fijamos en la captura de pantalla, vemos que hay un script que apunta a gdm (genome desktop manager) que se encarga del entorno grafico

clip_image039[4]
Borraremos la línea que hace referencia a gdm mediante rm S30gdm y listaremos el contenido de nuevo para ver que efectivamente ha desaparecido.
clip_image040[4]clip_image041[4]clip_image043[4]

Ahora este runlevel 4 debería de iniciar apache en el arranque y darnos login en modo consola

Reiniciaremos el sistema con init 6

clip_image044[4]

En las imágenes inferiores vemos al sistema arrancar, podemos fijarnos que en una de las líneas pone INIT: Entering runlevel:4

clip_image045[4]

En la imagen inferior vemos como se arranca el servidor apache.clip_image046[4]

A continuación observamos cómo se nos muestra la pantalla de login, introducimos usuario y contraseña y nos da el prompt, parece que vamos por muy buen camino y ya hemos cumplido nuestra práctica

clip_image047[4]clip_image049[4]clip_image050[4]

El sistema ha arrancado perfectamente, comprobaremos ahora si el servidor está corriendo viendo su estado a través del script que hemos realizado.

Escribiremos en la Shell,

/etc/init.d/apache status

clip_image051[4]clip_image053

Podemos ve que esta funcionado perfectamente, para ver que realmente está funcionando volveremos a arrancarlo, como podemos ver en la imagen inferior se nos da un mensaje porque ya se está ejecutando.

clip_image054[4]

Por último comprobaremos que el paso al init 2 se hace correctamente, así que teclearemos init 2 en la Shell como podemos ver en la imagen inferior y tras un momento se nos mostrara la pantalla de login en modo grafico.

clip_image055[4]clip_image056[4]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload the CAPTCHA.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.