Guide du constructeur de distribution Oracle Solaris 11 Express

Création de scripts de finalisation personnalisés

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.


Remarque –

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.


  1. 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 :

  2. Créez vos nouveaux scripts.

  3. 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.

  4. 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.

  5. 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.


    Remarque –

    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.

Caractéristiques des scripts de finalisation

Lorsque vous créez vos propres scripts de finalisation, prenez en compte les points suivants :

Tableau 2–4 Arguments des scripts de finalisation

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.


PKG_IMG_PATH=$2
/usr/bin/grep jack $PKG_IMG_PATH/etc/passwd >/dev/null
if [[ $? == "0" ]] ; then
   print "Found Jack"
fi 

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. 


TMP_DIR=$3
/usr/sbin/mkfile $TMP_DIR/boot_archive_archive
/usr/sbin/lofiadm -a $TMP_DIR/boot_archive_archive 

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 ».


BR_BUILD=$4      # Boot archive build area

# Set nodename to solaris
echo "solaris" > $BR_BUILD/etc/nodename

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.


MEDIA_DIR=$5
...
DIST_ISO=${MEDIA_DIR}/${DISTRO_NAME}.iso
... 

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 :


<argslist>
     "/usr/share/distro_const/slim_cd/slimcd_generic_live.xml"
     ".livecd"
</argslist>

Une autre moyen d'indiquer d'autres arguments consiste à utiliser des paires clé-valeur. Reportez-vous à la section suivante. 

Utilisation du lecteur de fichiers manifest

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")

Spécification de paires clé-valeur

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.


Exemple 2–1 Script shell

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`


Exemple 2–2 Script Python

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,....)