En CentOS o Red Hat, la herramienta de línea de comandos chkconfig se utiliza para mantener la jerarquía de directorios /etc/rc[0-6].d, que se utiliza para mantener los links simbólicos a los scripts de inicio de servicios de acuerdo a cada runlevel.
Ya que chkconfig es una herramienta sólo de Red Hat y similares, en Debian o Ubuntu se debe utilizar la herramienta update-rc.d para realizar la misma tarea.
update-rc.d actualiza automáticamente los links a scripts de inicio estilo System V /etc/rc[runlevel].d/[NN][script] que apuntan a los scripts /etc/init.d/[script]. Estos scripts son ejecutados por init cuando se cambian runlevels y se utilizan generalmente para iniciar y detener servicios.
Por ejemplo, para iniciar automáticamente el servicio ssh se debe ejecutar el comando
# update-rc.d ssh defaults
En cambio, para remover el servicio (que no sea iniciado automáticamente por init) se debe ejecutar:
# update-rc.d -f ssh remove
update-rc.d tiene dos modos de operación para instalar scripts en la secuencia de booteo: un modo legacy donde se utilizan argumentos en la línea de comandos para decidir la configuración de secuencia y runlevel; y un modo default donde la información de secuencia y runlevel se obtiene del encabezado de comentario LSB de los scripts init.d. El encabezado de comentario LSB de un script init.d tiene el siguiente formato:
### BEGIN INIT INFO # Provides: boot_facility_1 [ boot_facility_2 ...] # Required-Start: boot_facility_1 [ boot_facility_2 ...] # Required-Stop: boot_facility_1 [ boot_facility_2 ...] # Should-Start: boot_facility_1 [ boot_facility_2 ...] # Should-Stop: boot_facility_1 [ boot_facility_2 ...] # X-Start-Before: boot_facility_1 [ boot_facility_2 ...] # X-Stop-After: boot_facility_1 [ boot_facility_2 ...] # Default-Start: run_level_1 [ run_level_2 ...] # Default-Stop: run_level_1 [ run_level_2 ...] # X-Interactive: true # Short-Description: single_line_description # Description: multiline_description ### END INIT INFO
En este encabezado se puede obtener información sobre dependencias, runlevels, etc. Por ejemplo:
head -n 15 /etc/init.d/apache2
#!/bin/sh -e ### BEGIN INIT INFO # Provides: apache2 # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Short-Description: Start/stop apache2 web server ### END INIT INFO # # apache2 This init.d script is used to start apache2. # It basically just calls apache2ctl. ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"