Pour savoir quelle source vous pouvez utiliser pour votre script, vous devez savoir quels outils sont installés sur le système client lors de la première initialisation. Le package solaris-large-server est installé par défaut. Si vous avez installé ce package de groupe, vous disposez de Python, bash, ksh et d'autres outils disponibles à la première initialisation. Pour obtenir la liste complète des packages inclus dans le package de groupe solaris-large-server, utilisez la commande pkg contents comme décrit dans la section Etablissement de la liste de tous les packages installables dans un package de groupe du manuel Ajout et mise à jour de logiciels dans Oracle Solaris 11.2 . Si vous souhaitez utiliser une source pour votre script qui n'est pas disponible dans le package solaris-large-server, identifiez le package dont vous avez besoin et spécifiez-le dans le manifeste AI. Pour plus d'informations sur la manière de rechercher les noms d'autres packages que vous êtes susceptible de vouloir installer, reportez-vous à la section Ajout et mise à jour de logiciels dans Oracle Solaris 11.2 .
Cet exemple montre des opérations qui doivent être effectuées dans tout script de première initialisation.
Un script de première initialisation doit charger /lib/svc/share/smf_include.sh afin d'utiliser les définitions telles que des codes de sortie de méthode SMF.
Le script doit tester s'il a déjà été exécuté lors d'une initialisation précédente. Si la propriété completed est déjà définie sur true, quittez la méthode start et désactivez temporairement le service.
La ligne suivante du script obtient la valeur de la propriété completed du groupe de propriétés config dans l'instance de service site/first-boot-script-svc:default et assigne cette valeur à la variable locale completed.
completed=`svcprop -p config/completed site/first-boot-script-svc:default`
La ligne suivante du script envoie le code de sortie SMF_EXIT_TEMP_DISABLE à la méthode start du service, avec method_completed en tant que motif court de la sortie et "Configuration completed" en tant que description plus longue du motif de la sortie.
smf_method_exit $SMF_EXIT_TEMP_DISABLE script_completed "Configuration completed"
Un script de première initialisation doit enregistrer une copie de l'environnement d'initialisation qui vient d'être créé par l'installation AI. L'enregistrement d'une copie d'environnement d'initialisation avant que le script de première initialisation ne le modifie permet une récupération facile des éventuels problèmes introduits par le script en effectuant une initialisation dans l'environnement d'initialisation enregistré.
Lorsque le script a terminé son travail, il doit définir la valeur de la propriété completed sur true, actualiser le service avec la nouvelle valeur de propriété, quitter la méthode start et désactiver temporairement le service. La commande svccfg permet de définir la propriété completed sur true et la commande svcadm permet d'actualiser le service.
N'oubliez pas que par défaut, sh est 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
Cet exemple montre un script de première initialisation nommé first-boot-script.sh qui configure les adresses sur deux interfaces IP et ajoute une route par défaut.
#!/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"
Une autre utilisation correcte d'un script de première initialisation consiste à utiliser la commande useradd afin de configurer plusieurs utilisateurs initiaux sur le système.