16 de Marzo, 2004

Arrancando servicios locales en OpenBSD

El sistema de arranque de BSD es notablemente distinto del de Linux, sobretodo la ejecución de programas en el arranque: los scripts rc.

Aquí podemos distinguir entre System V init, que usa mayoritariamente toda distribución de Linux (pero no todas, todas), y BSD init, que usan los sistemas BSD.

No voy ha hacer un repaso de todos los rc de que dispone OpenBSD, solo voy a centrarme en /etc/rc.local.

Cuando instalamos un servicio mediante un port, por ejemplo, ese nuevo demonio no pertenece a la base del sistema y se considera un servicio local, que debe de ser lanzado desde rc.local.

Antes de empezar a trabajar con OpenBSD pasé mucho tiempo administrando alguna máquina con FreeBSD, y en este otro sistema la instalación de servicios locales es muy sencilla: cada port deja un script de ejemplo en /usr/local/etc/rc.d/, que convirtiéndolo a la extensión .sh ejecutará con el argumento start en cada arranque del sistema.

En OpenBSD esto no funciona así. Es rc.local el encargado de arrancar los servicios.

Vamos a emplear como ejemplo MySQL. Para ello podemos seguir el esquema que plantean los desarrolladores del sistema. Para activar el servicio pondremos en /etc/rc.conf.local:

# mysql=NO para desactivar
mysql=""

Recordemos que en rc.conf.local tendremos la configuración de nuestra máquina, mientras que en rc.conf están los valores por defecto.

Ahora solo hay que añadir en rc.local el código necesario para que arranque nuestro servicio cuando haga falta:

if [ X"${mysql}" != X"NO" -a -x /usr/local/bin/safe_mysqld ]; then
  echo -n " mysqld"; /usr/local/bin/safe_mysqld $mysql --user=mysql \
> /dev/null &
fi

Este código se situará entre el mensaje de starting local daemons: y el echo '.' final.

De esta forma hemos integrado el servicio de MySQL en el sistema de arranque de OpenBSD. Si deseamos pasar parámetros a MySQL, como por ejemplo deshabilitar el TCP/IP, pondríamos en rc.conf.local:

# mysql=NO para desactivar
mysql="--skip-networking"

A la hora de detener los procesos es más complicado que cuando contamos con scripts que aceptan start, stop e incluso reload. En el caso de MySQL haremos un:

# mysqladmin -u root -p shutdown

Para la mayoría de procesos bastará con buscar en /var/run su pid y mandarle un kill(1) con -HUP si queremos que recargue la configuración o -TERM si queremos que finalize su actividad.

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.