Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 28 de abril de 2015

Systemd, el init del presente en el mundo Linux

Durante muchos años System V ha sido el init dominante que ha sido usado en una gran número de distribuciones y todo el mundo se ha acostumbrado a usar todas las ventajas que ofrece este estupendo sistema que cómo todo tenía sus pros y contras. Durante los últimos años otro init llamado systemd ha ido ganando terreno hasta el punto de que la mayoría de las distribuciones han empezado a implantarlo por defecto, cosa que se ha ganado tantos seguidores como detractores. Cierto es que que systemd ha desatado una gran polémica que ha hecho que mucha gente haya incurrido en numerosísimos debates, desde el propio Linus Tovarlds en su momento hasta una gran cantidad de usuarios que consideran que a pesar de que ofrece numerosas ventajas, el hecho de que este init tome el control de una gran cantidad de servicios (cosa que va en contra de la filosofía Unix la cual dice que un programa tiene que hacer una cosa en concreto y hacerla bien) y que éste haya sido impuesto prácticamente en todas las distribuciones libres ha hecho que este sea con diferencia el init más polémico en la historia del software libre hasta el momento.

Antes de continuar muchos probablemente os preguntéis: ¿Qué es un init? Un init es el primer proceso que se inicia la arrancar el sistema operativo, y el último que se para dentro de dicho sistema. Su objetivo es iniciar, controlar y parar el resto de servicios mediante diferentes comandos y/o scripts y es un servicios que siempre está activo en todo momento ya que tiene que gestionar los distintos cambios que puede haber en un servicio. Hasta el momento había diferentes init dependiendo del tipo de distribución (siendo System V el más común), pero ahora la gran mayoría a decidido adoptar uno en común: systemd.

Dejando de lado la polémica que ha desatado este cambio. La verdad es que para el usuario final no hay ninguna diferencia y cualquier tipo de diferencia que pueda notar debería ser para mejor ya que una de las ventajas principales que posee systemd es la aceleración del proceso de arranque; Pero para cualquiera que desee administrar o gestionar el sistema, encontrará algunos cambios de lo más interesantes que serían convenientes tener en cuenta. El init ofrece una gran variedad de opciones, algunas de ellas bastante rebuscadas, con lo que me enfocaré en aquellas que pueden resultar más útiles o necesarias de aprender.

Unidades objetivo

Probablemente el cambio más notorio para alguien al que le guste indagar en el sistema, sea la implantación de un concepto llamado unidad objetivo, más conocido como target unit. A diferencia de en SystemV, los niveles de ejecución ya no son necesarios y la única razón por la que existen es por su compatibilidad con el anterior init. Aún así, el concepto es muy parecido con la diferencia de que las unidades objetivo pueden realizar más de una tarea al mismo tiempo y que no tienen una representación númerica cómo con los runlevel (0,1,2...)

Las definiciones de las unidades está en /lib/systemd/system y pueden consultarse mediante un simple ls /lib/systemd/system |grep ".target$" o mediante systemctl list-unit-files --type=target. Estas unidades también contienen enlaces simbólicos en la carpeta /etc/systemd/system. Si realizáis cualquier de esos comandos veréis que hay targets con el nombre runlevel , pero sólo están para tener compatibilidad con system V tal y cómo he comentado antes; Dichos targets tienen los mismos parámetros que los targets que realmente se usan, que tienen una nomenclatura distinta a la que estamos acostumbrados pero con una estructura equivalente a la de los runlevel, aquí abajo os muestro una tabla que muestra los distintos targets con sus equivalentes de SystemV:


Tabla de targets

Actualmente el target por defecto es el número 5, el graphical.target, con lo que veamos que es lo que muestra dicho target mediante el uso del comando cat:


Resultado de graphical.target

Para averiguar el target por defecto habría que escribir:

systemctl get-default

Si por el motivo que sea se desease cambiar el target por defecto solamente habría que escribir.

systemctl set-default ${NOMBRE_TARGET}


Systemctl

Anteriormente he mencionado el comando systemctl pero no os he explicado su utilidad. Systemctl es una herramienta desarrollada con el fin de gestionar las unidades controladas por systemd. Es una herramienta muy versátil con multitud de opciones, pero las más conocidas son:

Para mostrar todas las unidades activas sin ningún tipo de filtro ni especificación

  1. systemctl
o
  1. systemctl list-units

Este comando muestra todas las unidades ya estén activas o no

  1. systemctl --all
o
  1. systemctl list-unit-files

Aunque anteriormente ya he hecho mención a los siguientes dos comandos, creo que es conveniente mostrarlos aquí de nuevo para tenerlo todo mejor plasmado. Los siguientes dos comandos muestran las unidades objetivo. El primero muestra las unidades objetivo activas, mientras que el segundo muestra absolutamente todas

  1. systemctl list-units --type=target
  2. systemctl list-unit-files --type=target

Para controlar las unidades se hace de forma muy parecida a cuando se usa el comando service. En estos cuatro ejemplos se ve cómo se arranca, para, reinicia y se controla el estado de una unidad  (en este caso sshd) respectivamente.

  1. systemctl start sshd.service
  2. systemctl stop sshd.service
  3. systemctl reload sshd.service
  4. systemctl status sshd.service

Interfaz gráfica systemctl


Aquellos a los que no les guste la consola, pueden optar por una interfaz gráfica que te ofrece más vistosidad a la hora de mostrar las unidades; Permite realizar las tareas básicas de systemctl(cómo por ejemplo las mencionadas arriba), pero si uno desea entrar en opciones más profundas y/o complejas, probablemente no le quede más remedio que pasarse a la consola. Dicha interfaz gráfica no va instalada por defecto, sino que tiene que ser instalada manualmente. Para instalarla habría que hacer:


Debian: apt-get install systemd-ui
Fedora: yum install systemd-gtk

Aún con esos nombres de paquete, el nombre de la interfaz gráfica es systemd System Manager y tiene el siguiente aspecto:

systemd System Manager

Aunque la interfaz gráfica representa obviamente una ventaja, no siempre podemos contar con esta, ya que nos podemos encontrar en la situación de que no haya ningún entorno gráfico (cosa que ocurre en los servidores por ejemplo) con lo que conviene tener unas ideas generales del funcionamiento de este nuevo init y sus funcionalidades.

Espero que os sea útil.

Saludos.

No hay comentarios :

Publicar un comentario