Il est recommandé d'utiliser les scripts de finalisation fournis sans les modifier. Vous pouvez toutefois écrire et ajouter vos propres scripts afin d'effectuer d'autres opérations, comme décrit ci-dessous. Si vous créez de nouveaux scripts, modifiez les fichiers manifest pour qu'ils les désignent.
La prise en charge des scripts est limitée aux scripts par défaut, non modifiés, fournis avec les packages d'application. Si vous décidez de personnaliser ces scripts, sauvegardez les scripts d'origine au préalable.
Concevez vos nouveaux scripts. Utilisez les scripts existants comme modèles pour les nouveaux scripts. Reportez-vous à la section Caractéristiques des scripts de finalisation.
Consultez également les exemples de scripts personnalisés suivants :
Créez vos nouveaux scripts.
Ajoutez les nouveaux scripts au répertoire /usr/local/, à votre répertoire personnel ou ailleurs sur le système ou réseau. Assurez-vous que le rôle root puisse exécuter ces scripts.
Ajoutez le nom des nouveaux scripts dans la section de finalisation du fichier manifest approprié. Veillez à spécifier le chemin d'accès complet à vos scripts dans le fichier manifest, même s'ils se trouvent dans le répertoire /usr/share/distro_const.
Lorsque vous ajoutez une référence pour un nouveau script dans la section de finalisation d'un fichier manifest, vous devez spécifier un nom de point de contrôle utilisé pour interrompre la création de l'image avant que ce script ait effectué sa tâche ou après. Vous pouvez également inclure un message personnalisé associé au nom du point de contrôle. Si vous n'ajoutez pas un tel message, le chemin du script est utilisé comme message de point de contrôle par défaut.
Attribuez aux points de contrôle des noms explicites plutôt que des nombres. Si de nouveaux scripts sont ajoutés, les nouvelles étapes correspondant à ces nouveaux scripts perturberont l'ordre des points de contrôle numérotés.
Par exemple, la référence suivante dans un fichier manifest spécifie le nom de point de contrôle "ba-arch" pour un script d'archivage de l'archive d'initialisation et le message associé est "archivage de l'archive d'initialisation".
<script name="/usr/share/distro_const/boot_archive_archive.py"> <checkpoint name="ba-arch" message="Boot archive archiving"/> </script> |
Cet exemple vous permet de spécifier une commande distro_const pour créer votre image, ou interrompre ou reprendre la création à partir du point de contrôle "ba-arch". La création d'image s'interrompt juste avant que le script d'archivage de l'archive d'initialisation effectue sa tâche.
Pour en savoir plus sur le référencement des points de contrôle dans la commande distro_const, reportez-vous à la section Création d'une image par étapes.
Lorsque vous créez vos propres scripts de finalisation, prenez en compte les points suivants :
Les scripts peuvent être des programmes Python, des scripts shell ou des fichiers binaires.
Les scripts sont exécutés dans leur ordre d'apparition dans le fichier manifest.
La sortie standard (stdout) et la sortie d'erreur (stderr) des commandes exécutées dans les scripts de finalisation (modules shell et python) sont enregistrées dans les fichiers journaux. La sortie stderr est enregistrée dans le journal simple. Les sorties stdout et stderr sont capturées dans le journal détaillé.
Le constructeur de distribution transmet cinq arguments initiaux à tous les scripts exécutés. Ces cinq arguments ne sont pas inclus en tant qu'entrées dans le fichier manifest. Le fichier manifest spécifie d'autres arguments transmis après ces cinq arguments. Les arguments initiaux sont les suivants.
Argument |
Description |
|
---|---|---|
Nom de fichier du socket de serveur |
Le premier argument est le socket du lecteur de fichiers manifest. Cet argument spécifie le socket utilisé avec /usr/bin/ManifestRead pour accéder aux données du fichier manifest. Reportez-vous à la section Utilisation du lecteur de fichiers manifest. |
|
Chemin d'accès à la zone d'image du package |
Le deuxième argument est PKG_IMG_PATH, qui spécifie le chemin d'accès à la zone où l'image du package est créée. Utilisez cet argument pour localiser un fichier dans la zone d'image du package. L'exemple suivant vérifie si l'utilisateur, "jack", se trouve dans le fichier de mots de passe de la zone d'image du package.
|
|
Répertoire temporaire |
Le troisième argument spécifie un répertoire qui est utilisé lors de la création de fichiers temporaires nécessaires au processus de création. Dans l'exemple suivant, vous créez un fichier dans le répertoire temporaire pour générer l'archive d'initialisation.
|
|
Zone de construction de l'archive d'initialisation |
Le quatrième argument est la zone de création de l'archive d'initialisation, où les fichiers d'archive d'initialisation sont rassemblés. Reportez-vous à l'exemple suivant dans le module boot_archive_configure, qui ajoute ce fichier, /etc/nodename, à l'archive d'initialisation. Ce fichier donne au système le nom d'hôte, « solaris ».
|
|
Zone de média |
Le cinquième argument indique l'emplacement où le média terminé est consigné. Dans l'exemple suivant, le script create_iso utilise cet argument pour placer l'image ISO obtenue.
|
|
Arguments supplémentaires |
Une liste des arguments supplémentaires qui sont transmis à un script apparaît dans le fichier manifest avec la balise <argslist>. Le premier de ces arguments est transmis comme arg6. Entourez chaque élément de la liste de guillemets doubles. Si aucun guillemet n'est utilisé, ou si un ensemble de guillemets encadre l'intégralité de la chaîne, celle-ci, espaces et retours inclus, est interprétée comme un argument. N'utilisez pas de virgules pour séparer les arguments. Dans l'exemple suivant du fichier manifest slim_cd_x86.xml, deux arguments supplémentaires sont transmis au script boot_archive_configure, comme arg6 et arg7 :
Une autre moyen d'indiquer d'autres arguments consiste à utiliser des paires clé-valeur. Reportez-vous à la section suivante. |
Le constructeur de distribution transmet le socket du lecteur de fichiers manifest comme premier argument dans les scripts de finalisation. Dans un script shell de finalisation, transmettez cet argument en tant que premier argument à /usr/bin/ManifestRead pour accéder aux données du fichier manifest. Dans un module python, transmettez cet argument pour créer une instance d'un objet ManifestRead().
Les exemples de scripts shell suivants appellent ManifestRead afin de demander l'élément name à partir du fichier manifest. ManifestRead renvoie zéro ou plusieurs éléments, chacun sur sa propre ligne. Si ManifestRead doit rechercher plusieurs éléments, les lignes renvoyées contiennent l'élément recherché et un résultat.
MFEST_SOCKET=$1 VOLNAME=`/usr/bin/ManifestRead ${MFEST_SOCKET} "name"` if [ "XX${VOLNAME}" == "XX" ] ; then print -u2 "$0: Error retrieving volume ID" exit 1 fi |
L'exemple suivant montre comment utiliser ManifestRead à partir d'un script Python :
from osol_install.ManifestRead import ManifestRead # get the manifest reader object from the socket manifest_reader_obj = ManifestRead(MFEST_SOCKET) # get boot_archive compression type BR_COMPR_TYPE = get_manifest_value(manifest_reader_obj, "img_params/output_image/boot_archive/compression/type") if (BR_COMPR_TYPE == None): raise Exception, (sys.argv[0] + ": boot_archive compression type missing from manifest") |
Une autre méthode pour transmettre des arguments aux scripts consiste à spécifier une paire clé-valeur. Elle est utile pour transmettre le même argument à plusieurs scripts sans duplication. Un script peut accéder à une valeur codée en spécifiant la clé de /usr/bin/ManifestRead à partir du script. Indiquez le socket de serveur comme premier argument, puis précisez les chemins d'accès du nœud aux éléments dont les valeurs sont nécessaires, comme dans les exemples suivants.
L'exemple suivant appelle ManifestRead à partir d'un script shell pour obtenir une valeur codée.
... MFEST_SOCKET=$1 ... /usr/bin/ManifestRead -k $MFEST_SOCKET iso_sort iso_sort_file=`/usr/bin/ManifestRead $MFEST_SOCKET iso_sort` |
L'exemple suivant appelle ManifestRead à partir d'un script Python pour obtenir la même valeur codée.
from osol_install.ManifestRead import ManifestRead ... IS_KEY = True iso_sort_file = manifest_reader_obj.get_values("iso_sort", IS_KEY) fd = open(iso_sort_file,....) |