viernes, 7 de septiembre de 2012

systemd, reemplazo de sysvinit

En los sistemas UNIX el primer proceso que se crea y se encarga de inicializar el resto de procesos se le conoce como init. Desde 1980 esta tarea era llevada a cabo por «System V init» (sysvinit). Sin embargo, dado que en sysvinit los servicios se lanzan en un orden determinado y los dispositivos actuales son muy diversos y dinámicos está dejando de ser adecuado para estos tiempos. En el 2006 Canonical desarrollo Upstart con el objetivo de crear un reeemplazo para sysvinit. Upstart es sistema dirigido por eventos de tal forma que cuando ocurre cierta circunstancia se hace alguna acción, como «el dispositivo de red se ha montado», soportando mejor de esta forma la dinamicidad del los sistemas. Upstart parecía el sucesor de sysvinit, sin embargo, la migración de sysvinit a un sistema dirigido por eventos como upstart no es sencilla.

systemd fue lanzado en 2010 por Lennart Poettering, conocido también por desarrollar pulseaudio, también como un reemplazo de sysvinit. systemd está comenzando a reemplazar a sysvinit como el proceso encargado de arrancar el sistema en varias distribuciones como Fedora, openSUSE, Mandriva y Arch Linux por varias de sus características.

systemd activa todos los sockets que utilizan los procesos para comunicarse antes de que ninguno sea arrancado de forma que estén disponibles para cuando lo hagan, una vez inicializados los sockets systemd inicia todos los procesos en paralelo sin ningún orden preestablecido o bajo demanda cuando se envía un mensaje a su socket. Cuando un proceso necesita de otro se comunica a través de los sockets, si el proceso destinatario aún no no está disponible para recibir el mensaje systemd lo encola para que no se pierda y lo despacha cuando el proceso destintario está disponible. De esta forma se consigue un paralelismo total entre los procesos que inician el sistema.

Aqui una comparativa de sysvinit, upstart y systemd:


Si quieres conocer más acerca de systemd te recomiendo leer el siguiente excelente artículo y la documentación incluida en su referencia parte de la cual está en el apartado de referencia, también algunas de las ventajas puestas en un post del los foros de arch linux que independientemente de las mejoras de tiempos (esto igual es lo menos importante de systemd) están que los servicios pueden ser proporcionados por los proyectos originales en vez de ser cada distribución la que los desarrolle y la no necesidad de configurar explícitamente las dependencias.

Si usas Arch Linux y has echo una actualizanción completa hace menos de una semana ya tendrás todo lo necesario para iniciar el sistema con systemd y realizar la migración. Los pasos serán los siguientes:

  • Lo primero será adaptar los archivos de configuración a systemd. Basicamente lo que antes estaba en el archivo /etc/rc.conf ahora está separado en varios archivos.
  • También hay que indicar a systemd los servicios que queremos arrancar con el sistema a través de «systemctl enable [servicio].service», para ello miraremos la lista de DAEMONS del archivo en /etc.rc.conf e iremos habilitando su correspondiente en systemd.
  • Luego iniciaremos el sistema con systemd añadiendo en la linea de comando del kernel init=/bin/systemd y quitando la opción quiet para ver las trazas y si se produce algún error. Esto se puede hacer sin modificar ningún archivo desde grub2 editando la entrada con la tecla «e» y una vez modificada la linea de comando pulsando F10.
  • Finalmente, si todo ha ido correctamente en el inicio con systemd podremos eliminar el paquete initscripts e instalar systemd-sysvcompat con lo que tendremos un sistema puro de systemd.

Pero antes de nada es muy recomendable leer algo de documentación sobre lo que se va a hacer empezando por la wiki de arch linux sobre systemd. Decir que aún hay algunos programas que no tienen su correspondiente .service para iniciarlo desde systemd pero se solucionará con el tiempo.

Después de todo veremos a systemd como el proceso con PID 1:


Referencia:
http://freedesktop.org/wiki/Software/systemd
http://en.wikipedia.org/wiki/Systemd
http://diegocg.blogspot.com.es/2010/05/systemd-otro-reemplazo-de-init.html
http://www.h-online.com/open/features/Control-Centre-The-systemd-Linux-init-system-1565543.html
http://0pointer.de/blog/projects/systemd.html
http://0pointer.de/blog/projects/socket-activation.html
http://0pointer.de/blog/projects/socket-activation2.html
http://0pointer.de/blog/projects/why.html
http://gespadas.com/archlinux-systemd
https://bbs.archlinux.org/viewtopic.php?pid=1149530#p1149530