operativo se comporte por ejemplo de forma monousuario, es decir, que no ten-
... cución 0 es el de apagado, es decir, si vemos que nuestro equipo está en ...
Scripts de arranque. Pablo Sanz Mercado.
1
1.
Configuraci´ on y comandos b´ asicos.
Los niveles de ejecuci´on en Linux son las diferentes formas en las que podemos encontrar un sistema operativo Linux. Cuando arrancamos un sistema Linux, tenemos la posibilidad de que el sistema operativo se comporte por ejemplo de forma monousuario, es decir, que no tengamos que introducir ni siquiera la contrase˜ na del super usuario ya que arranca directamente en esta cuenta, como pasaba con los sistemas opertivos DOS o Windows95/98/me. Otra forma que podemos tener de arrancar Linux es que permita que m´ ultiples usuarios puedan conectarse a nuestra m´aquina, y que arranque un entorno gr´afico en el cual pueda trabajar de forma muy agradable la persona que se siente delante de este equipo. Niveles de ejecuci´on tenemos varios, es m´as, podremos incluso crear nuestro propio nivel de ejecuci´on, totalmente personalizado. Por tanto esta forma de trabajar aumenta la versatilidad que tiene el sistema operativo Linux. Al ser los niveles de ejecuci´on totalmente configurables, es posible que al trabajar en diferentes versiones de Linux veamos diferencias significativas. En la mayor´ıa de las distribuciones de Linux vamos a tener que el nivel de ejecuci´on 0 es el de apagado, es decir, si vemos que nuestro equipo est´a en este nivel de ejecuci´on, inmediatamente tendremos que darnos cuenta de que est´a produci´endose el apagado del mismo. Otro nivel de ejecuci´on que suele ser el mismo en todas las distribuciones es el n´ umero 6, que es el nivel de ejecuci´on de reinicio, es decir, cuando nuestra m´aquina pasa a estado de ejecuci´on 6 realmente est´a reinici´andose. Llegados a este punto nos damos perfecta cuenta de que un nivel de ejecuci´on no es una forma de arrancar el sistema operativo, sino un estado del mismo. En muchas distribuciones el nivel de ejecuci´on n´ umero 5 es el nivel de ejecuci´on multiusuario con entorno gr´afico y es el que se ejecuta por defecto cuando arranca el equipo. No tenemos que querdarnos entonces en que el nivel de ejecuci´on de nuestro equipo es el n´ umero 5, sino que en ese justo momento est´a en el nivel de ejecuci´on 5 y podremos cambiar a otro nivel en el momento que deseemos. Tambi´en es habitual que en las diferentes distribuciones Linux el nivel de ejecuci´on n´ umero 3 sea el de multiusuario sin entorno gr´afico. Si bien es posible que en alg´ un sistema Linux este nivel de ejecuci´on no sea el n´ umero 3, normalmente nos encontraremos este nivel de ejecuci´on ya que es muy habitual que las m´aquinas permanezcan la mayor´ıa del tiempo en ´el. Esto suele ocurrir en m´aquinas destinadas al c´alculo, donde es superfluo un entorno gr´afico ya que suelen ser administradas en remoto y el tener este entorno aumenta la necesidad en disco pero sobre todo la cantidad de memoria RAM necesaria para las operaciones habituales. Ya que hab´ıamos hablado del nivel de ejecuci´on monousuario, comentar que en la mayor´ıa de las distribuciones suele ser el n´ umero 1, es decir, estar en nivel de ejecuci´on n´ umero 1 implica necesariamente la imposibilidad de poder conectarnos a esta m´aquina con m´as de un usuario, y adem´as este (root) debe conectarse directamente en consola. El nivel de ejecuci´on n´ umero 2 es multiusuario sin entorno gr´afico y sin NFS 2
en muchas distribuciones de Linux, es decir, es como el nivel de ejecuci´on n´ umero 3 pero sin la posibilidad de importar/exportar recursos de disco a trav´es de la red. Este nivel de ejecuci´on se suele utilizar si tenemos alg´ un problema con la red, si bien queremos mantener la caracter´ıstica de entorno multiusuario en nuestro equipo. Finalmente comentar que el nivel de de ejecuci´on n´ umero 4 suele estar reservado para que el administrador del equipo lo adapte a sus propias necesidades, siendo por tanto este nivel de ejecuci´on el personal del administrador, teniendo las caracter´ısticas que este haya querido introducir. Cuando hablamos de nivel de ejecuci´on es posible que lo veamos como un ente extra˜ no y totalmente lejano a nuestras necesidades y posibilidades. Nada m´as lejano de la realidad. Cuando accedemos a un nivel de ejecuci´on, realmente lo que ocurre es que se ejecutan los scripts contenidos en el directorio rcX.d, donde X es un n´ umero que indica el nivel de ejecuci´on al que nos referimos (rc5.d por ejemplo a multiusuario con entorno gr´afico). Los directorios rcX.d habitualmente los encontramos directamente en el directorio /etc, si bien en ciertas distribuciones los encontraremos en /etc/init.d, y si comprobamos su contenido nos daremos cuenta de que contienen varios (en muchas ocasiones una gran cantidad) enlaces simb´olicos con nombres que siguen una estructura muy caracter´ıstica: El primer car´acter que nos encontramos es o una K o una S. A continuaci´on tenemos dos caracteres que son n´ umeros y finalmente tenemos un nombre sin ninguna regla preestablecida, pero que suele ser exactamente igual al nombre del fichero que apunta el enlace simb´olico, por ejemplo: K05network Los ficheros a los que apuntan, los scripts a los que apuntan, habitualmente los encontraremos en el directorio /etc/init.d (si bien no es obligatoria esta ubicaci´on), y normalmente responden estos scripts a una estructura tipo case. Cuando pasamos a un nivel de ejecuci´on dado, digamos el n´ umero 5, lo que ocurre es que se ejecutan en orden estricto todos y cada uno de los scripts a los que hacen referencia los enlaces simb´olicos. Estos scripts se ejecutan con un u ´ nico argumento, que ser´a start o stop dependiendo de si los enlaces simb´olicos empiezan por S o K respectivamente. Es decir, si en el directorio rc5.d tenemos los siguientes enlaces simb´olicos: S01network --> /etc/init.d/network S05nfs --> /etc/init.d/nfs K01ypbind --> /etc/init.d/ypbind el orden estricto implica por tanto que el primer script en ejecutarse ser´a /etc/init.d/ypbind (K es anterior a S), seguido de /etc/init.d/network (S01 es anterior a S05) y finalmente /etc/init.d/nfs La forma de ejecutar estos scripts ser´a por tanto: 3
/etc/init.d/ypbind stop /etc/init.d/network start /etc/init.d/nfs start Lo cual nos da una idea de la sencillez a la hora de incluir scripts personales para que se ejecuten de una determinada manera a la hora de pasar a un nivel de ejecuci´on concreto, pues lo que tendremos que hacer es ubicar nuestro script en el directorio /etc/init.d y realizar un enlace simb´olico en el directorio rcX.d que consideremos oportuno, llamando a este script con la sintaxis correcta. Hay que tener en cuenta que al ejecutarse en orden estricto, es conveniente tener en cuenta qu´e scripts se ejecutan antes y despu´es del que estamos modificando. Por ejemplo deber´ıamos tener en cuenta que si nuestro script ejecutar´a alguna herramienta que necesite de la red para funcionar, deber´ıa ejecutarse (si este es el caso), con posterioriddad al script que arranca la red, por lo tanto si este u ´ ltimo est´a enlazado como S08network, nuestro script podr´ıa ser S09script para que se ejecute con posterioridad al arranque de la red. Muchas veces equivocamos el sentido del fichero /etc/inittab al relacionarlo con los niveles de ejecuci´on. Este fichero indica qu´e procesos tienen que ejecutarse en el arranque as´ı como en la operaci´on habitual, y una de sus l´ıneas indica qu´e nivel de ejecuci´on se utilizar´a, por defeto, al arrancar la m´aquina. La l´ınea a la que hacemos referencia bien podr´ıa ser: id:3:initdefault: en la que se indica que el nivel de ejecuci´on por defecto, el que se ejecutar´a al arrancar la m´aquina, ser´a el nivel n´ umero 3. No obstante nosotros podremos cambiar de nivel de ejecuci´on f´acilmente utilizando el comando telinit, telinit 2 har´ıa que nuestra m´aquina pasara al nivel de ejecuci´on n´ umero 2, de tal forma que podemos utilizar los comandos halt (o shutdown -h now ) y reboot (o shutdown -r now para apagar la m´aquina o reiniciarla respectivamente, o bien sus an´alogos telinit 0 y telinit 6 respectivamente. En cualquier momento, podremos saber en qu´e nivel de ejecuci´on estamos sin m´as que teclear, runlevel
2.
service
Estos scripts que tenemos en nuestro sistema pueden ejecutarse con la opci´on stop o start cuando se cambia de nivel de ejecuci´on, pero tambi´en los podremos ejecutar mediante el comando service 4
service httpd start por ejemplo arrancar´a el servidor web en nuestro ordenador, es decir, buscar´a el script httpd en el directorio /etc/init.d y lo ejecutar´a con la opci´on start, sin tener que escribir nosotros toda la ruta completa.
3.
chkconfig
Adem´as de poder darle la opci´on start, podemos optar por proporcionarle la opci´on stop o cualquier otra (status por ejemplo), que tuviera configurada el script. Finalmente, si queremos configurar los distintos scripts que queremos que paren o arranque al pasar a uno u otro nivel de ejecuci´on, pero no nos atrae la idea de estar borrando, modificando o creando enlaces simb´olicos en los directorios correspondientes, siempre podremos hacer uso del comando chkconfig La ejecuci´on de este comando con la opci´on –list chkconfig --list nos mostrar´a en pantalla una lista con todos y cada uno de los scripts que pueden arrancarse o pararse al cambiar de nivel de ejecuci´on, describiendo su estado para cada nivel de ejecuci´on, es decir, nos indicar´an si en el nivel 5, por ejemplo, se arrancan o se paran, etc. Un ejemplo de ejecuci´on podr´ıa ser: xfs 3:activo ypbind 3:desactivado
0:desactivado 4:activo 0:desactivado 4:desactivado
1:desactivado 5:activo 1:desactivado 5:desactivado
2:activo 6:desactivado 2:desactivado 6:desactivado
Con esta herramienta no s´olo podremos listar el estado, sino que tambi´en podremos configurar un determinado script para que se le env´ıe una se˜ nal stop a la hora de pasar a un nivel de ejecuci´on determinado: chkconfig --level 35 sendmail off que configurar´ıa los directorios rc3.d y rc5.d de tal forma que se mandar´ıa una se˜ nal stop al script sendmail al pasar a cualquiera de estos dos niveles de ejecuci´on. Igual que hemos utilizado este comando para parar estos scripts, lo podr´ıamos haber hecho de forma equivalente para que arrancaran estos scripts cuando pas´aramos a estos niveles de ejecuci´on, pues lo u ´ nico que habr´ıa cambiado es on por off.
5