Para conocer qué origen puede utilizar para la secuencia de comandos, necesita saber qué herramientas están instaladas en el sistema cliente en el primer inicio. El paquete solaris-large-server se instala de manera predeterminada. Si ha instalado ese paquete de grupo, tiene Python, bash, ksh y otras herramientas disponibles al iniciar el equipo por primera vez. Para obtener una lista completa de los paquetes que se incluyen en el paquete de grupo solaris-large-server, use el comando pkg contents, como se describe en Enumeración de todos los paquetes instalables en un paquete de grupo de Agregación y actualización de software en Oracle Solaris 11.2 . Si desea utilizar para su secuencia de comandos un origen que no está disponible en el paquete solaris-large-server, identifique el paquete que necesita y especifíquelo en el manifiesto de AI. Para obtener información sobre cómo encontrar los nombres de otros paquetes que puede querer instalar, consulte Agregación y actualización de software en Oracle Solaris 11.2 .
En este ejemplo, se muestran las operaciones que se deben realizar en cualquier secuencia de comandos del primer inicio.
Una secuencia de comandos del primer inicio debe cargar /lib/svc/share/smf_include.sh para utilizar definiciones, por ejemplo, códigos de salida del método SMF.
La secuencia de comandos debe comprobar si ya se ejecutó en un inicio anterior. Si la propiedad completed ya se estableció en true, salga del método start y desactive temporalmente el servicio.
La siguiente línea de la secuencia de comandos obtiene el valor de la propiedad completed del grupo de propiedades config en la instancia de servicio site/first-boot-script-svc:default y asigna ese valor a la variable completed local.
completed=`svcprop -p config/completed site/first-boot-script-svc:default`
La siguiente línea de la secuencia de comandos envía el código de salida SMF_EXIT_TEMP_DISABLE al método start del servicio, con method_completed como motivo breve de la salida y "Configuration completed" como descripción más larga del motivo de la salida.
smf_method_exit $SMF_EXIT_TEMP_DISABLE script_completed "Configuration completed"
Una secuencia de comandos del primer inicio debe guardar una copia del entorno de inicio (BE) que se acaba de crear mediante la instalación AI. Guardar una copia del BE antes de que la secuencia de comandos del primer inicio lo modifique permite recuperarse fácilmente de cualquier problema ocasionado por la secuencia de comandos con sólo reiniciar en el BE guardado.
Cuando la secuencia de comandos termina su tarea, la secuencia de comandos debe establecer el valor de la propiedad completed en true, refrescar el servicio con el nuevo valor de la propiedad, salir del método start y desactivar temporalmente el servicio. Utilice el comando svccfg para establecer la propiedad completed en true y utilice el comando svcadm para refrescar el servicio.
Recuerde que, de manera predeterminada, sh es ksh93.
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed= $(svcprop -p config/completed site/first-boot-script-svc:default ) [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename= $(beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}' ) beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Place your one-time configuration tasks here # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
$ ksh -n first-boot-script.sh
En este ejemplo, se muestra una secuencia de comandos del primer inicio denominada first-boot-script.sh que configura direcciones en dos interfaces IP y agrega una ruta predeterminada.
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed=`svcprop -p config/completed site/first-boot-script-svc:default` [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename=`beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}'` beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Create and configure addresses on two IP interfaces /usr/sbin/ipadm create-ip net0 /usr/sbin/ipadm create-ip net1 /usr/sbin/ipadm create-addr -a 10.153.125.222/24 net0 /usr/sbin/ipadm create-addr -a 169.254.182.77/24 net1 # Add a default route with net0 as the gateway /usr/sbin/route add default 10.153.125.1 -ifp net0 # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
Otro buen uso de una secuencia de comandos del primer inicio es utilizar el comando useradd para configurar varios usuarios iniciales en el sistema.