jueves, 21 de julio de 2016

Secuencia de arranque con systemctl

systemctl ha llegado a Linux envuelto en polémica. En la evolución de este sistema operativo ya hemos vivido episodios similares. Yo creo que como suele ocurrir, ha venido para quedarse.
Ya que tenemos que lidiar con él vamos a sacarle algún partido extra que justifique el "trago".

Ubicación de la configuración
Lo que antes buscabas en tu /etc/rcX.d ya no está. Tampoco te funciona "/etc/init.d/servicioX start". Eso ha cambiado y hay una nueva ubicación y un sistema de dependencias en el arranque diferente. Si eres de los míos y quieres saber donde se esconde y qué forma tiene la configuración aquí tienes algunas indicaciones:

# ls -al /etc/systemd/system/
total 12
drwxr-xr-x. 10 root root 4096 jul 21 10:40 .
drwxr-xr-x.  4 root root 4096 abr 25 13:35 ..
drwxr-xr-x.  2 root root   30 jul 21 10:40 basic.target.wants
lrwxrwxrwx.  1 root root   46 abr 25 13:28 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx.  1 root root   57 abr 25 13:28 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx.  1 root root   37 abr 25 13:29 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x.  2 root root   85 abr 25 13:28 default.target.wants
drwxr-xr-x.  2 root root   31 abr 25 13:28 getty.target.wants
drwxr-xr-x.  2 root root 4096 may 18 13:59 multi-user.target.wants
drwxr-xr-x.  2 root root   30 may 18 13:59 remote-fs.target.wants
drwxr-xr-x.  2 root root   75 may 18 13:59 sockets.target.wants
drwxr-xr-x.  2 root root   86 abr 25 13:35 sysinit.target.wants
drwxr-xr-x.  2 root root   43 abr 25 13:28 system-update.target.wants


# ls /etc/systemd/system/multi-user.target.wants
atop.service      crond.service       kdump.service           nfs-client.target  
postfix.service   rsyslog.service     sshd.service            vmtoolsd.service
auditd.service    irqbalance.service  NetworkManager.service  ntpd.service       
remote-fs.target  snmpd.service       tuned.service


# cat /etc/systemd/system/multi-user.target.wants/atop.service
[Unit]
Description=advanced interactive monitor
After=syslog.target

[Service]
Type=forking
PIDFile=/var/run/atop.pid
ExecStart=/usr/bin/atopd
ExecStop=/bin/rm -f /var/run/atop.pid

[Install]
WantedBy=multi-user.target

Secuencia de arranque
Seguro que todos tenemos más o menos una idea de cómo arranca nuestro equipo con Linux. Me refiero a la secuencia en las que las cosas ocurren. Podemos saber con precisión qué depende de qué con el comando

# systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

multi-user.target @22.077s
└─tuned.service @17.251s +4.824s
  └─network.target @17.233s
    └─network.service @15.516s +1.715s
      └─NetworkManager.service @7.451s +1.904s
        └─basic.target @7.265s
          └─sockets.target @7.265s
            └─dbus.socket @7.264s
              └─sysinit.target @7.253s
                └─systemd-update-utmp.service @7.201s +50ms
                  └─auditd.service @6.744s +452ms
                    └─systemd-tmpfiles-setup.service @6.647s +94ms
                      └─rhel-import-state.service @6.536s +108ms
                        └─local-fs.target @6.505s
                          └─boot.mount @5.125s +1.375s
                            └─systemd-fsck@dev-disk-by\x2duuid-0a013536\x2d8d16\x2d4bde\x2db03a\x2da664620130fe.service @4.737s +386ms
                              └─dev-disk-by\x2duuid-0a013536\x2d8d16\x2d4bde\x2db03a\x2da664620130fe.device @4.736s

Diagrama de Gant y tiempos de puesta en marcha
Podemos obtener más detalle en el informe generando un diagrama de Gant con marcas de tiempo. Para ello podemos usar el comando
systemd-analyze plot > boot-gant.svg

Esto nos va a generar un svg que puedes abrir sin problemas con cualquier explorador de internet (por ejemplo). Verás algo asi como el gráfico siguiente. Si lo analizas verás que te indice el tiempo en el que tu sistema operativo está completamente arriba desde cero.

La leyenda (abajo) te indica el estado de cada proceso a lo largo del tiempo.