Scripts de inicio interactivos en Debian Squeeze | Algo de Linux

miércoles, 14 de diciembre de 2011

Scripts de inicio interactivos en Debian Squeeze

A veces necesitamos un script que sólo se ejecute una vez y que nos permita configurar una máquina en el primer inicio de modo interactivo. Probé a utilizar uno de los que tenemos en los portátiles y vi que no funcionaba en una Debian Squeeze actualizada. Así que tuve que adaptarlo de la siguiente manera:

Copié el script a /etc/init.d:

# cp primer-arranque /etc/init.d

Después le añadí las cabeceras que debe tener todo script de inicio para cumplir con la LSB.

### BEGIN INIT INFO
# Provides: primer-arranque
# Required-Start: console-setup
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Interactive: true
# Short-Description: Configuración del equipo en el primer arranque
# Description: primer-arranque hace una configuración básica
# del equipo la primera vez que se inicia.
### END INIT INFO


Como se puede ver en la siguiente línea:

# Default-Start: S

Este script se ejecuta en /etc/rcS.d/

Para que se ejecute después del script console-setup, defino:


# Required-Start: console-setup

Y para que el script pueda actuar de forma interactiva con el usuario, añado la siguiente línea:


# X-Interactive: true


Una vez hecho ésto, ejecuto insserv para que se cree el enlace correspondiente que lo lance en /etc/rcS.d/

# insserv /etc/init.d/primer-arranque

Comprobé que se había creado el enlace: /etc/rcS.d/S22primer-arranque

Así que modifiqué el script para que cuando se ejecutase correctamente, borrara el enlace y no volviera a ejecutarse más, añadiéndole la siguiente línea:

unlink /etc/rcS.d/S22primer-arranque

A continuación podemos ver cómo ha quedado el script una vez terminado de retocar:

#!/bin/sh
#
# Configuración del equipo en el primer arranque.

### BEGIN INIT INFO
# Provides: primer-arranque
# Required-Start: console-setup
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Interactive: true
# Short-Description: Configuración del equipo en el primer arranque
# Description: primer-arranque hace una configuración básica
# del equipo la primera vez que se inicia.
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

rm -f /etc/udev/rules.d/70-persistent-net.rules

DIALOG=${DIALOG=dialog}
$DIALOG --title "Preparando el equipo workstation" --clear \
--yesno "Si se va a terminar de configurar el equipo como workstation, conteste Sí (Yes) a esta pregunta. En este caso se le preguntará por el nombre que se le va a poner. En el caso de que este equipo no se vaya a configurar en este momento, elija NO" 18 70

case $? in
0)
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Nombre del workstation" --clear \
--inputbox "Introduzca el nombre de este equipo:" 10 51 2> $tempfile

retval=$?

case $retval in
0)
NOMBRE=`cat $tempfile`
;;
esac

if [ "$NOMBRE" ] ; then
echo "
127.0.0.1 localhost
127.0.1.1 $NOMBRE

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters" > /etc/hosts

cp -f /root/interfaces /etc/network/
cp -f /root/grub /etc/default/
echo "$NOMBRE" > /etc/hostname
hostname -F /etc/hostname
rm -rf /var/lib/puppet/ssl
mkswap /dev/sda5 2>/dev/null
swapon /dev/sda5 2>/dev/null
/etc/init.d/puppet restart
/etc/cron.weekly/ocsinventory-agent
update-grub
cp -f /root/rcS /etc/default/
unlink /etc/rcS.d/S22primer-arranque

else
$DIALOG --title "ERROR" --clear \
--msgbox "Falta el nombre de este equipo y es necesario para su configuración Puede volver a intentar la configuración reiniciando este ordenador." 12 46

case $? in
0) ;;
esac
fi
;;
esac